Каков наилучший способ сортировки частично упорядоченного списка? - PullRequest
7 голосов
/ 26 января 2009

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

A < B < C
A < P < Q 

Правильный вывод будет

ABCPQ or APQBC or APBCQ ... etc.

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

Меня больше всего интересует решение, которое проще всего реализовать, но интересны также O (n) по скорости и времени.

Ответы [ 3 ]

9 голосов
/ 26 января 2009

Это называется топологическая сортировка .

Стандартный алгоритм - вывести минимальный элемент, затем удалить его и повторять до готовности.

1 голос
/ 26 января 2009

Вы можете повторно вызывать make_heap, pop_heap в C ++ с имеющейся последовательностью.

1 голос
/ 26 января 2009

сделать несколько сортов. Сначала сортируйте по первому правилу, затем по второму и так далее. Должно работать, если ваши правила не содержат противоречий. конечно, достаточно легко реализовать.

...