Будут ли куски Фибоначчи или очереди Бродала на практике?

Используются ли кучи Фибоначчи на практике где угодно? Я посмотрел на SO и нашел ответы на связанные вопросы (см. Ниже), но ничего, что на самом деле вполне отвечает на вопрос.

Ответ 1

Насколько я знаю, нет крупных приложений, которые фактически используют кучи Фибоначчи или очереди Бродала.

Кучи Фибоначчи были первоначально спроектированы таким образом, чтобы удовлетворить теоретическую, а не практическую необходимость: ускорить алгоритм кратчайших путей Дейкстры асимптотически. Очередь Brodal (и связанная с ней функциональная структура данных) аналогично спроектирована для удовлетворения теоретических гарантий, в частности, для ответа на давний открытый вопрос о том, можно ли совместить временные рамки кучи Фибоначчи с наихудшими гарантиями, а не с амортизированными гарантиями, В этом смысле структуры данных не были разработаны для удовлетворения практических потребностей, а скорее для продвижения нашего теоретического понимания пределов алгоритмической эффективности. Насколько мне известно, нет настоящих алгоритмов, в которых было бы лучше использовать очередь Brodal над кучей Фибоначчи.

Как отмечали другие ответы, постоянные факторы, спрятанные в куче Фибоначчи или в очереди Бродала, очень высоки. Им нужно много указателей, подключенных к множеству сложных связанных списков и, соответственно, иметь абсолютно ужасную локальность ссылок, особенно по сравнению со стандартной двоичной кучей. Это означает, что они, вероятно, будут хуже выполнять на практике эффекты кеширования, если у вас нет алгоритмов, требующих колоссально большого количества операций с уменьшением ключа. Есть некоторые случаи, когда это происходит (например, связанные ответы говорят о некоторых из них), но относятся к ним как к узкоспециализированным обстоятельствам, а не к обычным случаям. Если вы работаете на огромных графиках, более часто используются другие методы для повышения эффективности, такие как использование алгоритмов аппроксимации для рассматриваемой проблемы, лучшая эвристика или алгоритмы, которые используют конкретные свойства базовых данных.

Надеюсь, это поможет!