39
правок
Изменения
Timsort
,→Доказательство времени работы алгоритма
== Доказательство времени работы алгоритма ==
При сливании двух подмассивов <tex> T(n) = T(run1.size) + T(run2.size) + O(run1.size + run2.size) run_1</tex>. Алгоритм построен таким образом, что сливаемые подмассивы имеют примерно равные размеры. Таким образом можно считать: <tex> T(n) = T(run1.size) + T(run2.size) + run_2</tex> будет произведенно <tex>O(run1run_1.size + run2run_2.size) </tex> операций сравнения. Результирующий подмассив <tex> \approx 2T(n/2) + O(n) \approx run_{12}</tex> будет удовлетворять выражению <tex> 4T(n/4) + 2O(n) run_{12}.size \approx \dots 2run_1.size \approx 2^{k}T(1) + kO(n) </tex>2run_2. Осталось оценить <tex>ksize </tex>. <tex>n/minrun</tex> - количество сливаемых блоковТаким образом, откуда следует, что каждый подмассив <tex>2^{k} = n/minrunrun_i</tex>, значит может поучаствовать в не более <tex> k = O(log(n/minrun))</tex>. операций слияния, а значит и каждый элемент будет задействован в сравниниях не более <tex>TO(n) \approx 2^{k}T(1) + kOlog(n) </tex> = <tex> log(n/minrun) + </tex>раз. Элементов <tex>log(n/minrun)O(n)</tex> , откуда и получаем соответствующую оценку в <tex> = O(nlog(n)). </tex>
== Источники ==