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


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




[147]

нами) утверждением о том, что стоимость т операций с непересекающимися множествами, включающих га операций Make-Set, есть @(та(т, га)). В самом деле, эта оценка говорит, что стоимость в расчёте на одну операцию есть а(т, га). Если га фиксировано, а т растёт, то из-за сжатия путей деревья с каждым шагом всё более «упрощаются» (всё больше становится вершин, напрямую связанных с корнем), так что стоимость операции падает.

Во всех практических приложениях можно считать, что а(т, га) 4. В самом деле, поскольку функция Аккермана является возрастающей по каждому переменному и т га, имеем

А(4, [т/п\) > А(4,1) = А(3, 2) = 22** 17,

что много больше числа атомов в наблюдаемой части Вселенной (к, 1080). Поэтому для всех встречающихся на практике значений га имеем А(4, то/га ) lg га и а(т,п) 4.

Мы не доказываем оценки, связанной с функцией Аккермана, а ограничиваемся более слабой оценкой 0(mlg*ra). Вспомним определение функции lg* (с. ??). По определению, lg* 1 = 0 и

lg* га = min { г : lg lg ... lg га 1 )

4-„-

г раз

для га > 1. Неравенство в определении функции lg* можно перепи-]

сать так: га 22 > j (j - число двоек в формуле).

Оценка 0(mlg* га), которую мы докажем ниже, слабее, чем сформулированная без доказательства оценка 0(та(т, га)), но с практической точки зрения разница невелика. В самом деле, lg* 22 = lg* 265536 = 5, так что во всех практических вопросах можно считать, что lg* га 5 - вряд ли нам встретится множество, в котором более 265536 элементов.

Свойства рангов

Чтобы доказать оценку 0(mlg*ra) для времени работы с системой непересекающихся множеств, нам понадобятся некоторые свойства рангов. Напомним, что мы работаем с системой непересекающихся множеств, реализованной с помощью леса, с объединением по рангам и сжатием путей (см. разд. 22.3); через т обозначено суммарное число операций Make-Set, Find-Set и Union, а через га - число операций Make-Set.

Лемма 22.2

Для всякой вершины ж, кроме корня, rank[x] < гага/г[р[ж]] (напомним, что для корня р[х] = ж). При создании множества {ж} имеем rank[x] = 0, далее rank[x] может только возрастать и перестаёт меняться, когда ж перестаёт быть корнем в своём дереве.


Доказательство. Всё это непосредственно следует из описания процедур Make-Set, Union и Find-Set в разделе 22.3. Подробности мы оставляем читателю (упр. 22.4-1).

Пусть ж - вершина одного из наших деревьев. Число вершин в поддереве с корнем х (включая саму ж) назовем ее размером (size) и обозначим size(a:).

Лемма 22.3

Если х - корень одного из деревьев, то size (ж) 2rankx\ Доказательство.

Достаточно проверить, что каждая из операций Make-Set, Find-Set и Link сохраняет истинность утверждения «size(x) 2jrank[x] дЛЯ всех КОрНей ж». Операция Find-Set не меняет ни размеров корней, ни рангов каких бы то ни было вершин. Операция Маке-8ет(ж) также не нарушает утверждения леммы: не меняя рангов и размеров уже существующих деревьев, она создаёт новое дерево с единственной вершиной, для которой неравенство очевидным образом выполнено.

Рассмотрим операцию Link(x,j/) (не ограничивая общности, можно считать, что rank[x] rank[y]). В результате этой операции ранг или размер может измениться только у вершины у. Если rank[x] < rank[y], то размер у увеличивается, а ранг не меняется, так что неравенство size(y) 2гапку\ остаётся верным. Если же гапк[х] = гапк[у], то, обозначая через size[y] и гапк[у] размер и ранг у после операции Link, имеем size[y] = size[x] + size[y] и rank[y] = rank[y] + 1. Отсюда

size[y] = size[x] + size[y] 2rank + 2rank = 2rank+1 = 2rank. Лемма 22.4

Число вершин ранга г не превосходит га/2г (для любого целого г 0).

Доказательство.

Зафиксируем число г. Всякий раз, когда какой-либо вершине у присваивается ранг г (в строке 2 процедуры Make-Set или в строке 5 процедуры Link), будем привешивать метку ко всем вершинам поддерева с вершиной у. Поскольку вершина у в этот момент является корнем одного из деревьев, лемма 22.3 показывает, что число помечаемых вершин не меньше 2Г. Наши процедуры устроены так, что каждая вершина будет помечена не более одного раза. Стало быть,

га (число меток) 2Г • (число вершин ранга г),

откуда всё и следует. Следствие 22.5

Ранг любой вершины не превосходит [lg raj. Доказательство.


См. лемму 22.3 или 22.4

Доказательство оценки для времени работы

При доказательстве оценки нам будет удобнее работать с операцией Link, а не Union. Пусть дана последовательность Si, состоящая из mi операций Make-Set, Find-Set и Union. Заменим каждую операцию Union на две операции Find-Set и одну операцию Link; получится последовательность 5*2 из т2 операций Make-Set, Find-Set и Link.

Лемма 22.6

Если стоимость выполнения последовательности 5*2 в худшем случае есть 0(ra2lg* п), то стоимость выполнения последовательности 5*1 в худшем случае есть О (mi lg* п), где п - число операций Make-Set.

Доказательство.

Немедленно следует из очевидного неравенства mi т2 3rai. Теорема 22.7

Предположим, что над системой непересекающихся множеств (первоначально пустой) произвели т операций Make-Set, Find-Set и Link, из которых п операций были операциями Make-Set. Тогда при использовании реализации с помощью леса со сжатием путей и объединением по рангам общая стоимость этой последовательности операций есть 0(m\g* п).

Доказательство.

Стоимость каждой из операций Make-Set и Link есть, очевидно, 0(1), а их суммарная стоимость есть тем самым О (га). Займемся операциями Find-Set. Очевидно, стоимость операции Find-Set) пропорциональна длине пути поиска от ж к корню (до сжатия). Стало быть, нам надо оценить суммарную длину путей поиска, возникавших в процессе выполнения всех операций Find-Set и доказать, что она есть 0(ralg* п).

В процессе выполнения каждой из операций Find-Set мы двигаемся вверх по одному из деревьев, заканчивая поиск в его корне. Заметим, что на каждом шаге ранг вершины строго возрастает: если и - вершина, встретившаяся на пути поиска, a v - следующая вершина, то есть v = р[и], то rank[v] > гапк[и]. Вершина и может неоднократно встречаться в путях поиска при выполнении рассматриваемой в теореме последовательности операций. При этом за ней могут (и скорее всего будут) идти разные вершины: если в некоторый момент за и следовала вершина v, которая не была корневой, то после сжатия путей за и будет следовать уже не v, а корень дерева (на момент первого поиска), то есть вершина большего ранга, чем v. (Это простое наблюдение играет к дальнейшем ключевую роль.)

Наблюдая за ростом ранга при переходе от вершины к её родителю, мы отдельно оценить количество шагов, при которых ранг сильно растёт, и количество шагов, когда он растёт не сильно. Вы-



[стр.Начало] [стр.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]