структура данных очереди приоритета - PullRequest
3 голосов
/ 20 ноября 2010

Предположим, у меня есть очередь с приоритетами, которая удаляет элементы в порядке возрастания, и в этой очереди хранятся элементы 1, 1, 3, 0, 1.Возрастающий порядок равен 0, затем 1, затем 3, но есть три элемента 1 с.

Когда я звоню remove, он сначала удалит 0, но если я позвоню remove снова, он удалит все три 1 одновременно или мне нужно будет позвонить remove три раза, чтобы удалить все элементы 1.

При вызове remove в такой очереди приоритетов удаляются все элементы с одинаковым минимальным значением или будет удаляться только один элемент с каждымзвоните

Ответы [ 2 ]

3 голосов
/ 20 ноября 2010

В очереди с приоритетами обычно операция удаления удаляет одну запись, содержащую максимальное значение.Так что в вашем случае это будет второй вариант.Порядок удаления не гарантируется.Любой ключ с «максимальным» значением будет удален.Кроме того, несортированный массив является плохой структурой данных для реализации очереди с приоритетами.Обычно вы используете структуру данных кучи для получения O (log (n)) гарантий на вставку и удаление.

0 голосов
/ 20 ноября 2010

типичная реализация кучи всегда переписывает дерево, поэтому удаляет 0, 1, 1, 1, а затем 3, так как 1 получит толчок к корню во время повторного хипификации.

я не прав?

редактировать: ваш случай - куча минут

...