Радикс-куча
Эта статья включает список общих ссылок , но в ней отсутствуют достаточные соответствующие встроенные цитаты . ( сентябрь 2017 г. ) |
Эта статья в значительной степени или полностью опирается на один источник . ( май 2024 г. ) |
Поразрядная куча — это структура данных для реализации операций монотонной очереди с приоритетами . Затем можно управлять набором элементов, которым назначен ключ. Время выполнения операций зависит от разницы между наибольшим и наименьшим ключом или константой. Структура данных состоит в основном из серии сегментов, размер которых увеличивается в геометрической прогрессии .
Предварительные условия
[ редактировать ]- все ключи — натуральные числа ;
- макс. ключ - мин. ключ C для постоянной C;
- операция извлечения-мин является монотонной; то есть значения, возвращаемые последовательными extract-min, вызовами монотонно увеличиваются .
Описание структуры данных
[ редактировать ]Три наиболее важных поля :
- размера , с наименьшим индексом 0, сохраняет сегменты;
- размера , с наименьшим индексом 0, сохраняет (нижние) границы сегментов;
- , выполняется для каждого элемента в куче ведро, в котором оно хранится.
На диаграмме выше показана структура данных. Применяются следующие инварианты:
- вводить : ключи в вверх или вниз через значение в или ограничено.
- и для : размеры ведер увеличиваются в геометрической прогрессии.
Важно отметить экспоненциальный рост пределов (и, следовательно, диапазона, который удерживает ведро). Таким образом, логарифмическая зависимость величин поля имеет значение C, максимальную разницу между двумя ключевыми значениями.
Операции
[ редактировать ]Во время инициализации генерируются пустые сегменты и нижние границы генерируются (согласно инварианту 2); время работы .
Во время вставки новый элемент линейно перемещается справа налево через сегменты и новый элемент с хранится в левом ведре для этого ; время работы .
Для уменьшения-key сначала уменьшается значение ключа (проверка на соответствие инвариантам). Затем Поле используется для поиска элемента и при необходимости повторяется влево аналогично операции вставки . Время работы (амортизировано).
Операция extract-min удаляет элемент из корзины. и возвращает его. Если ведро еще не пуст, операция прекращается. Однако если он пуст, ищется следующий больший непустой блок, его наименьший элемент. отслеживается и устанавливается равным k (для этого требуется монотонность). Затем согласно инвариантам переопределяются границы сегмента и удаляются элементы. к вновь образовавшимся ковшам; время работы (амортизировано).
Если отображается, поле обновляется.
Ссылки
[ редактировать ]- Б. В. Черкасский, А. В. Гольдберг, К. Сильверстайн: сегменты, кучи, списки и монотонные очереди с приоритетами ( Аннотация ), в: Материалы восьмого ежегодного симпозиума ACM-SIAM по дискретным алгоритмам. Январь 1997 г., стр. 83-92.