Изменения

Перейти к: навигация, поиск

Сортировка Хана

3332 байта добавлено, 04:57, 12 июня 2012
Нет описания правки
Заметим, что если длина контейнера <tex>logmloglogn</tex> и только <tex>logm</tex> бит используется для упаковки <tex>g <= logn</tex> чисел в один контейнер, тогда выбор в лемме три может быть сделан за время и место <tex>O(n/g)</tex>, потому, что упаковка в доказатльстве леммы три теперь может быть сделана за время <tex>O(n/g)</tex>.
==Сортировка <tex>n</tex> целых чисел в <tex>\sqrt{(n}</tex> ) наборов==
Постановка задачи и решение некоторых проблем:
Время работы алгоритма <tex>O(nloglogn/logk)</tex>, что доказывает лемму 2.
==Собственно сортировка с использованием O(nloglogn) времени и памяти==Для сортировки <tex>n</tex> целых чисел в диапазоне от {<tex>0, 1, ..., m - 1</tex>} мы предполагаем, что используем контейнер длины <tex>O(log(m + n))</tex> в нашем консервативном алгоритме. Мы всегда считаем что все числа упакованы в контейнеры одинаковой длины.  Берем <tex>1/e = 5</tex> для экспоненциального поискового дереве Андерссона. Поэтому у корня будет <tex>n^{1/5}</tex> детей и каждое Э.П.дерево в каждом ребенке будет иметь <tex>n^{4/5}</tex> листьев. В отличии от оригинального дерева, мы будем вставлять не один элемент за раз а <tex>d^2</tex>, где <tex>d</tex> {{---}} количество детей узла дерева, где числа должны спуститься вниз.Но мы не будем сразу опускать донизу все <tex>d^2</tex> чисел. Мы будем полностью опускать все <tex>d^2</tex> чисел на один уровень. В корне мы опустим <tex>n^{2/5}</tex> чисел на следующий уровень. После того, как мы опустили все числа на следующий уровень мы успешно разделили числа на <tex>t_{1} = n^{1/5}</tex> наборов <tex>S_{1}, S_{2}, ..., S_{t_{1}}</tex>, в каждом из которых <tex>n^{4/5}</tex> чисел и <tex>S_{i} < S_{j}, i < j</tex>. Затем мы берем <tex>n^{(4/5)(2/5)}</tex> чисел из <tex>S_{i}</tex> за раз и опускаем их на следующий уровень Э.П.дерева. Повторяем это, пока все числа не опустятся на следующий уровень. На этом шаге мы разделили числа на <tex>t_{2} = n^{1/5}n^{4/25} = n^{9/25}</tex> наборов <tex>T_{1}, T_{2}, ..., T_{t_{2}}</tex> в каждом из которых <tex>n^{16/25}</tex> чисел, аналогичным наборам <tex>S_{i}</tex>. Теперь мы можем дальше опустить числа в нашем Э.П.дереве. Нетрудно заметить, что ребалансирока занимает <tex>O(nloglogn) </tex> времени и памятис <tex>O(n)</tex> временем на уровень. Аналогично стандартному Э.П.дереву Андерссона. Нам следует нумеровать уровни Э.П.дерева с корня, начиная с нуля. Рассмотрим спуск вниз на уровне <tex>s</tex>. Мы имеем <tex>t = n^{1 - (4/5)^s}</tex> наборов по <tex>n^{(4/5)^s}</tex> чисел в каждом. Так как каждый узел на данном уровне имеет <tex>p = n^{(1/5)(4/5)^s}</tex> детей, то на <tex>s + 1</tex>уровень мы опустим <tex>q =n^{(2/5)(4/5)^s}</tex> чисел для каждого набора или всего <tex>qt >=n^{2/5}</tex> чисел для всех наборов за один раз.
81
правка

Навигация