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


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




[119]

Учётные стоимости (и тем самым оценки на реальную стоимость), рассчитанные с помощью метода потенциалов, зависят от выбора потенциальной функции, а сам этот выбор является делом творческим.

Операции со стеком

Проиллюстрируем метод потенциалов на примере знакомой нам задачи о стеке с операциями Push, Pop и Multipop. В качестве потенциальной функции Ф возьмем количество элементов в стеке. Поскольку мы начинаем с пустого стека, имеем

Ф(Д-) £ 0 = Ф(А,).

Стало быть, сумма учётных стоимостей оценивает сверху реальную стоимость последовательности операций.

Найдем теперь учётные стоимости индивидуальных операций. Так как операция Push имеет реальную стоимость 1 и к тому же увеличивает потенциал на 1, её учётная стоимость равна 1 + 1 = 2; операция Multipop, удаляющая из стека то элементов, имеет стоимость то, но уменьшает потенциал на то, так что её учётная стоимость равна то - то = 0; точно так же равна нулю и учетная стоимость операции Pop. Коль скоро учётная стоимость каждой операции не превосходит 2, стоимость последовательности п операций, начинающихся с пустого стека, есть 0(п).

Двоичный счетчик

Проанализируем с помощью метода потенциалов двоичный счётчик. В качестве потенциальной функции возьмём количество единиц в счетчике.

Найдем учётную стоимость операции Increment. Пусть Ьг- - количество единиц в счетчике после г-й операции, и пусть г-я операция Increment очищает £г- битов; тогда Ьг- 6г 1 - £г- + 1 (кроме очистки битов, Increment может ещё установить в единицу не более одного бита). Стало быть, реальная стоимость г-ro Increment не превосходит ti + 1, а его учетная стоимость есть

Сг (U + 1) + (6,- - 6,- i) 2.

Если отсчёт начинается с нуля, то Ф(-Оо) = 0, так что Ф(ГЛ) Ф(-Со) для всех г, сумма учётных стоимостей оценивает сверху сумму реальных стоимостей, и суммарная стоимость п операций Increment есть 0(п) с константой (двойкой), не зависящей от к (размера счётчика).


Метод потенциалов позволяет разобраться и со случаем, когда отсчет начинается не с нуля. В этом случае из (18.2) вытекает, что

пп

J> = с,--Ф(£)п) + Ф(Д),(18.3)

8 = 18 = 1

откуда, принимая во внимание, что сг- 2 для всех г, получаем, что

п

Усг <2п-Ъп + Ь0.

8 = 1

Поскольку бо к, для достаточно длинных последовательностей операций (га = £7(/г) операций Increment) реальная стоимость оценивается как О (га), причём константа в О-записи не зависит ни от к, ни от начального значения счетчика.

Упражнения

18.3-1 Пусть потенциальная функция Ф такова, что Ф(-Ог) Ф(.Оо) Для всех г, но Ф(-Оо) ф 0. Покажите, что существует потенциальная фуНКЦИЯ Ф, для которой Ф( Оо) = 0, Ф(-Ог) 0 для всех г, и учётные стоимости, рассчитанные с помощью функции Ф, совпадают с учётными стоимостями, рассчитанными с помощью Ф.

18.3-2 Сделайте упражнение 18-1.3 с помощью метода потенциалов.

18.3-3 Пусть наша структура данных - двоичная куча с операциями Insert и Extract-Min, работающими за время O(lgra) в худшем случае, где га - количество элементов. Придумайте потенциальную функцию Ф, для которой учётная стоимость операции Insert есть О (lgra), учётная стоимость операции Extract-Min есть 0(1), и сумма учётных стоимостей последовательности операций оценивает сверху реальную стоимость последовательности операций.

18.3-4 Пусть последовательность из га операций Push, Pop и Multipop применяется к стеку, содержащему so элементов, и приводит к стеку, содержащему sn элементов. Какова суммарная фактическая стоимость этих операций?

18.3-5 Пусть в начальном состоянии двоичный счетчик содержит Ь единиц, и пусть га = Q(b). Докажите, что стоимость га операций Increment есть О (га) с константой, не зависящей от Ь.

18.3-6 Как реализовать очередь на базе двух стеков (упражнение 11.1-6) таким образом, чтобы учетная стоимость операций Enqueue и Dequeue была 0(1)?


18.4. Динамические таблицы

При работе с таблицей переменного размера бывает желательно запрашивать память блоками: когда в таблице нет места для нового элемента, мы запрашиваем место для таблицы большего размера и копируем записи из старой таблицы в новую. При этом новый размер таблицы выбирается с запасом, чтобы не пришлось немедленно расширять её ещё раз. Напротив, если при удалении записей таблица становится почти пустой, то имеет смысл скопировать её остаток в таблицу меньшего размера и освободить память, занятую старой таблицей. В этом разделе мы покажем, как можно динамически расширять и сжимать таблицы, если мы хотим, чтобы учётная стоимость операций добавления и удаления записей к таблице была 0(1), (хотя реальная стоимость добавлений или удалений, требующих расширения или сжатия таблицы, может быть велика). При этом мы будем следить, чтобы коэффициент заполнения таблицы (отношение числа использованных ячеек к общему размеру) был не слишком мал.

Будем считать, что динамическая таблица поддерживает операции Table-Insert (добавить к таблице) и Table-Delete (удалить из таблицы). При добавлении записи к таблице мы занимаем в таблице одну ячейку (slot), при удалении записи одна ячейка освобождается. Как конкретно реализованы сама таблица и эти операции, нас в данный момент не интересует: это может быть стек (раздел 11.1), куча (раздел 7.1), хеш-таблица (глава 12), или, наконец, массив или набор массивов (раздел 11.3).

Как мы уже говорили (см. также главу 12 о хешировании), Именно, коэффициентом заполнения (load factor) таблицы Г назовем число си (Г), равное отношению числа заполненных ячеек к размеру таблицы (общему числу ячеек), если знаменатель отличен от нуля. Для вырожденной таблицы (не содержащей ни одной ячейки) коэффициент заполнения мы считаем равным единице. Если определенный таким образом коэффициент заполнения ограничен снизу положительным числом, то доля свободных ячеек в таблице ограничена сверху числом, меньшим единицы.

18.4.1. Расширение таблицы

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



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