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

13.2. Структуры данных для графов 603

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

Структура списка смежности для графа G добавляет дополнительную информацию к списку края

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

• Объект вершины v считает ссылку на коллекцию I (v), названной уровнем

коллекция v, элементы которого хранят ссылки на инцидент краев на v.

• Объект края для края e с вершинами конца v и w держит ссылки на

положения (или записи) связались с краем e в коллекциях уровня

Я (v) и я (w).

Традиционно, коллекция уровня I (v) для вершины v является списком, который является, почему мы называем этот способ представлять граф структура списка смежности. Структура списка смежности обеспечивает прямой доступ и от краев до вершин и от вершин до их краев инцидента. Мы иллюстрируем структуру списка смежности графа в рисунке 13.4.

(a)

(b)

Рисунок 13.4: (a) граф G. (b) Схематическое представление смежности перечисляют struc-

ture G. Как в рисунке 13.3, мы визуализируем элементы коллекций с именами.

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

Исполнение структуры списка смежности

Все функции графа ADT, который может быть осуществлен со структурой списка края в O (1) время, могут также быть осуществлены в O (1) время со структурой списка смежности, используя по существу те же самые алгоритмы. Кроме того, способность к про - смотри доступ между вершинами и краями в обоих направлениях позволяет нам ускорять исполнение многих функций графа при помощи структуры списка смежности вместо структуры списка края. Таблица 13.2 суммирует исполнение объявления - jacency внедрение структуры списка графа, предполагая, что коллекции V и E и коллекции уровня вершин все осуществлены с вдвойне связанными списками. Для вершины v, пространство, использованное коллекцией уровня v, пропорционально степени v, то есть, это - O (градус (v)). Таким образом, Суждением 13.6, пространство, использованное структурой списка смежности, является O (n + m).

Операция Время

вершины O (n)

края O (m)

endVertices, напротив O (1)

v.incidentEdges () O (градус (v))

v.isAdjacentTo (w) O (минута (градус (v), градус (w))

isIncidentOn O (1) insertVertex, insertEdge, eraseEdge, O (1)

eraseVertex (v) O (градус (v))

Таблица 13.2: Продолжительность функций графа, осуществленного с adja-cency, перечисляет структуру. Использованное пространство является O (n + m), где n - число вершин, и m - число краев.

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

• Вершины методов () и края () осуществлены при помощи iterators для V

и E, соответственно, чтобы перечислить элементы списков.

• Метод v.incidentEdges () занимает время пропорциональный числу инцидента

вершины v, то есть, O (градус (v)) время.

• Метод v.isAdjacentTo (w) может быть выполнен, осмотрев любого inci-

коллекция танца v или тот из w. Выбирая меньшие из этих двух, мы добираемся

O (минута (градус (v), градус (w))) продолжительность.

• Метод eraseVertex (v) берет O (градус (v)) время.