Я пытаюсь понять этот документ: Стабильное минимальное разделение пространства за линейное время.
Кажется, что критическая часть утверждения состоит в том, что
Алгоритм B стабильно сортирует массив битов размером n за время O(nlog2n) и постоянное дополнительное пространство, но делает только O(n) ходов.
Однако в документе не описывается алгоритм, а только ссылка на другой документ, к которому у меня нет доступа. Я могу найти несколько способов выполнить сортировку в пределах временных границ, но мне трудно найти тот, который гарантирует O(N) ходов, не требуя при этом больше, чем постоянное пространство.
Что это за алгоритм Б? Другими словами, учитывая
boolean Predicate(Item* a); //returns result of testing *a for some condition
существует ли функция B(Item* a, size_t N);
, которая стабильно сортирует a с использованием Predicate в качестве ключа сортировки с менее чем nlog2n вызовами Predicate и выполняет только O (N) пишет a?