Время Хана , линейное пространство, алгоритм целочисленной сортировки


38

Кто-нибудь знаком с Йиджи Хана , линейным пространством, алгоритмом целочисленной сортировки? Этот результат появляется в довольно короткой статье ( Детерминированная сортировка по времени и линейного пространства . J. Alg. 50: 96–105, 2004), которая в основном склеивает множество более ранних результатов с подходящими приспособления. Моя проблема в том, что он написан довольно махнув рукой, не вдаваясь в подробности. Он в значительной степени опирается на предыдущие статьи, среди которых выделяется еще одна статья Хана ( Улучшенная быстрая целочисленная сортировка в линейном пространствеO(nloglogn)O(nloglogn), Информация и вычисления 170 (1): 81–94) написаны во многом в том же стиле. У меня возникают значительные трудности в понимании этих двух документов, особенно в том, как они адаптируются и используют предыдущие результаты. Буду признателен за любую помощь.

Это, конечно, слишком широкий и расплывчатый вопрос, чтобы считать его правильным вопросом, но я надеюсь развить дискуссию по нескольким четко определенным вопросам и ответам.

Для начала, вот мой первый конкретный вопрос. В лемме 2 инфо. Комп. В статье представлен рекурсивный алгоритм времени O(n/klogk) для нахождения m-го наименьшего целого числа из набора из n маленьких целых чисел, упакованных по k в слова RAM. В описании алгоритма не упоминается, как обрабатывается базовый случай k=O(n) . В этом случае требуется сделать выбор за O(logk) времени. Как это может быть сделано?


13
Было бы совершенно уместно написать ему: hanyij@umkc.edu.
Джозеф О'Рурк

Да. Мы обсуждали эту общую проблему раньше, и правильный способ решить эту проблему - написать автору по электронной почте.
Суреш Венкат

17
Это включает конкретный вопрос о статье, которой 7 лет и которая уже прошла процесс рецензирования. Хотя Ари мог написать письмо автору, это кажется идеальным вопросом для этого сайта. Я не понимаю отклонения.
Гек Беннетт

18
Конечно, первое, что я сделал, это написал Хан. Нет ответа. Затем я связался с кем-то еще, кто провел исследование целочисленной сортировки, и он сказал, что после прочтения он обнаружил, что документы слишком грязные, чтобы заслуживать дальнейших вложений своего времени. Вот когда я пришел сюда. Если есть кто-то, кто знает Хэна и может привлечь его внимание от моего имени, это было бы тоже здорово.
Ари

4
Общая сортировка не имеет нижней границы . Скорее наоборот - сортировка ограничена сравнениями, имеющими эту границу. Здесь проблема не в ограничении входных данных, а в расширении вычислительной модели. Моя вычислительная модель является любой из разновидностей оперативной памяти, и я допускаю любые разумные предположения (например, наличие констант, которые зависят от длины слова). Ω(nlogn)
Ари

Ответы:


18

Мне просто интересно то же самое.

К счастью, мне удалось найти журнальную статью, опубликованную в 2011 году, которая объясняет именно это; более того, вам не нужна подписка для ее просмотра: анализ реализации и эффективности экспоненциальной сортировки деревьев

Я рекомендую прочитать всю статью, чтобы узнать, как ее можно реализовать, и лучше понять ее основную теорию. Также показано, как экспоненциальные деревья складываются с быстрыми сортировками и двоичными деревьями. Вот соответствующий отрывок связан с Ханя время, линейное пространство, число алгоритма сортировкиO(nloglogn) :

Ицзи Хан дал идею, которая уменьшает сложность до ожидаемого времени в линейном пространстве. [6] Используемая им техника - это согласованная передача целых чисел по дереву экспоненциального поиска Андерссона [8] и линейное временное деление битов целых чисел. Вместо того, чтобы вставлять целое число по одному в дерево экспоненциального поиска, он передавал все целые числа по одному уровню дерева экспоненциального поиска за раз. Такое скоординированное прохождение дает возможность выполнить многократное деление за линейное время и, следовательно, ускорить алгоритм. Эта идея может обеспечить ускорение, но при практической реализации очень сложно обрабатывать целые числа партиями.

[6] Й. Хан, Детерминированная сортировка в O (n log log n) времени и линейном пространстве, 34-й STOC, 2002.

[8] А. Андерссон, Быстрая детерминистическая сортировка и поиск в линейном пространстве, Симпозиум IEEE по основам информатики, 1996.


Почему отрицательный голос?
Суреш Венкат

1
Я только что добавил ссылку на эту журнальную статью на страницу Википедии об экспоненциальном дереве . К вашему сведению: эта статья могла быть опубликована после того, как был задан вопрос.
AT

@AT, не могли бы вы немного расширить свой ответ и объяснить, как он отвечает на вопрос. Прямо сейчас единственное, что он дает, - это ссылка на статью в каком-то журнале.
Kaveh

1
Ну, я уже сдался на бумаге Хана, поэтому я рад, что вы смогли оказать эту помощь. Я действительно не ожидал увидеть что-нибудь, когда я вернулся сюда сегодня. Благодарность! Я прочитаю эту новую статью и посмотрю, поможет ли она мне продвинуться в работе Хана.
Ари

