Радикальная куча

Радикальная куча — это структура данных для реализации операций монотонной очереди с приоритетом . Затем можно управлять набором элементов, которым назначен ключ. Время выполнения операций зависит от разницы между наибольшим и наименьшим ключом или константой. Структура данных в основном состоит из ряда блоков, размер которых увеличивается экспоненциально .

Предпосылки

  1. все ключи — натуральные числа ;
  2. макс. ключ - мин. ключ C для постоянной C; {\displaystyle \leq}
  3. Операция extract-min является монотонной; то есть значения, возвращаемые последовательными вызовами extract-min, монотонно увеличиваются .

Описание структуры данных

Три наиболее важных поля :

  1. б {\displaystyle б} размера , с 0 в качестве наименьшего индекса, хранит контейнеры; Б := л о г ( С + 1 ) + 1 {\displaystyle B:=\lfloor log(C+1)\rfloor +1}
  2. ты {\displaystyle u} размера , с 0 в качестве наименьшего индекса, хранит (нижние) границы контейнеров; Б + 1 {\displaystyle B+1}
  3. б Н ты м {\displaystyle bNum} , для каждого элемента в куче хранится контейнер, в котором он хранится. х {\displaystyle x}

На диаграмме выше показана структура данных. Применяются следующие инварианты:

  1. ты [ я ] {\displaystyle u[i]\leq } ввод : ввод осуществляется вверх или вниз по значению или ограничен. б [ я ] < ты [ я + 1 ] {\displaystyle b[i]<u[i+1]} б [ я ] {\displaystyle b[i]} ты [ я + 1 ] {\displaystyle u[i+1]} ты [ я ] {\displaystyle u[я]}
  2. ты [ 0 ] = 0 , ты [ 1 ] = ты [ 0 ] + 1 , ты [ Б ] = {\displaystyle u[0]=0,u[1]=u[0]+1,u[B]=\infty } и для : размеры ведер увеличиваются экспоненциально. 0 ты [ я + 1 ] ты [ я ] 2 я 1 {\displaystyle 0\leq u[i+1]-u[i]\leq 2^{i-1}} я = 1 , , Б 1 {\displaystyle i=1,\ldots ,B-1}

Важно отметить экспоненциальный рост пределов (и, следовательно, диапазона, который удерживает ведро). Таким образом, логарифмическая зависимость величин поля имеет значение C, максимальную разницу между двумя ключевыми значениями.

Операции

Во время инициализации генерируются пустые контейнеры и генерируются нижние границы (согласно инварианту 2); время выполнения . ты {\displaystyle u} О ( Б ) {\displaystyle O(B)}

Во время вставки новый элемент линейно перемещается справа налево по контейнерам, и новый элемент сохраняется в левом контейнере до тех пор , пока не наступит время выполнения . х {\displaystyle x} к ( х ) {\displaystyle к(х)} ты [ я ] к ( х ) {\displaystyle u[i]\geq k(x)} О ( Б ) {\displaystyle O(B)}

Для reduce-key сначала уменьшается значение ключа (проверка соответствия инвариантам). Затем поле используется для поиска элемента и оно итерируется влево, если необходимо, аналогично операции вставки . Время выполнения (амортизируется). б Н ты м {\displaystyle bNum} О ( 1 ) {\displaystyle O(1)}

Операция extract-min удаляет элемент из bucket и возвращает его. Если bucket еще не пуст, операция завершается. Однако если он пуст, ищется следующий больший непустой bucket, отслеживается его наименьший элемент и устанавливается равным k (для этого требуется монотонность). Затем, согласно инвариантам, границы bucket переопределяются, а элементы удаляются в новые сформированные bucket; время выполнения (амортизируется). б [ 0 ] {\displaystyle б[0]} б [ 0 ] {\displaystyle б[0]} к {\displaystyle к} ты [ 0 ] {\displaystyle u[0]} б [ я ] {\displaystyle b[i]} О ( 1 ) {\displaystyle O(1)}

Если отображается, поле обновляется. б Н ты м {\displaystyle bNum}

Ссылки

  • Б. В. Черкасский, А. В. Голдберг, К. Сильверстайн: Ведра, кучи, списки и монотонные очереди с приоритетами (Аннотация), в: Труды восьмого ежегодного симпозиума ACM-SIAM по дискретным алгоритмам. Январь 1997 г., стр. 83-92.
Взято с "https://en.wikipedia.org/w/index.php?title=Radix_heap&oldid=1223688907"