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


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




[70]

Задачи к главе 11

219

индекс key left right

1

12

7

3

2

15

8

NIL

3

4

10

NIL

4

10

5

9

5

2

NIL

NIL

6

18

1

4

7

7

NIL

NIL

8

14

6

2

9

21

NIL

NIL

10

5

NIL

NIL

lb

дерева -

- в вершине

11.4-2 Напишите работающую за линейное время рекурсивную процедуру, которая печатает ключи всех вершин данного двоичного дерева.

11.4-3 Как сделать то же самое (что и в предыдущем упражнении), используя нерекурсивную процедуру? (При устранении рекурсии полезен стек.)

11.4-4 Напишите работающую за линейное время процедуру, печатающую ключи всех вершин дерева, представленного по схеме «левый ребёнок - правый сосед».

11.4-5* Напишите работающую за линейное время нерекурсивную процедуру, печатающую ключи всех вершин двоичного дерева, для которой объём используемой памяти (сверх памяти, в которой хранится дерево) есть 0(1), и во время работы процедуры дерево не меняется (даже временно).

11.4-6* Придумайте способ хранения дерева с произвольным ветвлением, при котором в каждой вершине хранятся всего два (а не три, как в схеме «левый ребенок - правый сосед») указателя плюс одна булева переменная.

Задачи

11-1 Сравнение разных типов списков

Найдите асимптотику времени работы (в худшем случае) для каждой из перечисленных в начале части III (с. 194) операций, применённой к каждому из указанных типов списков.


неупорядоченш

односторонне

связанный

.11у,порядоченный односторонне связанный

, неупорядоченн! двусторонне связанный

.1 непорядочен двусторонн связанный

Search(L, к)

Insert(L,ж)

Delete(L, ж)

Successor(L, ж)

Predecessor(L, ж)

Minimum(L)

Maximum(L)

11-2 Реализация сливаемых куч на базе списков

Структура данных под названием сливаемые кучи (mergeable heaps) хранит набор динамических множеств (куч), и поддерживает следующие операции: Маке-Heap (создание пустой кучи), Insert, Minimum, Extract-Min и, наконец, Union (объединение двух куч в одну; две старые кучи пропадают). Для каждого из перечисленных ниже случаев реализуйте (по возможности эффективно) сливаемые кучи на базе списков. Оцените время работы операций через размеры участвующих множеств.

а.Списки упорядочены.

б.Списки неупорядочены.

е. Списки неупорядочены, объединяемые множества не пересекаются друг с другом.

11-3 Поиск в отсортированном сжатом списке

В упражнении 11.3-4 требовалось хранить списки «компактно»: га-элементный список должен был занимать первые га позиций массива. Предположим ещё, что все ключи различны и что список упорядочен (иными словами, кеу[г] < key[next[i]] при next[i] ф nil). Оказывается, что в этих предположениях следующий вероятностный алгоритм выполняет поиск в списке за время о(га):

Compact-List-Search(L, к)

1г <- head[L]

2га <- length[L]

3while г ф nil and key[i] к

4do j - Random(1, га)

5if key[i] < key[j] and key[j] < к

6then i <- j

7i <- next[i]

8if key[i] = к

9then return i 10 return nil


Без строк 4-6 это был бы обычный алгоритм с последовательным перебором элементов списка. В строках 4-6 мы пытаемся перескочить на случайно выбранную позицию j. Если key[i] < key[j] < k, то при этом мы экономим время, так как не проверяем элементы, лежащие в позициях между г и j. (Благодаря тому, что список занимает непрерывный участок массива, мы можем выбрать в нём случайный элемент.)

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

Как оценить время работы? Представим себе, что на нескольких первых шагах мы выполняем только случайные скачки, а на остальных выполняем линейный поиск. Можно оценить ожидаемое расстояние до искомого элемента после первой фазы - и тем самым длительность второй фазы. Наш алгоритм будет работать не хуже такого усечённого, и остаётся только правильно выбрать длительность первой фазы, чтобы получить оценку получше.

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

б.Покажите, что для каждого t 0 математическое ожидание времени работы алгоритма Compact-List-Search есть 0(t-\-

в. Покажите, что E(Xt) 2~2=i( ~ г/п)*. (Указание: воспользуйтесь формулой (6.28)).

д.Покажите, что E(Xt) n/(t + 1), и объясните «на пальцах», почему это неравенство должно быть верно.

е.Покажите, что математическое ожидание времени работы алгоритма Compact-List-Search есть 0(у/п).

Прекрасные справочники по структурам данных - книги Ахо, Хопкрофта и Ульмана [5] и Кнута [121]. Результаты экспериментов по сравнению эффективности различных операций на структурах данных можно найти в Гоннет [90]

Стеки и очереди использовались в математике и делопроизводстве в докомпьютерную эру. Кнут [121] отмечает, что в 1947 году Тьюринг (A.M.Turing) использовал стеки для связи подпрограмм.

E[Xt\).

Замечания



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