Ремонт принтеров, сканнеров, факсов и остальной офисной техники


назад Оглавление вперед




[137]

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

Как и динамические таблицы раздела 18.4, фибоначчиевы кучи являются примером структуры данных, разработанной с учётом амортизационного анализа (см. гл. 18, особенно разд. 18.3 о методе потенциала).

Мы предполагаем, что вы прочли предыдущую главу (о биномиальных кучах). Там была приведена таблица (рис. 20.1), где указаны оценки времени работы различных операций с биномиальными и фибоначчиевыми кучами.

Как и биномиальные кучи, фибоначчиевы кучи не обеспечивают эффективного выполнения поиска (Search). Поэтому передавая вершину в качестве параметра, мы указываем не ключ вершины, а указатель на неё.

В разделе 21.1 мы определим фибоначчиевы кучи, обсудим их представление в программе и введём потенциальную функцию. В разделе 21.2 мы покажем, как реализовать операции, присущие сливаемым кучам, с оценками учётной стоимости, указанными в таблице (рис. 20.1). Оставшиеся две операции (Decrease-Key и Delete) описаны в разделе 21.3. Наконец, в разделе 21.4 мы доказываем лемму, использованную при анализе построенных процеДУР-

21.1. Строение фибоначчиевой кучи

При использовании фибоначчиевых куч для хранения набора множеств каждое множество занимает несколько деревьев, корни которых связаны в список. Такой конгломерат мы будем называть фибоначчиевой кучей (Fibonacci heap). Таким образом, каждая фи-боначчиева куча состоит из нескольких деревьев; для каждого хранимого множества отводится своя куча.

В каждом из деревьев, входящих в кучу, выполнено такое свойство: ключ каждой вершины не больше ключей её детей. Деревья, однако, более не обязаны быть биномиальными. Пример фибоначчиевой кучи приведён на рис. 21.1а.

В биномиальных деревьях на детях любой вершины фиксирован порядок; в фибоначчиевых деревьях такого порядка нет (дети любой вершины связаны в круговой двусторонний список, но порядок в нём несуществен). Как показано на рис. 21.16, каждая вершина х содержит указатель р[х] на своего родителя и указатель child[x] на какого-нибудь из своих детей.

Дети вершины х связаны в двусторонний циклический список, называемый списком детей (child list) вершины х. Каждая верши-


Рис. 21.1 (а) Фибоначчиева куча, содержащая 5 деревьев и 14 вершин. Пунктирной линией показан корневой список. Минимальная вершина содержит ключ 3. Три отмеченные вершины выделены чёрным цветом. Потенциал этой кучи равен 5 + 2-3 = 11. (б) Та же куча вместе со стрелками, показывающими значения полей р (стрелки вверх), child (стрелки вниз) и left и right (стрелки в стороны). На остальных рисунках этой главы такие стрелки опущены, так как они восстанавливаются однозначно.

на у этого списка имеет поля left[y] и right[y], указывающие на её соседей в списке (левого и правого). Если вершина у является единственным ребёнком своего родителя, то left[y] = right[y] = у.

Двусторонние циклические списки (см. разд. 11.2) удобны по двум причинам. Во-первых, из такого списка можно удалить любую вершину за время 0(1). Во-вторых, два таких списка можно соединить в один за время 0(1).

Помимо указанной информации, каждая вершина имеет поле degree[x], где хранится её степень (число детей), а также поле тагк[х]. В этом поле хранится булевское значение. Смысл его таков: тагк[х] истинно, если вершина х потеряла ребёнка после того, как она в последний раз сделалась чьим-либо потомком. Мы объясним позже, как и когда это поле используется.

Корни деревьев, составляющих фибоначчиеву кучу, связаны с помощью указателей left и right в двусторонний циклический список, называемый корневым списком (root list).

Доступ к фибоначчиевой куче Н осуществляется с помощью атрибута min[H], который указывает на вершину корневого списка с минимальным ключом. Эта вершина называется минимальной вершиной (minimum node) кучи. Её ключ будет минимальным ключом в куче, поскольку минимальный ключ фибоначчиева дерева находится в его корне. Порядок вершин в корневом списке значения


не имеет. Если фибоначчиева куча Н пуста, то тгп[Н] = nil. Наконец, атрибут п[Н] содержит число вершин в куче Н.

Потенциал

При анализе учётной стоимости операций мы используем метод потенциала (раздел 18.3). Пусть t(H) - число деревьев в корневом списке кучи Н, а т(Н) - количество отмеченных вершин. Потенциал определяется формулой

Ф(Н) = Ь{Н) + 2т{Н).(21.1)

Например, потенциал кучи рис. 21.1 равен 5 + 2-3 = 11. В каждый момент времени в памяти хранится несколько куч; общий потенциал по определению равен сумме потенциалов всех этих куч. В дальнейшем мы выберем «единицу измерения потенциала» так, чтобы единичного изменения потенциала хватало для оплаты 0(1) операций (формально говоря, мы умножим потенциал на подходящую константу).

В начальном состоянии нет ни одной кучи, и потенциал равен 0. Как и положено (см. разд. 18.3), потенциал всегда неотрицателен.

Максимальная степень

