Я пытаюсь понять эту статью: Стабильное разделение на минимальное пространство за линейное время.
Кажется, что критически важной частью утверждения является то, что
Алгоритм 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 ?