на стр 6, лекции 3, Очевидно "Ck <= модуль(Gk(е))*b(k+1)" (1) - , подскажите что значит "модуль" и почему это очевидно... |
Приоритетные очереди
Операции с d-кучей
При реализации основных операций над кучами используются две вспомогательные операции — ВСПЛЫТИЕ и ПОГРУЖЕНИЕ. При реализации этих операций введем еще одну вспомогательную операцию — транспонирование, с помощью которой будем менять местами элементы, расположенные в двух разных узлах дерева. Ее реализация может быть представлена следующим образом:
![\formula{
\t{procedure}\ tr(i, j);\\
\t begin\\
\mbox{}\q {\rm temp}0:= a[i]; a[i]:= a[j];\ a[j]:= {\rm temp}0; \\
\mbox{}\q {\rm temp}1:= {\rm key}[i];\
{\rm key}[i]:= {\rm key}[j];\ {\rm key}[j]:= {\rm temp}1;\\
\t end;
}](/sites/default/files/tex_cache/2222987179768be8fe9c4f307d30e7d5.png)
Замечание. Если в кучу помещаются только ключи элементов, то процедура транспонирования модифицируется соответствующим образом.
Операция ВСПЛЫТИЕ.Эта операция применяется в тех случаях, когда в некотором узле,
например в -м, расположен элемент
,
нарушающий кучеобразный порядок так, что его ключ меньше ключа его
родителя
.
Элементы и
меняются местами. Если после этого
элемент
снова не удовлетворяет условиям кучи, то еще раз проводится аналогичная
перестановка. И так до тех пор, пока
не встанет на свое
место.
Рассмотрим 3-дерево на рис. 4.3. В этом дереве кучеобразный
порядок нарушает
узел с ключом
, так как его родительскому узлу
приписан элемент с ключом
.
Применим к узлу операцию ВСПЛЫТИЕ. Элементы с
ключами
и
меняются
местами. В результате получается дерево, представленное
на рис. 4.4.
Теперь нарушен кучеобразный порядок в узле (
), меняем местами
элементы c ключами
и
. В результате получаем
кучу, изображенную
на рис. 4.5. Кучеобразный порядок восстановлен, операция ВСПЛЫТИЕ завершена.
Вычислительная сложность этой операции пропорциональна числу сравнений
элементов и их обменов. Это число, очевидно, не более чем удвоенное число
узлов в пути от узла до корня дерева. Длина такого пути
в
-куче с
узлами не превосходит ее высоты, а
именно
, в соответствии с доказанным выше утверждением 1.
Значит, время выполнения данной операции —
.
Реализация операции ВСПЛЫТИЕ. Входным параметром этой операции является номер узла, в котором нарушен порядок:
![\formula{
\t{procedure ВСПЛЫТИЕ}(i);\\
\t{begin}\\
p:= (i - 1)\ \t div\ d;\\
\mbox{}\q\t while (i \ne 0)\
\t and\ ({\rm key}[p] > {\rm
key}[i])\ \t do\ \{{\rm tr}(i, p);\ i:=
p;\ p:= (i - 1)\
\t div\ d\};\\
\t end;
}](/sites/default/files/tex_cache/08ef9a2b8a288adda38f7fb4c2ac182c.png)
Замечание.
- Операцию ВСПЛЫТИЕ можно применять не только к
-куче, но и к другим видам куч.
- Для более эффективного выполнения операции ВСПЛЫТИЕ можно поступить
следующим образом: запомнить элемент, находящийся в узле
, переместить элемент из его родительского узла
в узел
, затем из узла
в узел
и так до тех пор, пока не освободится узел для запомненного элемента. После этого поместить запомненный элемент на освободившееся место. Более точно это можно выразить с помощью следующих операторов:
![\formula{
\t begin {\rm key}0:= {\rm key}[i];\
a0:= a[i];\ p:= (i - 1)
\t div\ d; \\
\mbox{}\q \t while\ (i \ne 0)\
\t and\ ({\rm key}[p] > {\rm key}0\
\t do\\
\mbox{}\q\qq \{a[i]:=a[p];\ {\rm key}[i]:= {\rm key}[p];\
i:= p;\ p:= (i - 1)\ \t div\ d\};\\
\mbox{}\q a[i]:= a0;\ {\rm key}[i]:= {\rm key}0\\
\t end;
}](/sites/default/files/tex_cache/2939aab5f93aa8a401e7f35e196b70e1.png)
Операция ПОГРУЖЕНИЕ. Эта операция также применяется для
восстановления свойства кучеобразности. Пусть, например, в -м
узле расположен элемент
, нарушающий кучеобразный порядок таким
образом, что ключ элемента
больше ключа элемента
,
приписанного потомку узла
. В этом случае среди непосредственных потомков
узла
выбирается элемент
с наименьшим ключом,
и элементы
и
меняются местами.
Если после этого элемент
снова не
удовлетворяет условиям кучи, то еще раз проводим аналогичную перестановку.
И так до тех пор, пока
не встанет на свое место.
Рассмотрим -дерево, представленное на рис. 4.6.
В узле
расположен элемент
с
ключом
, и этот узел имеет двух потомков с меньшими ключами,
а именно
и
. Применим к элементу
операцию ПОГРУЖЕНИЕ.