Изменения

Перейти к: навигация, поиск

Толстая куча на избыточном счётчике

Нет изменений в размере, 22:18, 7 июня 2015
Операция фиксации rmFixRootCount(i)
===Операция фиксации <tex>rmFixRootCount(i)</tex>===
Операция фиксации <tex>i</tex>-го разряда корневого счетчика подразумевает, что его значение равно трем, а списочная часть содержит указатель на список деревьев ранга <tex>i</tex>, состоящий ровно из трех деревьев. При выполнении этой операции значение в <tex>i</tex>-м разряде — должно стать равным нулю, а значение в <tex>i</tex>-м разряде увеличиться на единицу. То есть в куче не должно остаться деревьев ранга <tex>i</tex>, а количество деревьев ранга <tex>i+1</tex> должно увеличиться на единицу. Для этого следует удалить из кучи три присутствующих в ней дерева ранга <tex>i</tex> , связать их в дерево ранга <tex>i+1</tex> и вставить вновь полученное дерево в кучу.
Следует учесть, что ранг нового дерева может стать больше, чем <tex>MaxRankmaxRank</tex>, что потребует инициализации нового разряда. Для этого необходимо увеличить значение <tex>MaxRankmaxRank</tex> на единицу и заполнить новое поле, а также провести инициализацию нового разряда.
<code>
rmFixRootCount(i)
'''if''' MaxRank maxRank == i: MaxRank maxRank = i + 1 RootCountrootCount[i + 1].Value = 0 CountViolationcountViolation[i + 1].Value = 0
'''else''':
UpdateForwardPointerupdateForwardPointer(i + 1) RootCountrootCount[i].Value = 0 p1 = RootCountrootCount[i].ListPointerlistPointer p2 = p1.Rightright p3 = p2.Rightright p = Fasteningfastening(p1, p2, p3) RootCountrootCount[i].ListPointer listPointer = NULL InsertTreeinsertTree(i + 1, p) RootCountrootCount[i + 1].Value = RootCountrootCount[i + 1].Value + 1
</code>
Анонимный участник

Навигация