Мы будем предполагать известной некоторую верхнюю границу D(n) для степеней вершин в кучах, которые могут появиться при выполнении наших процедур. (Аргументом функции D является общее число всех вершин в куче, обозначаемое через п.) Если мы используем только операции, предусмотренные для сливаемых куч, то можно положить D(n) = [lgn\ (упр. 21.2-3). В разделе 21.3 мы докажем (для общего случая, когда разрешены также операции Decrease-Key и Delete), что D(n) = O(lgra).

21.2. Операции, предусмотренные для сливаемых куч

Для начала мы будем рассматривать лишь операции Маке-Heap, Insert, Minimum, Extract-Min и Union, предусмотренные для сливаемых куч. В этом случае кучи будут представлять собой набор «неупорядоченных биномиальных деревьев», корни которых связаны в циклический список.

Неупорядоченное биномиальное дерево (unordered binomial tree) получается из упорядоченного, если мы перестаём обращать внимание на порядок среди вершин, имеющих общего родителя. Другими словами, неупорядоченное биномиальное дерево Uo состоит из единственной вершины, а неупорядоченное биномиальное



[стр.Начало] [стр.1] [стр.2] [стр.3] [стр.4] [стр.5] [стр.6] [стр.7] [стр.8] [стр.9] [стр.10] [стр.11] [стр.12] [стр.13] [стр.14] [стр.15] [стр.16] [стр.17] [стр.18] [стр.19] [стр.20] [стр.21] [стр.22] [стр.23] [стр.24] [стр.25] [стр.26] [стр.27] [стр.28] [стр.29] [стр.30] [стр.31] [стр.32] [стр.33] [стр.34] [стр.35] [стр.36] [стр.37] [стр.38] [стр.39] [стр.40] [стр.41] [стр.42] [стр.43] [стр.44] [стр.45] [стр.46] [стр.47] [стр.48] [стр.49] [стр.50] [стр.51] [стр.52] [стр.53] [стр.54] [стр.55] [стр.56] [стр.57] [стр.58] [стр.59] [стр.60] [стр.61] [стр.62] [стр.63] [стр.64] [стр.65] [стр.66] [стр.67] [стр.68] [стр.69] [стр.70] [стр.71] [стр.72] [стр.73] [стр.74] [стр.75] [стр.76] [стр.77] [стр.78] [стр.79] [стр.80] [стр.81] [стр.82] [стр.83] [стр.84] [стр.85] [стр.86] [стр.87] [стр.88] [стр.89] [стр.90] [стр.91] [стр.92] [стр.93] [стр.94] [стр.95] [стр.96] [стр.97] [стр.98] [стр.99] [стр.100] [стр.101] [стр.102] [стр.103] [стр.104] [стр.105] [стр.106] [стр.107] [стр.108] [стр.109] [стр.110] [стр.111] [стр.112] [стр.113] [стр.114] [стр.115] [стр.116] [стр.117] [стр.118] [стр.119] [стр.120] [стр.121] [стр.122] [стр.123] [стр.124] [стр.125] [стр.126] [стр.127] [стр.128] [стр.129] [стр.130] [стр.131] [стр.132] [стр.133] [стр.134] [стр.135] [стр.136] [стр.137] [стр.138] [стр.139] [стр.140] [стр.141] [стр.142] [стр.143] [стр.144] [стр.145] [стр.146] [стр.147] [стр.148] [стр.149] [стр.150] [стр.151] [стр.152] [стр.153] [стр.154] [стр.155] [стр.156] [стр.157] [стр.158] [стр.159] [стр.160] [стр.161] [стр.162] [стр.163] [стр.164] [стр.165] [стр.166] [стр.167] [стр.168] [стр.169] [стр.170] [стр.171] [стр.172] [стр.173] [стр.174] [стр.175] [стр.176] [стр.177] [стр.178] [стр.179] [стр.180] [стр.181] [стр.182] [стр.183] [стр.184] [стр.185] [стр.186] [стр.187] [стр.188] [стр.189] [стр.190] [стр.191] [стр.192] [стр.193] [стр.194] [стр.195] [стр.196] [стр.197] [стр.198] [стр.199] [стр.200] [стр.201] [стр.202] [стр.203] [стр.204] [стр.205] [стр.206] [стр.207] [стр.208] [стр.209] [стр.210] [стр.211] [стр.212] [стр.213] [стр.214] [стр.215] [стр.216] [стр.217] [стр.218] [стр.219] [стр.220] [стр.221] [стр.222] [стр.223] [стр.224] [стр.225] [стр.226] [стр.227] [стр.228] [стр.229] [стр.230] [стр.231] [стр.232] [стр.233] [стр.234] [стр.235] [стр.236] [стр.237] [стр.238] [стр.239] [стр.240] [стр.241] [стр.242] [стр.243] [стр.244] [стр.245] [стр.246] [стр.247] [стр.248] [стр.249] [стр.250] [стр.251] [стр.252] [стр.253] [стр.254] [стр.255] [стр.256] [стр.257] [стр.258] [стр.259] [стр.260] [стр.261] [стр.262] [стр.263] [стр.264] [стр.265] [стр.266] [стр.267] [стр.268] [стр.269] [стр.270] [стр.271] [стр.272] [стр.273] [стр.274] [стр.275] [стр.276] [стр.277] [стр.278] [стр.279] [стр.280] [стр.281] [стр.282] [стр.283] [стр.284] [стр.285] [стр.286] [стр.287] [стр.288] [стр.289] [стр.290] [стр.291] [стр.292] [стр.293] [стр.294]