Почему приоритетные очереди главным образом используют 0 в качестве самого важного приоритета?

Kephas не предоставляет сам контейнер DI / IoC, он обеспечивает только уровень абстракции над контейнерами DI / IoC, так что он может использовать саму композицию без привязки к конкретной реализации. Он предоставляет адаптер для этого уровня абстракции для System.Composition в пакете Kephas.Composition.Mef ( https://www.nuget.org/packages/Kephas.Composition.Mef/ ). Мы запланировали также адаптер для Autofac, но у нас не было времени, чтобы реализовать его до конца.

Обратите внимание, что этот уровень абстракции имеет некоторые особенности, уникальные для Kephas:

  • Зарегистрированные реализации сервисов могут быть переопределены для использования многоуровневых архитектур приложений.
  • Сервисные контракты / интерфейсы управляют регистрацией посредством атрибутов [*AppServiceContract].

Также обратите внимание, что поддержка метаданных является обязательной функцией для интегрированных сред, с которыми интегрируется Kephas, что в некоторых случаях может налагать ограничения. Для получения дополнительной информации вы можете прочитать здесь: https://github.com/kephas-software/kephas/wiki/Composition-and-Dependency-Injection .

6
задан Pete Kirkham 14 April 2009 в 16:25
поделиться

6 ответов

Большинство приоритетных очередей реализованы в виде кучи Фибоначчи или чего-то подобного. Эта структура данных поддерживает извлечение минимума в постоянное время, что делает естественным присвоение нулю наивысшего приоритета и удаление элементов из очереди путем извлечения минимума.

13
ответ дан 8 December 2019 в 03:54
поделиться

Если оно когда-либо увеличивается, как вы можете установить что-либо на самый высокий приоритет? (+1 к ответу Россфаба:)

6
ответ дан 8 December 2019 в 03:54
поделиться

В качестве контрпримера, в том, что, безусловно, является одной из наиболее доступных (если не используется) реализаций очереди приоритетов, а именно STL std :: priority_queue , элемент top () является численно самым высоким согласно оператору <. Конечно, все привыкли к условию наименьшего порядка сортировки, стоящего перед очередью, поэтому это привлекает внимание многих людей при первом его использовании.

2
ответ дан 8 December 2019 в 03:54
поделиться

Не думаю, что для этого есть какая-то конструктивная причина. Вероятно, это просто потому, что большинство программистов привыкли думать о 0 как о первом элементе. Другая причина может быть в том, что перечислители начинаются с 0, поэтому первое определенное целочисленное значение enum будет равно 0.

2
ответ дан 8 December 2019 в 03:54
поделиться

Причина, по которой часто бывает наоборот, заключается в том, что очереди с приоритетами используются для реализации алгоритмов, подобных алгоритму Дейкстры и A *, где приоритет - это расстояние до узла, и вы хотите сначала обработать более близкие узлы. .

4
ответ дан 8 December 2019 в 03:54
поделиться

There is nothing inherent about a priority queue that makes 0 a better choice for top priority. For someone writing a reusable implementation however, you will have to pick something, and 0 is well defined no matter what type of integral or floating point value you use for your priority.

Even in writing a private implementation, if you decide you only need 256 priority levels and use an unsigned char as your priority and have 255 be your top priority, then you will need to carefully look over all your code if you decide that you need more levels.

0
ответ дан 8 December 2019 в 03:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: