Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Data Structures and Algorithms in C++ 2e (На ру...docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.37 Mб
Скачать

662 Глава 13. Алгоритмы графа

Проекты

P-13.1 Напишите класс, осуществляющий упрощенный граф ADT, который имеет только func-

tions, относящийся к ненаправленным графам и, не включает функции обновления, используя структуру матрицы смежности. Ваш класс должен включать довод «против» - structor, который берет две коллекции (например, последовательности) - коллекцию V из элементов вершины и коллекции E пар элементов вершины - и производит граф G, который представляют эти две коллекции.

P-13.2 Осуществите упрощенный граф ADT, описанный в использовании Проекта P-13.1

структура списка смежности.

P-13.3 Осуществите упрощенный граф ADT, описанный в использовании Проекта P-13.1

структура списка края.

P-13.4 Расширьте класс Проекта P-13.2 поддержать все функции графа

ADT (включая функции для направленных краев). P-13.5 Осуществите универсальное пересечение BFS, используя образец метода шаблона. P-13.6 Осуществите топологический алгоритм сортировки. P-13.7 Осуществите Флойда-Вошола переходный алгоритм закрытия. P-13.8 Проектируйте экспериментальное сравнение повторных пересечений DFS против

алгоритм Флойда-Вошола для вычисления переходного закрытия диграфа.

P-13.9 Осуществите алгоритм Дейкстры, предполагающий, что веса края - inte-

gers. P-13.10 Осуществите алгоритм Краскэла, предполагающий, что веса края - inte-

gers. P-13.11 Осуществите Чопорный-Jarn'k алгоритм, предполагающий, что веса края - ı

целые числа. P-13.12 Выполните экспериментальное сравнение двух из минимального охвата

алгоритмы дерева, обсужденные в этой главе (Kruskal и Prim-Jarn´k). De - ı

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

P-13.13 Один способ построить лабиринт запуски с n n сетка, таким образом, что каждая сетка

клетка ограничена четырьмя стенами длины единицы. Мы тогда удаляем две границы

стены длины единицы, чтобы представлять начало и конец. Для каждой остающейся стены длины единицы не на границе, мы назначаем случайную стоимость, и cre-съел граф G, названный двойным, таким, что каждая клетка сетки - вершина в G и есть край, присоединяющийся к вершинам для двух клеток, если и только если клетки разделяют общую стену. Вес каждого края - вес соответствующей стены. Мы строим лабиринт, находя минимальный промежуток - ning дерево T для G и удаляя все стены, соответствующие краям в T. Напишите программу, которая использует этот алгоритм, чтобы произвести лабиринты и затем

Примечания к главе 663

решает их. Минимально, Ваша программа должна потянуть лабиринт и, идеально, это должно визуализировать решение также.

P-13.14 Напишите программу, которая строит таблицы маршрутизации для узлов в компьютере

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

241.12.31.14: 241.12.31.15 241.12.31.18 241.12.31.19

который указывает на три сетевых узла, которые связаны с 241.12.31.14, то есть, три узла, которые являются одним перелетом далеко. Таблица маршрутизации для узла по адресу A является рядом пар (B, C), который указывает, что, к маршруту сообщение от до B, следующий узел, который пошлет в (на кратчайшем пути от до B), является C. Ваша программа должна произвести таблицу маршрутизации для каждого узла в сети учитывая входной список списков возможности соединения узла, каждый из которых введен в синтаксисе как показано выше, один за линию.

Примечания к главе

Глубина сначала ищет, метод - часть «фольклора» информатики, но Hopcroft и Тарьян [46, 94] являются теми, кто показал, насколько полезный этот алгоритм для решения нескольких различных проблем графа. Knuth [59] обсуждает топологическую проблему сортировки. Простой линейно-разовый алгоритм, который мы описываем для определения, если направленный граф сильно связан, происходит из-за Kosaraju. Алгоритм Флойда-Вошола появляется в статье Флойда [32] и основан на теореме Warshall [102]. Чтобы узнать о различных алгоритмах для рисования графов, пожалуйста, см. книжную главу Тамассии и Лиотты [92] и книга Ди Баттисты, Eades, Тамассии и Tollis [28]. Первый известный минимальный алгоритм дерева охвата происходит из-за Bar˚vka [8] и был издан в 1926. Чопорный-Jarn'k u ı

алгоритм был сначала издан на чешском языке Jarn´k [50] в 1930 и на английском языке в 1957 ı

Чопорный [85]. Kruskal издал его минимальный алгоритм дерева охвата в 1956 [62]. Читатель, заинтересованный дальнейшим исследованием истории минимальной проблемы дерева охвата, отнесен в статью Грэма и Ада [41]. Ток асимптотически самый быстрый минимальный алгоритм дерева охвата - рандомизированный алгоритм Каргера, Кляйна, и Тарьян [52], который управляет в O (m) ожидаемым временем.

Дейкстра [29] издал свой единственный источник, алгоритм кратчайшего пути в 1959. Читатель, заинтересованный дальнейшим исследованием алгоритмов графа, отнесен в книги Ahuja, Magnanti, и Orlin [6], Cormen, Лейсерсоном и Ривестом [24], Даже [31], Гиббонс [36], Mehlhorn [74] и Тарьян [95], и книжная глава ван Лиувена [98]. Случайно, продолжительность для Чопорного-Jarn'k алгоритма, и также тот из алгоритма Дейкстры, могут фактически быть im-ı

доказанный быть O (n регистрируют n + m), осуществляя очередь Q или с еще двух sophis-ticated структуры данных, «Куча Фибоначчи» [34] или с «Расслабленной Кучи» [30].

Эта страница преднамеренно оставила незаполненный

Глава

14

Управление памятью и B-деревья

Содержание

14.1 Управление памятью.................. 666

14.1.1 Распределение памяти в C ++.............. 669

14.1.2 Сборка мусора.................. 671

14.2 Внешняя память и кэширование............. 673

14.2.1 Иерархия памяти................ 673

14.2.2 Кэширование стратегий .................. 674

14.3 Внешний поиск и B-деревья............ 679

14.3.1 (a, b) Деревья...................... 680

14.3.2 B-деревья........................ 682

14.4 Сортировка внешней памяти................ 683

14.4.1 Многоканальное слияние.................. 684

14.5 Упражнения......................... 685

666

14.1