Bucket queue

редактировать

При разработке и анализе структур данных, bucket queue (также называемая очередь приоритетов корзины или очередь приоритетов с ограниченной высотой ) - это очередь приоритетов для приоритезации элементов, приоритеты которых являются небольшими целыми числами. Он имеет форму массива сегментов: структура данных массива, индексированная по приоритетам, ячейки которой содержат сегменты элементов с одинаковым приоритетом.

Очередь корзин является аналогом очереди с приоритетом сортировки по ячейкам (также называемой сортировкой по сегментам), алгоритма сортировки, который помещает элементы в сегменты, индексированные по их приоритетам, а затем объединяет сегменты. Использование очереди ведра в качестве очереди с приоритетом в сортировке выбора дает форму алгоритма сортировки по ячейкам.

Применения очереди ведра включают вычисление вырожденности графа, а также быстрые алгоритмы для кратчайших путей и самых широких пути для графиков с небольшими целыми числами или весами, которые уже отсортированы. Его первое использование было в алгоритме кратчайшего пути Dial (1969).

Содержание
  • 1 Базовая структура данных
  • 2 Оптимизация
  • 3 Приложения
  • 4 Ссылки
Базовая структура данных

Эта структура может обрабатывать вставки и удаления элементов с целочисленными приоритетами в диапазоне от 0 до некоторой известной границы C, а также операции, которые находят элемент с минимальным (или максимальным) приоритетом. Он состоит из массива A контейнерных структур данных, где в ячейке массива A [p] хранится коллекция элементов с приоритетом p. Он может обрабатывать следующие операции:

  • Чтобы вставить элемент x с приоритетом p, добавьте x в контейнер в точке A [p].
  • Чтобы удалить элемент x с приоритетом p, удалите x из контейнера at A [p]
  • Чтобы найти элемент с минимальным приоритетом, выполните последовательный поиск, чтобы найти первый непустой контейнер, а затем выберите произвольный элемент из этого контейнера.

Таким образом, вставки и удаления занимают постоянное время, в то время как поиск элемента с минимальным приоритетом занимает время O (C).

Оптимизация

В качестве оптимизации структура данных также может поддерживать индекс L, который ограничивает минимальный приоритет элемента. При вставке нового элемента L должен быть обновлен до минимума из своего старого значения и приоритета нового элемента. При поиске элемента с минимальным приоритетом поиск может начинаться с L вместо нуля, и после поиска L следует оставить равным приоритету, который был найден при поиске. Таким образом, время поиска сокращается до разницы между предыдущей нижней границей и ее следующим значением; эта разница может быть значительно меньше, чем C. Для приложений с очередями с монотонным приоритетом, такими как алгоритм Дейкстры, в котором минимальные приоритеты образуют монотонную последовательность, сумма эти различия не превышают C, поэтому общее время для последовательности из n операций составляет O (n + C), а не более медленное ограничение по времени O (nC), которое было бы без этой оптимизации.

Другая оптимизация (уже заданная Dial 1969) может использоваться для экономии места, когда приоритеты монотонны и в любой момент времени попадают в диапазон значений r, а не расширяются во всем диапазоне от 0 до C. В этом случае можно индексировать массив по приоритетам по модулю r, а не по их фактическим значениям. Поиск элемента с минимальным приоритетом всегда должен начинаться с предыдущего минимума, чтобы избежать приоритетов, которые выше минимального, но имеют более низкие модули.

Приложения

Для поддержки вершин неориентированного графа , с приоритетом их степеней, и многократно находят и удаляют вершину минимальной степени. Этот жадный алгоритм можно использовать для вычисления вырожденности данного графа. Требуется линейное время с оптимизацией или без нее, которая поддерживает нижнюю границу минимального приоритета, потому что каждая вершина находится во времени, пропорциональном ее степени, а сумма всех степеней вершин линейна по количеству ребер графа.

В алгоритме Дейкстры для кратчайших путей в положительно-взвешенных ориентированных графах можно использовать очередь ведра для получения временная граница O (n + m + dc), где n - количество вершин, m - количество ребер, d - диаметр сети, а c - максимальная (целочисленная) стоимость ссылки. Этот вариант алгоритма Дейкстры также известен как алгоритм Диала в честь Роберта Б. Диала, который опубликовал его в 1969 году. В этом алгоритме приоритеты будут охватывать только диапазон ширины c + 1, поэтому модульный можно использовать оптимизацию, чтобы уменьшить пространство до O (n + c). Вариант того же алгоритма может использоваться для задачи с самым широким путем, и (в сочетании с методами быстрого разделения нецелочисленных весов ребер) приводит к решениям с одним источником единственного -пункт назначения этой проблемы.

Ссылки
Последняя правка сделана 2021-05-13 03:45:10
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте