- •X Предисловие
- •XII Предисловие
- •XVI Содержание
- •XVIII Содержание
- •XX Содержание
- •XXII Содержание
- •1.2. Выражения 17
- •1.2. Выражения 19
- •1.2. Выражения 21
- •1.3. Поток контроля 23
- •1.3. Поток контроля 25
- •1.4. Функции 27
- •1.4. Функции 29
- •1.4. Функции 31
- •1.5. Классы 33
- •1.5. Классы 35
- •1.5. Классы 37
- •1.5. Классы 39
- •1.5. Классы 41
- •1.5. Классы 43
- •1.5. Классы 45
- •1.8. Упражнения 61
- •1.8. Упражнения 63
- •66 Глава 2. Ориентированный на объект дизайн
- •2.1. Цели, принципы и образцы 67
- •68 Глава 2. Ориентированный на объект дизайн
- •2.1. Цели, принципы и образцы 69
- •70 Глава 2. Ориентированный на объект дизайн
- •2.2. Наследование и полиморфизм 71
- •Глава 2. Ориентированный на объект дизайн
- •2.2. Наследование и полиморфизм 73
- •Глава 2. Ориентированный на объект дизайн
- •2.2. Наследование и полиморфизм 75
- •2.2. Наследование и полиморфизм
- •Глава 2. Ориентированный на объект дизайн
- •2.2. Наследование и полиморфизм 79
- •Глава 2. Ориентированный на объект дизайн
- •2.2. Наследование и полиморфизм 81
- •82 Глава 2. Ориентированный на объект дизайн
- •2.2. Наследование и полиморфизм 83
- •Глава 2. Ориентированный на объект дизайн
- •2.2. Наследование и полиморфизм 85
- •2.2. Наследование и полиморфизм 87
- •Глава 2. Ориентированный на объект Дизайн определен как определение типа и коллекция членских функций для этого типа с аргументами в пользу каждой функции, являющейся указанных типов.
- •2.2. Наследование и полиморфизм 89
- •90 Глава 2. Ориентированный на объект дизайн
- •2.3. Шаблоны 91
- •2.4. Исключения 93
- •94 Глава 2. Ориентированный на объект дизайн
- •2.4. Исключения 95
- •2.4. Исключения 97
- •98 Глава 2. Ориентированный на объект дизайн
- •Раздел 2.2.3, чтобы найти 7-ю ценность прогрессии Фибоначчи, которая начинается с 3 и 4 как ее первые две ценности.
- •2.5. Упражнения 99
- •Глава 2. Ориентированный на объект дизайн
- •2.5. Упражнения 101
- •104 Глава 3. Множества, связанные списки и рекурсия
- •3.1. Используя множества 105
- •3.1. Используя множества 107
- •108 Глава 3. Множества, связанные списки и рекурсия
- •3.1. Используя множества 109
- •110 Глава 3. Множества, связанные списки и рекурсия
- •3.1. Используя множества 111
- •112 Глава 3. Множества, связанные списки и рекурсия
- •3.1. Используя множества 113
- •3.1. Используя множества 115
- •Глава 3. Множества, связанные списки и рекурсия
- •3.2. Отдельно связанные списки 117
- •Глава 3. Множества, связанные списки и рекурсия
- •3.2. Отдельно связанные списки 119
- •120 Глава 3. Множества, связанные списки и рекурсия
- •3.2. Отдельно связанные списки 121
- •122 Глава 3. Множества, связанные списки и рекурсия
- •3.3. Вдвойне связанные списки 123
- •124 Глава 3. Множества, связанные списки и рекурсия
- •3.3. Вдвойне связанные списки 125
- •3.3. Вдвойне связанные списки 127
- •Глава 3. Множества, связанные списки и рекурсия
- •3.4. Циркулярные связанные списки и аннулирование списка
- •Глава 3. Множества, связанные списки и рекурсия
- •3.4. Циркулярные связанные списки и аннулирование списка 131
- •Глава 3. Множества, связанные списки и рекурсия
- •3.4. Циркулярные связанные списки и аннулирование списка 133
- •134 Глава 3. Множества, связанные списки и рекурсия
- •3.5. Рекурсия 135
- •136 Глава 3. Множества, связанные списки и рекурсия
- •3.5. Рекурсия 137
- •Глава 3. Множества, связанные списки и рекурсия
- •3.5. Рекурсия 139
- •140 Глава 3. Множества, связанные списки и рекурсия
- •3.5. Рекурсия 141
- •142 Глава 3. Множества, связанные списки и рекурсия
- •3.5. Рекурсия 143
- •144 Глава 3. Множества, связанные списки и рекурсия
- •3.5. Рекурсия 145
- •Раздел 2.2.3, что Числа Фибоначчи рекурсивно определены следующим образом:
- •Глава 3. Множества, связанные списки и рекурсия
- •3.5. Рекурсия 147
- •148 Глава 3. Множества, связанные списки и рекурсия
- •3.6. Упражнения
- •Глава 3. Множества, связанные списки и рекурсия
- •3.6. Упражнения 151
- •Глава 3. Множества, связанные списки и рекурсия
- •Глава 4. Аналитические инструменты
- •4.1. Семь функций, используемых в этой книге 155
- •156 Глава 4. Аналитические инструменты
- •4.1. Семь функций, используемых в этой книге 157
- •Глава 4. Аналитические инструменты
- •4.1. Семь функций, используемых в этой книге 159
- •Глава 4. Аналитическое Суждение Инструментов 4.4 (Правила Образца): Учитывая положительные целые числа a, b, и c, мы имеем:
- •162 Глава 4. Аналитические инструменты
- •4.2. Анализ алгоритмов 163
- •164 Глава 4. Аналитические инструменты
- •166 Глава 4. Аналитические инструменты
- •Глава 4. Аналитические инструменты
- •4.2. Анализ алгоритмов 169
- •170 Глава 4. Аналитические инструменты
- •4.2. Анализ алгоритмов
- •172 Глава 4. Аналитические инструменты
- •4.2. Анализ алгоритмов 173
- •174 Глава 4. Аналитические инструменты
- •4.2. Анализ алгоритмов 175
- •176 Глава 4. Аналитические инструменты
- •4.2. Анализ алгоритмов 177
- •178 Глава 4. Аналитические инструменты
- •4.2. Анализ алгоритмов 179
- •180 Глава 4. Аналитические инструменты
- •4.3. Простые методы оправдания 181
- •182 Глава 4. Аналитические инструменты
- •4.3. Простые методы оправдания 183
- •184 Глава 4. Аналитические инструменты
- •4.4. Упражнения
- •186 Глава 4. Аналитические инструменты
- •4.4. Упражнения 187
- •Глава 4. Аналитические инструменты
- •4.4. Упражнения 189
- •Глава 4. Аналитические инструменты
- •4.4. Упражнения 191
- •192 Глава 4. Аналитические инструменты
- •194 Глава 5. Стеки, очереди и Deques
- •5.1. Стеки 195
- •196 Глава 5. Стеки, очереди и Deques
- •5.1. Стеки 197
- •Глава 5. Стеки, очереди и Deques
- •5.1. Стеки 199
- •Глава 5. Стеки, очереди и Deques
- •5.1. Стеки 201
- •Глава 5. Стеки, очереди и Deques
- •5.1. Стеки 203
- •204 Глава 5. Стеки, очереди и Deques
- •5.1. Стеки 205
- •Глава 5. Стеки, очереди и Deques
- •5.1. Стеки 207
- •5.2. Очереди
- •5.2. Очереди 211
- •Глава 5. Стеки, очереди и Deques
- •5.2. Очереди 213
- •Глава 5. Стеки, Очереди и Deques как фронт очереди и фронт круглого списка как задняя часть очереди?)
- •5.2. Очереди
- •Глава 5. Стеки, очереди и Deques
- •5.3. Симметричные очереди 217
- •218 Глава 5. Стеки, очереди и Deques
- •5.3. Симметричные очереди 219
- •220 Глава 5. Стеки, очереди и Deques
- •5.3. Симметричные очереди 221
- •Глава 5. Стеки, очереди и Deques
- •5.4. Упражнения
- •Глава 5. Стеки, очереди и Deques
- •5.4. Упражнения
- •Глава 5. Стеки, очереди и Deques
- •228 Глава 6. Список и Iterator adTs
- •6.1. Векторы 229
- •Глава 6. Список и Iterator adTs элемент, чей индекс I списка в индексе I во множестве a. (См. Рисунок 6.1.)
- •6.1. Векторы 231
- •232 Глава 6. Список и Iterator adTs
- •6.1. Векторы 233
- •Глава 6. Список и Iterator adTs
- •6.1. Векторы 235
- •236 Глава 6. Список и Iterator adTs
- •6.1. Векторы 237
- •238 Глава 6. Список и Iterator adTs
- •6.2. Списки 239
- •6.2. Списки 241
- •6.2. Списки
- •Глава 6. Список и Iterator adTs
- •6.2. Списки
- •246 Глава 6. Список и Iterator adTs
- •6.2. Списки
- •Глава 6. Список и Iterator adTs
- •6.2. Списки
- •250 Глава 6. Список и Iterator adTs
- •6.2. Списки
- •252 Глава 6. Список и Iterator adTs
- •6.2. Списки
- •6.3. Последовательности 255
- •6.3. Последовательности 257
- •Глава 6. Список и Iterator adTs
- •6.4. Тематическое исследование: вид пузыря на последовательности 259
- •Глава 6. Список и Iterator adTs
- •6.4. Тематическое исследование: вид пузыря на последовательности 261
- •262 Глава 6. Список и Iterator adTs
- •6.5. Упражнения 263
- •Глава 6. Список и Iterator adTs
- •6.5. Упражнения 265
- •268 Глава 7. Деревья
- •7.1. Общие деревья 269
- •270 Глава 7. Деревья
- •7.1. Общие деревья 271
- •272 Глава 7. Деревья
- •7.1. Общие деревья 273
- •274 Глава 7. Деревья
- •7.2. Алгоритмы пересечения дерева 275
- •276 Глава 7. Деревья
- •7.2. Алгоритмы пересечения дерева 277
- •278 Глава 7. Деревья
- •7.2. Алгоритмы пересечения дерева 279
- •Глава 7. Деревья
- •7.2. Алгоритмы пересечения дерева 281
- •282 Глава 7. Деревья
- •7.2. Алгоритмы пересечения дерева 283
- •284 Глава 7. Деревья
- •7.3. Двоичные деревья 285
- •7.3. Двоичные деревья 287
- •288 Глава 7. Деревья
- •7.3. Двоичные деревья 289
- •Глава 7. Деревья
- •7.3. Двоичные деревья 291
- •292 Глава 7. Деревья
- •7.3. Двоичные деревья 293
- •Глава 7. Деревья
- •7.3. Двоичные деревья
- •Глава 7. Деревья
- •7.3. Двоичные деревья
- •298 Глава 7. Деревья
- •7.3. Двоичные деревья 299
- •300 Глава 7. Деревья
- •7.3. Двоичные деревья 301
- •302 Глава 7. Деревья
- •7.3. Двоичные деревья 303
- •7.3. Двоичные деревья 305
- •306 Глава 7. Деревья
- •7.3. Двоичные деревья 307
- •Глава 7. Деревья
- •7.3. Двоичные деревья 309
- •310 Глава 7. Деревья
- •7.4. Упражнения 311
- •Глава 7. Деревья
- •7.4. Упражнения 313
- •Глава 7. Деревья
- •7.4. Упражнения
- •Глава 7. Деревья c-7.24 Позволяют t быть деревом с n узлами. Определите самого низкого общего предка (lca)
- •7.4. Упражнения 317
- •Глава 7. Деревья p-7.9 разрезание floorplan являются разложением прямоугольника с горизонтальным и
- •7.4. Упражнения 319
- •320 Глава 7. Деревья
- •Глава 8. Кучи и приоритетные очереди
- •8.1. Приоритетный тип данных резюме очереди 323
- •324 Глава 8. Кучи и приоритетные очереди
- •8.1. Приоритетный тип данных резюме очереди 325
- •Глава 8. Кучи и приоритетные очереди
- •8.1. Приоритетный тип данных резюме очереди
- •8.1. Приоритетный тип данных резюме очереди 329
- •Глава 8. Кучи и приоритетные очереди
- •8.2. Осуществление приоритетной очереди со списком 331
- •Глава 8. Кучи и приоритетные очереди
- •8.2. Осуществление приоритетной очереди со списком 333
- •Глава 8. Кучи и приоритетные очереди
- •8.2. Осуществление приоритетной очереди со списком 335
- •336 Глава 8. Кучи и приоритетные очереди
- •8.3. Кучи 337
- •338 Глава 8. Кучи и приоритетные очереди
- •8.3. Кучи 339
- •Глава 8. Кучи и приоритетные очереди
- •8.3. Кучи 341
- •Глава 8. Кучи и приоритетные очереди
- •8.3. Кучи 343
- •Глава 8. Кучи и приоритетные очереди
- •8.3. Кучи 345
- •Глава 8. Кучи и Приоритет Стоят в очереди в t, пока никакое нарушение собственности заказа кучи не происходит. (См. Figures8.7 (e) и (h).)
- •8.3. Кучи 347
- •348 Глава 8. Кучи и приоритетные очереди
- •8.3. Кучи 349
- •Глава 8. Кучи и приоритетные очереди
- •8.3. Кучи 351
- •Глава 8. Кучи и приоритетные очереди
- •8.3. Кучи 353
- •354 Глава 8. Кучи и приоритетные очереди
- •8.3. Кучи 355
- •Глава 8. Кучи и приоритетные очереди
- •8.4. Приспосабливаемые приоритетные очереди 357
- •358 Глава 8. Кучи и приоритетные очереди
- •8.4. Приспосабливаемые приоритетные очереди 359
- •360 Глава 8. Кучи и приоритетные очереди
- •8.5. Упражнения
- •Глава 8. Кучи и приоритетные очереди
- •8.5. Упражнения 363
- •Глава 8. Кучи и Приоритетные Очереди, c-8.10 Описывают последовательность n вставок к куче, которая требуетw (n регистрируют n), время
- •8.5. Упражнения 365
- •368 Глава 9. Хеш-таблицы, карты и списки пропуска
- •9.1. Карты 369
- •Глава 9. Хеш-таблицы, Карты и карта Списков Пропуска. Мы можем перечислить все записи карты m, инициализировав p к m.Begin () и затем неоднократно увеличивая p, пока это не равно m.End ().
- •9.1. Карты
- •Глава 9. Хеш-таблицы, карты и списки пропуска
- •9.1. Карты 373
- •Глава 9. Хеш-таблицы, карты и списки пропуска
- •376 Глава 9. Хеш-таблицы, карты и списки пропуска
- •382 Глава 9. Хеш-таблицы, карты и списки пропуска
- •386 Глава 9. Хеш-таблицы, карты и списки пропуска
- •Глава 9. Хеш-таблицы, карты и списки пропуска
- •390 Глава 9. Хеш-таблицы, карты и списки пропуска
- •394 Глава 9. Хеш-таблицы, карты и списки пропуска
- •9.3. Заказанные карты 395
- •9.3. Заказанные карты 397
- •9.3. Заказанные карты 399
- •400 Глава 9. Хеш-таблицы, карты и списки пропуска
- •9.3. Заказанные карты 401
- •402 Глава 9. Хеш-таблицы, карты и списки пропуска
- •9.4. Пропустите списки 403
- •Глава 9. Хеш-таблицы, карты и списки пропуска
- •9.4. Пропустите списки 405
- •406 Глава 9. Хеш-таблицы, карты и списки пропуска
- •9.4. Пропустите списки 407
- •408 Глава 9. Хеш-таблицы, карты и списки пропуска
- •9.4. Пропустите списки 409
- •Глава 9. Хеш-таблицы, карты и списки пропуска
- •9.5. Словари 411
- •Глава 9. Хеш-таблицы, карты и списки пропуска
- •9.5. Словари 413
- •Глава 9. Хеш-таблицы, карты и списки пропуска
- •9.5. Словари 415
- •Глава 9. Хеш-таблицы, Карты и Списки Пропуска (Вспоминают, что местоположение () теперь возвращает целое число.) Этот подход бежал бы быстро, если бы вход e был сохранен около конца t.
- •9.6. Упражнения
- •Глава 9. Хеш-таблицы, карты и списки пропуска
- •9.6. Упражнения 419
- •Глава 9. Хеш-таблицы, карты и списки пропуска
- •424 Глава 10. Деревья поиска
- •10.1. Деревья двоичного поиска 425
- •426 Глава 10. Деревья поиска
- •10.1. Деревья двоичного поиска 427
- •428 Глава 10. Деревья поиска
- •10.1. Деревья двоичного поиска 429
- •430 Глава 10. Деревья поиска
- •10.1. Деревья двоичного поиска 431
- •10.1. Деревья двоичного поиска 433
- •10.1. Деревья двоичного поиска 435
- •Глава 10. Деревья поиска
- •10.1. Деревья двоичного поиска 437
- •438 Глава 10. Деревья поиска
- •10.2. Деревья avl 439
- •440 Глава 10. Деревья поиска
- •10.2. Деревья avl 441
- •442 Глава 10. Деревья поиска
- •10.2. Деревья avl 443
- •444 Глава 10. Деревья поиска
- •10.2. Деревья avl 445
- •446 Глава 10. Деревья поиска
- •10.2. Деревья avl 447
- •Глава 10. Деревья поиска
- •10.2. Деревья avl 449
- •450 Глава 10. Деревья поиска
- •10.3. Косые деревья 451
- •452 Глава 10. Деревья поиска
- •10.3. Косые деревья 453
- •454 Глава 10. Деревья поиска
- •10.3. Косые деревья 455
- •456 Глава 10. Деревья поиска
- •10.3. Косые деревья 457
- •10.3. Косые деревья 459
- •Глава 10. Деревья поиска
- •10.4. (2,4) Деревья 461
- •462 Глава 10. Деревья поиска
- •10.4. (2,4) Деревья 463
- •Глава 10. Деревья поиска
- •10.4. (2,4) Деревья 465
- •466 Глава 10. Деревья поиска
- •10.4. (2,4) Деревья 467
- •468 Глава 10. Деревья поиска
- •10.4. (2,4) Деревья 469
- •470 Глава 10. Деревья поиска
- •10.4. (2,4) Деревья 471
- •472 Глава 10. Деревья поиска
- •10.5. Красно-черные деревья 473
- •Глава 10. Деревья поиска
- •10.5. Красно-черные деревья 475
- •Глава 10. Случай Деревьев поиска 1: Родной брат w V Темнокожий. (См. Рисунок 10.29.) в этом случае, двойное
- •10.5. Красно-черные деревья 477
- •478 Глава 10. Деревья поиска
- •10.5. Красно-черные деревья 479
- •Глава 10. Деревья поиска
- •10.5. Красно-черные деревья 481
- •Глава 10. Случай Деревьев поиска 2: Родной брат y r Темнокожий, и Оба Ребенка y Темнокожие. (См. Фигу -
- •10.5. Красно-черные деревья 483
- •Глава 10. Случай Деревьев поиска 3: Родной брат y r Красный. (См. Рисунок 10.36.) в этом случае мы выступаем
- •10.5. Красно-черные деревья 485
- •486 Глава 10. Деревья поиска
- •10.5. Красно-черные деревья 487
- •488 Глава 10. Деревья поиска
- •10.5. Красно-черные деревья 489
- •490 Глава 10. Деревья поиска
- •10.5. Красно-черные деревья 491
- •492 Глава 10. Деревья поиска
- •10.6. Упражнения
- •494 Глава 10. Деревья поиска
- •10.6. Упражнения 495
- •Глава 10. Деревья поиска
- •500 Глава 11. Сортировка, наборы и выбор
- •11.1. Вид слияния 501
- •502 Глава 11. Сортировка, наборы и выбор
- •11.1. Вид слияния 503
- •504 Глава 11. Сортировка, наборы и выбор
- •11.1. Вид слияния 505
- •506 Глава 11. Сортировка, наборы и выбор
- •11.1. Вид слияния 507
- •508 Глава 11. Сортировка, наборы и выбор
- •11.1. Вид слияния 509
- •Глава 11. Сортировка, наборы и выбор
- •11.1. Вид слияния 511
- •512 Глава 11. Сортировка, наборы и выбор
- •11.2. Быстрый вид 513
- •514 Глава 11. Сортировка, наборы и выбор
- •11.2. Быстрый вид 515
- •516 Глава 11. Сортировка, наборы и выбор
- •11.2. Быстрый вид 517
- •518 Глава 11. Сортировка, наборы и выбор
- •11.2. Быстрый вид 519
- •520 Глава 11. Сортировка, наборы и выбор
- •11.2. Быстрый вид 521
- •Глава 11. Сортировка, наборы и выбор
- •11.2. Быстрый вид 523
- •Глава 11. Сортировка, наборы и выбор
- •11.2. Быстрый вид 525
- •Глава 11. Сортировка, наборы и выбор
- •11.3. Изучение сортировки алгоритмической линзы 527
- •Глава 11. Сортировка, наборы и выбор
- •11.3. Изучение сортировки алгоритмической линзы 529
- •Глава 11. Сортировка, наборы и выбор
- •11.3. Изучение сортировки алгоритмической линзы 531
- •11.4. Наборы и Структуры Союза/Находить 533
- •Глава 11. Сортировка, наборы и выбор
- •11.4. Наборы и Структуры Союза/Находить 535
- •11.4. Наборы и Структуры Союза/Находить 537
- •538 Глава 11. Сортировка, наборы и выбор
- •11.4. Наборы и Структуры Союза/Находить 539
- •540 Глава 11. Сортировка, наборы и выбор
- •11.4. Наборы и Структуры Союза/Находить 541
- •542 Глава 11. Сортировка, наборы и выбор
- •11.5. Выбор 543
- •544 Глава 11. Сортировка, наборы и выбор
- •11.6. Упражнения
- •Глава 11. Сортировка, Наборы и Выбор Шоу r-11.14, что вероятность, что любой данный входной элемент X принадлежит больше
- •11.6. Упражнения 547
- •11.6. Упражнения 549
- •Глава 12. Последовательности и динамическое программирование
- •12.1. Операции по последовательности 555
- •Глава 12. Последовательности и динамическое программирование
- •12.2. Динамическое программирование 557
- •558 Глава 12. Последовательности и динамическое программирование
- •12.2. Динамическое программирование
- •Глава 12. Последовательности и динамическое программирование
- •12.2. Динамическое программирование 561
- •562 Глава 12. Последовательности и динамическое программирование
- •12.2. Динамическое программирование 563
- •Глава 12. Последовательности и динамическое программирование
- •12.3. Алгоритмы соответствия образца 565
- •566 Глава 12. Последовательности и динамическое программирование
- •12.3. Алгоритмы соответствия образца 567
- •568 Глава 12. Последовательности и динамическое программирование
- •12.3. Алгоритмы соответствия образца 569
- •Глава 12. Последовательности и динамическое программирование
- •12.3. Алгоритмы соответствия образца 571
- •572 Глава 12. Последовательности и динамическое программирование
- •12.3. Алгоритмы соответствия образца 573
- •Глава 12. Последовательности и динамическое программирование
- •12.4. Текстовое сжатие и жадный метод 575
- •576 Глава 12. Последовательности и динамическое программирование
- •12.4. Текстовое сжатие и жадный метод
- •578 Глава 12. Последовательности и динамическое программирование
- •12.5. Попытки 579
- •Глава 12. Последовательности и динамическое программирование
- •12.5. Попытки 581
- •582 Глава 12. Последовательности и динамическое программирование
- •12.5. Попытки 583
- •584 Глава 12. Последовательности и динамическое программирование
- •12.5. Попытки 585
- •586 Глава 12. Последовательности и динамическое программирование
- •12.6. Упражнения
- •Глава 12. Последовательности и динамическое программирование
- •12.6. Упражнения 589
- •Глава 12. Последовательности и Динамическое Программирование c-12.16 Описывают алгоритм для строительства компактного представления a
- •12.6. Упражнения 591
- •Глава 12. Последовательности и Динамическое Программное p-12.10 Орудие поисковая система для страниц небольшого веб-сайта, добавляя
- •594 Глава 13. Алгоритмы графа
- •13.1. Графы 595
- •13.1. Графы 597
- •13.1. Графы 599
- •Глава 13. Алгоритмы графа
- •13.2. Структуры данных для графов
- •602 Глава 13. Алгоритмы графа
- •13.2. Структуры данных для графов 603
- •604 Глава 13. Алгоритмы графа
- •13.2. Структуры данных для графов 605
- •606 Глава 13. Алгоритмы графа
- •13.3. Пересечения графа 607
- •608 Глава 13. Алгоритмы графа
- •13.3. Пересечения графа 609
- •13.3. Пересечения графа 611
- •612 Глава 13. Алгоритмы графа
- •13.3. Пересечения графа 613
- •Глава 13. Алгоритмы графа
- •13.3. Пересечения графа 615
- •Глава 13. Алгоритмы графа
- •13.3. Пересечения графа 617
- •618 Глава 13. Алгоритмы графа
- •13.3. Пересечения графа
- •620 Глава 13. Алгоритмы графа
- •13.3. Пересечения графа 621
- •Глава 13. Алгоритмы графа
- •13.3. Пересечения графа 623
- •624 Глава 13. Алгоритмы графа
- •13.3. Пересечения графа 625
- •626 Глава 13. Алгоритмы графа
- •13.4. Направленные графы 627
- •628 Глава 13. Алгоритмы графа
- •13.4. Направленные графы 629
- •13.4. Направленные графы 631
- •632 Глава 13. Алгоритмы графа
- •13.4. Направленные графы 633
- •Глава 13. Алгоритмы графа
- •13.4. Направленные графы 635
- •636 Глава 13. Алгоритмы графа
- •13.5. Кратчайшие пути 637
- •638 Глава 13. Алгоритмы графа
- •13.5. Кратчайшие пути 639
- •13.5. Кратчайшие пути 641
- •642 Глава 13. Алгоритмы графа
- •13.5. Кратчайшие пути 643
- •644 Глава 13. Алгоритмы графа
- •13.6. Минимальные деревья охвата 645
- •646 Глава 13. Алгоритмы графа
- •13.6. Минимальные деревья охвата 647
- •648 Глава 13. Алгоритмы графа
- •13.6. Минимальные деревья охвата 649
- •650 Глава 13. Алгоритмы графа
- •13.6. Минимальные деревья охвата 651
- •652 Глава 13. Алгоритмы графа
- •13.6. Минимальные деревья охвата 653
- •654 Глава 13. Алгоритмы графа
- •13.7. Упражнения 655
- •Глава 13. Шоу r-13.15 Алгоритмов графа, как изменить псевдокодекс для алгоритма Дейкстры для случая
- •13.7. Упражнения 657
- •Глава 13. Алгоритмы графа
- •13.7. Упражнения 659
- •Глава 13. Сети Graph Algorithms c-13.20 Computer должны избежать единственных пунктов неудачи, то есть, сети
- •13.7. Упражнения 661
- •662 Глава 13. Алгоритмы графа
- •Глава 14. Управление памятью и b-деревья
- •14.1. Управление памятью 667
- •Глава 14. Управление памятью и b-деревья
- •14.1. Управление памятью
- •670 Глава 14. Управление памятью и b-деревья
- •14.1. Управление памятью 671
- •Глава 14. Управление памятью и b-деревья
- •14.2. Внешняя память и кэширование 673
- •674 Глава 14. Управление памятью и b-деревья
- •14.2. Внешняя память и кэширование 675
- •676 Глава 14. Управление памятью и b-деревья
- •14.2. Внешняя память и кэширование 677
- •Глава 14. Управление памятью и b-деревья
- •14.3. Внешний поиск и b-деревья 679
- •680 Глава 14. Управление памятью и b-деревья
- •14.3. Внешний поиск и b-деревья 681
- •682 Глава 14. Управление памятью и b-деревья
- •14.4. Сортировка внешней памяти 683
- •684 Глава 14. Управление памятью и b-деревья
- •14.5. Упражнения
- •Глава 14. Управление памятью и b-деревья
- •Глава 14. Управление памятью и b-деревья
- •692 Приложение a. Полезные математические факты
- •706 Индекс
- •708 Индекс
- •710 Индекс
376 Глава 9. Хеш-таблицы, карты и списки пропуска
9.2.2 Функции мешанины
Вторая часть структуры хеш-таблицы - функция, h, вызвал функцию мешанины, которая наносит на карту каждый ключ k в нашей карте к целому числу в диапазоне [0, N- 1], где N
мощность ведра выстраивает для этого стола. Оборудованный такой функцией мешанины,
h, мы можем применить метод множества ведра к произвольным ключам. Главная идея этого подхода состоит в том, чтобы использовать стоимость функции мешанины, h (k), как индекс в наше множество ведра, A, вместо ключа k (который является наиболее вероятно несоответствующим для использования в качестве индекса множества ведра). Таким образом, мы храним вход (k, v) в ведре [h (k)].
Конечно, если будет два или больше ключа с той же самой стоимостью мешанины, то два различных записей будут нанесены на карту к тому же самому ведру в A. В этом случае мы говорим, что столкновение произошло. Ясно, если каждое ведро A может сохранить только единственный вход, то мы не можем связать больше чем один вход с единственным ведром, которое является проблемой в случае столкновений. Безусловно, есть способы иметь дело со столкновениями, которые мы обсуждаем позже, но лучшая стратегия состоит в том, чтобы попытаться избежать их во-первых. Мы говорим, что функция мешанины «хороша», если она наносит на карту ключи в нашей карте таким способом как, чтобы минимизировать столкновения как можно больше. По практическим причинам мы также хотели бы, чтобы функция мешанины была быстра и легка вычислить.
Мы рассматриваем оценку функции мешанины, h (k), как состоящий из двух действий - отображение ключа k к целому числу, названному кодексом мешанины и отображением кодекса мешанины
к целому числу в пределах ряда индексов ([0, N- 1]) множества ведра, названного
функция сжатия. (См. рисунок 9.3.)
Рисунок 9.3: две части функции мешанины: крошите функция сжатия и кодекс.
9.2.3 Кодексы мешанины
Первое действие, которое выполняет функция мешанины, должно взять произвольный ключ k в нашей карте
и назначьте ему целочисленное значение. Целое число, назначенное на ключ k, называют мешаниной
кодекс для k. Это целочисленное значение не должно быть в диапазоне [0, N- 1], и может даже быть
9.2. Хеш-таблицы 377
отрицательный, но мы хотим набор кодексов мешанины, порученных на наши ключи избегать столкновений
как можно больше. Если кодексы мешанины наших ключей вызывают столкновения, то нет никакой надежды на нашу функцию сжатия, чтобы избежать их. Кроме того, чтобы быть совместимыми со всеми нашими ключами, кодекс мешанины мы используем для ключа k, должен совпасть с кодексом мешанины для любого ключа, который равен k.
Кодексы мешанины в C ++
Кодексы мешанины, описанные ниже, основаны на предположении что число
части каждого типа известны. Эта информация предоставлена в стандарте, включают файл <пределы>. Это включает файл, определяет templated класс числовые пределы. Учитывая основной тип T (такой как случайная работа, интервал или float), число битов в переменной типа T дано «числовыми пределами <T> .digits». Давайте рассмотрим несколько типов общих данных и некоторые функции в качестве примера для назначения кодексов мешанины к объектам этих типов.
Преобразование в целое число
Чтобы начаться, мы отмечаем, что, для любого типа данных X, который представлен, используя самое большее как
много битов как наша мешанина целого числа кодируют, мы можем просто взять интерпретацию целого числа его битов как кодекс мешанины для X. Таким образом, для C ++ фундаментальная случайная работа типов, короткая, и международная, мы можем достигнуть хорошего кодекса мешанины просто, бросив этот тип к интервалу.
На многих машинах у типа долго есть маленькое представление, которое является в два раза длиннее, чем интервалом типа. Один возможный кодекс мешанины для длинного объекта должен просто разрушить его к целому числу и затем применить кодекс мешанины целого числа. Проблема состоит в том, что такой кодекс мешанины игнорирует половину информации, существующей в первоначальной стоимости. Если многие ключи в нашей карте только будут отличаться по этим битам, то они столкнутся, используя этот простой кодекс мешанины. Лучший кодекс мешанины, который принимает все оригинальные биты во внимание, суммирует представление целого числа старших битов с представлением целого числа битов младшего разряда.
Действительно, подход подведения итогов компонентов может быть расширен на любой объект x, чье двойное представление может быть рассмотрено как k-кортеж (x0, x1..., xk-1) целых чисел, потому что мы можем тогда сформировать кодекс мешанины для x какåki=01 xi. Например, учитывая любого -
Число floating-пункта, мы можем суммировать его мантиссу и образца как длинные целые числа, и
тогда примените кодекс мешанины для длинных целых чисел к результату.
Многочленные кодексы мешанины
Кодекс мешанины суммирования, описанный выше, не является хорошим выбором для характера
последовательности или другие объекты переменной длины, которые могут быть рассмотрены как кортежи формы (x0, x1..., xk-1), где заказ xi's значительный. Например, рассмотрите кодекс мешанины для строки символов s, который суммирует ценности ASCII знаков
378
Глава 9. Хеш-таблицы, Карты и Списки Пропуска в s. К сожалению, этот кодекс мешанины производит много нежелательных столкновений для com-групп в понедельник последовательностей. В частности «temp01» и «temp10» сталкиваются, используя эту функцию, также, как и «остановка», «вершины», «горшки» и «пятно». Лучший кодекс мешанины учитывает положения xi's. Альтернативный кодекс мешанины, который делает точно это, выбирает константу отличную от нуля, = 1, и использование
x0ak-1 + x1ak-2 + + xk-2a + xk-1
как кодовое обозначение мешанины. Математически разговор, это - просто полиномиал в, который берет компоненты (x0, x1..., xk-1) объекта x как его коэффициенты. Эта мешанина
кодекс поэтому называют многочленным кодексом мешанины. Правлением Хорнера (см. C-4.16 Осуществления), этот полиномиал может быть переписан как
xk-1 + (xk-2 + (xk-3 + + (x2 + (x1 + ax0)))).
Интуитивно, многочленный кодекс мешанины использует умножение константой как способ «создать место» для каждого компонента в кортеже ценностей, в то время как также preserv-луг характеристика предыдущих компонентов. Конечно, на типичной com-короткой клюшке для гольфа, оценивая полиномиал сделан, используя конечное представление долота для кодекса мешанины; следовательно, стоимость периодически overflows биты используется для целого числа. Так как мы больше интересуемся хорошим распространением объекта x относительно других ключей, мы просто игнорируем такой overflows. Однако, мы должны быть внимательными, что такие overflows происходят и выбирают константу так, чтобы у нее были некоторые биты младшего разряда, отличные от нуля, которые служат, чтобы сохранить часть информационного содержания, даже если мы находимся в overflow ситуации.
Мы сделали некоторые экспериментальные исследования, которые предполагают, что 33, 37, 39, и 41 хороший выбор для, работая со строками символов, которые являются английскими словами. Фактически, в списке более чем 50 000 английских слов сформировался как союз списков слов, предоставленных в двух вариантах Unix, мы нашли, что взятие, чтобы быть 33, 37, 39, или 41 произвело меньше чем семь столкновений в каждом случае! Много внедрений хеширования последовательности выбирают многочленную функцию мешанины, используя одну из этих констант для a, как кодекс мешанины по умолчанию. Ради скорости, однако, некоторые внедрения только применяют многочленную функцию мешанины к части знаков в длинных последовательностях.
Циклические кодексы мешанины изменения
Вариант многочленного кодекса мешанины заменяет умножение с циклическим
изменение частичной суммы определенным числом битов. Такая функция, относился к строкам символов в C ++, мог, например, быть похожим на следующий. Мы принимаем 32-битную длину слова целого числа, и мы принимаем доступ к функции hashCode (x) для целых чисел. Чтобы достигнуть 5-битного циклического изменения, мы формируемся «bitwise или» (см. Раздел 1.2) 5 битов, оставленных изменение и 27-битное правильное изменение. Как прежде, мы используем неподписанное целое число так, чтобы правильные изменения заполнились нолями.
9.2. Хеш-таблицы
интервал hashCode (случайная работа константы* p, интервал len)
неподписанный интервал h = 0;
для (интервал i = 0; я <len; я ++)
h = (h <<5) (h>> 27);
h + = (неподписанный интервал) p [я];
возвратите hashCode (интервал (h));
//крошите множество характера
//5-битное циклическое изменение//добавляет в следующем характере
379
Как с традиционным многочленным кодексом мешанины, используя циклическое изменение крошат кодекс пере -
печатные листы некоторая точная настройка. В этом случае мы должны мудро выбрать сумму, чтобы перейти для каждого нового характера.
Результаты эксперимента
В Таблице 9.1 мы показываем результаты некоторого пробега экспериментов в списке просто
25 000 английских слов, которые сравнивают число столкновений для различных сумм изменения.
Столкновения Столкновения
Изменение Общее количество Макс Изменение Общее количество Макс
0
23739
86
9
18
2
1
10517
21
10
277
3
2
2254
6
11
453
4
3
448
3
12
43
2
4
89
2
13
13
2
5
4
2
14
135
3
6
6
2
15
1082
6
7
14
2
16
8760
9
8
105
2
Таблица 9.1: Сравнение поведения столкновения для циклического варианта изменения поли - nomial крошит кодекс в применении к списку чуть более чем 25 000 английских слов. «Полная» колонка делает запись общего количества столкновений, и колонка «Макса» делает запись максимального количества столкновений для любого кодекса мешанины. Обратите внимание на то, что, с циклическим изменением 0, этот кодекс мешанины возвращается к тому, который просто суммирует все знаки.
Они и наши предыдущие эксперименты показывают, что, если мы выбираем наш постоянный a или нашу стоимость изменения мудро, тогда или многочленный кодекс мешанины или его вариант циклического изменения подходят для любого объекта, который может быть написан как кортеж (x0, x1..., xk-1),
380
Глава 9. Хеш-таблицы, Карты и Списки Пропуска, где заказ в вопросах кортежей. В частности обратите внимание на то, что использование изменения 5 или 6 особенно хорошо для английских слов. Кроме того, отметьте, как плохо простое добавление ценностей было бы без перемены (то есть, для изменения 0).
Хеширование количеств с плавающей запятой
На большинстве машин интервал типов и float - оба 32-битные количества. Тем не менее,
подход кастинга float переменной, чтобы напечатать интервал не произвел бы хорошую функцию мешанины, так как это усечет фракционную часть стоимости floating-пункта. В целях крошить, мы действительно не заботимся о стоимости числа. Достаточно рассматривать число как последовательность битов. Предполагая, что случайная работа сохранена как 8-битный байт, мы могли интерпретировать 32 бита float как множество характера с четырьмя элементами и 64 бита дважды как множество характера с восемью элементами. C ++ обеспечивает операцию, названную давать иное толкование броском, чтобы бросить между такими несвязанными типами. Этот бросок рассматривает количества как последовательность битов и не предпринимает попытки разумно преобразовать значение одного количества другому.
Например, мы могли проектировать функцию мешанины для float первым иным толкованием ему как множество знаков, и затем применение множества характера hashCode функция определило выше. Мы используем оператора sizeof, который возвращает число байтов в типе.
интервал hashCode (константа oat& x) //имеет h fl o в
интервал len = sizeof (x);
случайная работа константы* p = дает иное толкование броску <случайная работа константы*> (&x); возвратите hashCode (p, len);
Дайте иное толкование броскам, обычно не портативные операции, так как результат зависит
на кодировании особой машины типов как образец битов. В нашем случае мобильность не проблема, так как мы интересуемся только интерпретацией стоимости пункта floating как последовательность битов. Единственная собственность, которой мы требуем, состоит в том, что у float переменных с равными ценностями должна быть та же самая последовательность долота.
9.2.4 Функции сжатия
Кодекс мешанины для ключа k, как правило, не подходит для непосредственного использования с ведром
множество, потому что диапазон возможных кодексов мешанины для наших ключей, как правило, превышает ряд юридических индексов нашего ведра, выстраивает A. Таким образом, неправильно используя кодекс мешанины, поскольку индекс в наше множество ведра может привести к состоянию ошибки, или потому что индекс отрицателен, или это превышает способность A. Таким образом, как только мы определили кодекс мешанины целого числа для ключевого объекта k, есть все еще проблема отображения того целого числа
9.2. Хеш-таблицы 381
в диапазон [0, N- 1]. Этот шаг сжатия - второе действие что мешанина
функция выступает.
Метод подразделения
Одна простая функция сжатия, чтобы использовать
h (k) =|k модник Н, которого называют методом подразделения. Кроме того, если мы берем N, чтобы быть началом
число, тогда эта функция мешанины помогает «распространить» распределение крошивших ценностей. Действительно, если N не главный, есть более высокая вероятность, что образцы в распределении ключей будут повторены в распределении кодексов мешанины, таким образом вызывая столкновения.
Например, если мы крошим ключи200, 205, 210, 215, 220..., 600 к ведру
множество размера 100 использований метода подразделения, тогда каждый кодекс мешанины сталкивается с
три других. Но если этот тот же самый набор ключей так же крошится ко множеству ведра размера 101, то нет никаких столкновений. Если функция мешанины выбрана хорошо, она должна гарантировать, что вероятность двух различных ключей, крошивших к тому же самому ведру, 1/Н. Выбор N, чтобы быть простым числом не всегда достаточно, однако, потому что, если есть повторный образец значений ключа формы в + j для нескольких отличающихся, я, тогда есть все еще столкновения.
БЕЗУМНЫЙ метод
Более сложная функция сжатия, которая помогает устранить повторенный кусочек -
крачки в ряде ключей целого числа являются умножением, добавляют и делят (или «БЕЗУМНЫЙ») метод. В использовании этого метода мы определяем функцию сжатия как
h (k) =|ak + b модник Н, где N - простое число, и a и b, является неотрицательными целыми числами, беспорядочно выбранными
в то время, когда функция сжатия определена, так, чтобы модник Н = 0. Эта функция сжатия выбрана, чтобы устранить повторные образцы в наборе кодексов мешанины и получить нас ближе к наличию «хорошей» функции мешанины, то есть, одному наличию вероятности, что любые два различных ключа сталкиваются, 1/Н. Это хорошее поведение совпало бы с, если бы эти ключи были «брошены» в однородно наугад.
С функцией сжатия, такой как это, которое распространяет n целые числа справедливо равномерно
в диапазоне [0, N- 1], и отображение ключей в нашей карте к целым числам, мы имеем
эффективная функция мешанины. Вместе, такая функция мешанины и множество ведра определяют
ключевые компоненты внедрения хеш-таблицы карты ADT.
Но прежде чем мы можем дать детали того, как выполнить такие операции как находка, вставить и стереть, мы должны сначала решить вопрос о как мы, чтобы обращаться со столкновениями.
