на стр 6, лекции 3, Очевидно "Ck <= модуль(Gk(е))*b(k+1)" (1) - , подскажите что значит "модуль" и почему это очевидно... |
Тонкие кучи
Представление тонкой кучи в памяти компьютера.
Тонкие кучи формируют из узлов, представленных записями следующего вида:






Таким образом, узлы-братья связаны в двусвязный список при помощи
указателей и
. У самого левого
брата в этом списке
указатель
указывает на общего родителя всех узлов в
списке. У самого правого брата из списка указатель
заземлен.
Корни деревьев в тонкой куче связаны в односвязный циклический список. Этот
список будем называть корневым списком. Корневой список реализуется при
помощи поля
. Поле
у каждого
узла корневого списка заземлено.
В случае необходимости в описании узла может присутствовать и другая прикладная информация. На рис. 8.2 приведен пример тонкой кучи.
Представление кучи со ссылками, в узлах указаны ранги
Заметим, что принадлежность заданного узла корневому списку кучи
осуществляется проверкой указателя на
заземленность.
Введем еще одну запись , которая будет
соответствовать отдельной куче и иметь вид



Очевидно, что узел с минимальным ключом обязательно находится в корневом списке.
Реализация основных операций и оценки трудоемкости
Сосредоточим внимание на амортизационных оценках трудоемкости. Будем
получать их методом потенциалов. Потенциалом тонкой кучи будем считать
величину , где
—
количество деревьев в куче, а
— число помеченных вершин. Заметим, что
потенциал кучи неотрицателен и в начальный момент равен
.
Операция MakeHeap. Эта операция
создает указатель на новую пустую кучу. Очевидно, фактическая стоимость
операции есть , а потенциал созданной кучи равен
.
Операция FindMin (H).
Указатель на узел с минимальным ключом
в куче определяется с помощью указателя
.
Если куча пуста, то результирующий указатель нулевой. Амортизационная оценка совпадает
с фактической и равна
, потенциал не изменяется.
Операция Insert(i,H).
С помощью этой операции осуществляется вставка в кучу нового элемента с
ключом
.
При ее реализации создается новое тонкое дерево ранга
, которое
вставляется в корневой список кучи
, разрывая его в произвольном
месте. При необходимости перевычисляется ссылка на минимальный элемент.
Операция увеличивает потенциал на , так как добавляется одно
дерево в корневой список кучи, но это не влияет на амортизационную оценку, которая
равна фактической
.
Операция Meld(H1, H2).
Результатом этой операции является указатель на кучу, полученную слиянием двух куч
и
. Она осуществляется соединением корневых списков сливаемых куч. При таком
способе выполнения операции, как и при реализации вставки элемента в кучу,
можем получить в корневом списке результирующей кучи несколько деревьев
одинакового ранга. При удобном случае, а именно при удалении минимального
элемента, мы освободим корневой список от этой неоднозначности. Оценка
совпадает с оценками для всех предыдущих операций. Суммарный потенциал не
изменяется.