2
Ну, я сейчас прочитал это, и я позволю, что, возможно, я полностью неправильно понял, но, за исключением этого, кажется, небольшая проблема. Авторы утверждают, что их дерево имеет высоту O , но если дерево имеет высоту h , то оно имеет ( h + 1 ) ! листья, и, следовательно, менее 2 ( ч + 1 ) ! всего узлов. Давайте щедро предположим, что каждый узел содержит h + 2 ключа. Тогда дерево содержит менее 2 ( h + 2 )(loglogn)h(h+1)!2(h+1)!h+2ключи. Если 2 ( h + 2 ) ! = n, то h = Ω ( log n / log log n ) . В любом случае, даже если авторы правы, они не достигают O ( log log n ) сортировки и не объясняют Хана, поэтому это бесполезно. 2(h+2)!2(h+2)!=nh=Ω(logn/loglogn)(loglogn)
Ари

1

Я не уверен насчет ответа (не прошел через документ), но я думаю, что это должно помочь. Числа упакованы в одно слово, поэтому операции над одним словом занимают O (1) времени. Если существует, скажем, k чисел из h битов, то размер слова зависит от k, h, который, в свою очередь, также зависит от диапазона чисел. Таким образом, мы используем методы сокращения диапазона, которые могут уменьшить диапазон чисел, так что многие числа могут поместиться в одном слове. Затем, создавая правильные битовые маски, мы можем найти отдельные большие целые числа из более коротких, считая два слова одновременно. Это можно сделать за O (1) раз. (Подсказка: для этого у каждого числа, хранящегося в слове, есть связанный с ним бит флага, а затем мы вычитаем два слова ... если бит флага идет, то это число меньше).

Аналогично, используя вышеизложенное, мы также можем отсортировать любое слово, содержащее k чисел за O (log k) времени (битовая сортировка)

Изменить: Алгоритм сортировки 2k чисел в диапазоне от 0 до m-1, упакованных в слово, где каждое число принимает размер L of = log (m + k) +2.

будет 1: 000000 1: 000000 1: 000000 1: 000000 ....... так, где бит перед двоеточием также называется битом флага, и каждая последовательность имеет длину L бит и повторяется 2k раз в слове K_1 . (Двоеточие только для понимания)K1

(2k-1) (2k-2) .... 1 записано в двоичном виде. Эскиз алгоритма:K2

Повторите для t = log k до 0.

Часть 1 - разделить оригинальное слово Z на два слова A и B.

  1. Пусть T будет получено смещением (позиции L-1-t) влево и И результатом с K 1 . Пусть M = T- (T смещено на L-1 мест).K2K1

  2. 2tL

  3. В = Z- (Z & М).

Часть 2

  1. K1K1

  2. М = М- (М сдвинуто влево на L-1 мест).

  3. MIN = (B & M) ИЛИ (A- (A & M))

  4. MAX = (A & M) ИЛИ (B- (B & M))

  5. 2tL

  6. Наконец, соответственно ORing MAX и MIN мы возвращаемся Z.

Я дал эскиз, надеюсь, вы можете заполнить необходимые детали.


Я не понимаю, что вы предлагаете. Предполагается, что целые числа уже малы, и k из них уже упакованы в одно слово. Вы предлагаете еще больше уменьшить их размер? Если так, что ты тогда делаешь? Кроме того, я знаю, как сортировать битовую последовательность, упакованную в одно слово за O (log k), или сортировать общую (небитонную) последовательность за O (log ^ 2 k). Если вам известен алгоритм, который сортирует общую последовательность по времени O (log k), не могли бы вы описать его более подробно? (Такой алгоритм, конечно, решит проблему выбора.)
Ари

я больше не уменьшаю размер, я предлагал уменьшить размер, который не требовался в вашем ответе. Извините за путаницу.
Singhsumit

Если я не понял это, это похоже на алгоритм сортировки битовых последовательностей. Это не сортирует общие последовательности. Например, сортирует ли последовательность 3,0,2,0, где 3 находится в крайнем левом (самом значимом) поле?
Ари

3 0 2 0 отделяется n, мы получаем A = 3 2 и B = 0 0, затем MAX становится 3 2, а MIN равен 0 0. Тогда мы получаем новый Z как 3 2 0 0. Любая общая последовательность имеет битонную последовательность размера 2. с каждой итерацией эти размеры удваиваются, и, наконец, в log k раз мы получаем наш ответ.
singhsumit

Нет. Числа не сжимаются, а смещаются вниз. В первой итерации мы разбиваем пары чисел, различающихся старшим битом их положения, поэтому получаем A = 0 3 0 2 и B = 0 0 0 0, поэтому MIN = 0 0 0 0, MAX = 0 3 0 2 и Z = 3 0 2 0. Во второй итерации мы разбиваем пары, различающиеся младшим битом их положения, поэтому снова получаем A = 0 3 0 2, B = 0 0 0 0, и снова Z остается неизменным.
Ари
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.