Каковы приложения реального мира кучи Фибоначчи и кучи двоичных данных? Было бы здорово, если бы вы могли поделиться каким-то экземпляром, когда вы использовали его для решения проблемы.
Изменить: Добавлены двоичные кучи. Любопытно знать.
Каковы приложения реального мира кучи Фибоначчи и кучи двоичных данных? Было бы здорово, если бы вы могли поделиться каким-то экземпляром, когда вы использовали его для решения проблемы.
Изменить: Добавлены двоичные кучи. Любопытно знать.
Вы редко использовали бы это в реальной жизни. Я считаю, что цель кучи Фибоначчи заключалась в том, чтобы улучшить асимптотическое время работы алгоритма Дейкстры. Это может дать вам улучшения для очень и очень больших входов, но большую часть времени вам нужна простая двоичная куча.
Из Wiki:
Хотя общее время работы последовательность операций, начиная с пустая структура ограничена приведенные выше, некоторые (очень немногие) операции в последовательности могут очень долго заканчивается (в частности удалить и удалить минимум имеют линейные время работы в худшем случае). Для по этой причине кучи Фибоначчи и другие амортизированные структуры данных могут не быть подходит для систем реального времени.
Двоичная куча - это структура данных, которая может использоваться для быстрого нахождения максимального (или минимального) значения в наборе значений. Он используется в алгоритме Дейкстры (кратчайший путь), алгоритме Прима (минимальное остовное дерево) и кодировании Хаффмана (сжатие данных).
Нельзя сказать о кучах фибоначчи, но двоичные кучи используются в очередях приоритетов. Приоритетные очереди широко используются в реальных системах. Одним из известных примеров является планирование процесса в ядре. Сначала выполняется приоритетный процесс. Я использовал очереди приоритетов при разбиении наборов. Набор, который имеет максимальные члены, должен был быть сделан первым для разбиения.
Приоритетные очереди обычно выполняются как кучи, например: http://download.oracle.com/javase/6/docs/api/java/util/PriorityQueue.html
Вычисление верхних N элементов из огромного набора данных может быть эффективно осуществлено с использованием двоичных куч (например, верхние поисковые запросы на крупномасштабном веб-сайте).
В большинстве сценариев вы должны выбрать на основе сложности:
И обычные подозреваемые:
log(n)
вставить и найтиO(1)
вставить и O(n)
найтиO(1)
вставить
O(1)
найти только для первого элемента, O(n)
в целом
Существует также очередь Brodal и другие кучи, которые достигают наихудшего случая O(1)
, но требуют еще большие очереди, чем Фибоначчи, чтобы быть достойными.
Итак, если вашему алгоритму нужно только "найти" первый элемент и сделать много вложений, кучи - хороший выбор.
Как упоминалось, это относится и к Дейкстре.