Когда я буду использовать очередь приоритетов?
Единственный пример использования очереди приоритетов, о которой я знаю, - это алгоритм Дейкстры (для расчета минимальной стоимости)
В каких других ситуациях это было бы полезно?
Ответы
Ответ 1
Вот практический пример - для бизнес-приложения:
У вас работает больница, и пациенты приходят. Там есть только один врач. Первый мужчина идет - и он немедленно служил. Затем приходит человек с холодом и нуждается в помощи. Вы добавляете его в очередь, и он ждет в очереди, чтобы доктор стал доступен. Затем в дверь входит человек с топором в голове. Ему назначается более высокий приоритет, поскольку он имеет более высокую медицинскую ответственность. Таким образом, человек с холодом сталкивается в очереди. Затем у кого-то возникают проблемы с дыханием. Итак, еще раз, человек с холодом навалился в приоритетном порядке. Это называется triaging в реальном мире, но в этом случае это медицинская линия.
Реализация этого в коде будет использовать очередь приоритетов и рабочий поток (врач) для выполнения работы над расходными/единицами работы (пациенты)
Ответ 2
Сканирование с помощью большого набора статистических данных, чтобы сообщить о верхних N элементах - N самых загруженных сетевых подключений, N наиболее ценных клиентов, N наибольших пользователей диска...
Ответ 3
Очередь приоритетов, основанная на куче, частично сортирует входную последовательность. У этого есть преимущества перед тем, как сортировать его, когда вам не нужна целая последовательность, поскольку mcdowella привела несколько примеров. В частности, если вам нужно только m из n элементов, у вас есть сложность O (m log n). Второе преимущество заключается в том, что вы динамически добавляете элементы, т.е. Когда вы не знаете всю последовательность заранее. С кучей в качестве резервного хранилища добавление другого элемента происходит быстрее, чем вставка его в отсортированную последовательность.
Кроме того, когда вы выбиваете отдельные элементы в отсортированном порядке и затем отбрасываете их (т.е. впоследствии вам не нужна отсортированная последовательность), использование очереди приоритетов дает читателю правильное сообщение. Это также упрощает замену различных реализаций, например. один на основе кучи или один, который сортирует входную последовательность заранее. Это вопрос вкуса, но вы всегда можете достичь того же, используя любую последовательность, которую вы затем используете соответствующим образом, но это только делает код более трудным для чтения.
Ответ 4
Вот список:
Моделирование, управляемое событиями:
клиенты в линии, сталкивающиеся частицы
Численное вычисление.
уменьшение ошибки округления
Сжатие данных.
Коды Хаффмана, которые сжимают данные.
Поиск по графику:
Алгоритм Дейкстры, алгоритм Прима
Теория чисел:
сумма полномочий
Искусственный интеллект:
Поиск
Статистика:
поддерживать наибольшие значения M в последовательности
Операционные системы:
балансировка нагрузки, обработка прерываний
Дискретная оптимизация.
упаковка бункера, планирование
Фильтрация спама.
Байесовский спам-фильтр
Ответ 5
Существует много приложений очереди приоритетов (Min/max heap). Но если вы ищете классические и известные алгоритмы, алгоритм Prim для, используйте очередь приоритетов.