Быстрые реализации приоритетной очереди

Oct 20, 2013 10:26

Интересно, какие есть быстрые на практике реализации приоритетной очереди, кроме классической двоичной кучи ( Read more... )

Leave a comment

Comments 12

familom October 20 2013, 17:49:22 UTC
Слышал, что pairing heaps на практике хорошо работают.

Reply

major_m October 20 2013, 19:09:29 UTC
+1 Хотел тоже самое написать. Они в статьях выше упоминаются.

Reply

antilamer October 20 2013, 21:42:36 UTC
Да, но не очень понятно, как сделать, чтобы они не жрали O(N) дополнительной памяти...

Reply

major_m October 21 2013, 07:31:52 UTC
А что если к этому еще и Dynamic Succinct Tree добавить?
http://arxiv.org/pdf/0905.0768v5.pdf

Я, правда, понятия не имею, как они себя на практике ведут, но все же...

Reply


sassa_nf October 20 2013, 19:00:53 UTC
конечно, быстрее всего будут очереди, где сортировка выполняется не сразу.

Например, если у нас в среднем поровну выполняется insert и delete_min, то выгодно хранить сортированными только n элементов, а остальные расставить по вёдрам частично отсортированными. Тогда хотя и логарифмическое время, но логарифм будет от числа n - среднее количество элементов в последнем ведре - меньше N - полное содержимое очереди.

Все эти binary heaps и друзья всегда сортируют все элементы.

Reply

thedeemon October 21 2013, 06:08:06 UTC
Они ж не сортируют, лишь "слегка" упорядочивают.

Reply

sassa_nf October 21 2013, 07:13:32 UTC
хм, но ведь на вставку каждого уходит log(N) сравнений, и на удаление тоже.

Reply

thedeemon October 21 2013, 08:33:16 UTC
Что весьма неплохо для массива, который в случае поддержания отсортированности требовал бы O(N).

Reply


Leave a comment

Up