какой алгоритм может создать стабильный двоичный раздел на месте с перемещениями всего за O (N)?

Я пытаюсь понять эту статью: Стабильное разделение на минимальное пространство за линейное время.

Кажется, что критически важной частью утверждения является то, что

Алгоритм B стабильно сортирует битовый массив размера n в O (nlog 2 n) время и постоянное дополнительное пространство, но делает только O (n) ходов.

Однако в документе не описывается алгоритм, но ссылается только на другую статью, к которой у меня нет доступа. Я могу найти несколько способов выполнить сортировку в отведенное время, но мне трудно найти способ, который гарантирует O (N) ходов, не требуя при этом большего, чем постоянное пространство.

Что это за алгоритм B? Другими словами, учитывая

boolean Predicate(Item* a);  //returns result of testing *a for some condition

, существует ли функция B (Item * a, size_t N); , которая стабильно сортирует a , используя Predicate в качестве ключа сортировки с менее чем nlog 2 n обращениями к Predicate, и выполняет только O (N) записи в a ?

18
задан skaffman 28 March 2011 в 22:13
поделиться