Список смежности
Текущая версия страницы пока не проверялась опытными участниками и может значительно отличаться от версии, проверенной 26 ноября 2020 года; проверки требуют 2 правки.
Список смежности — один из способов представления графа в виде коллекции списков вершин. Каждой вершине графа соответствует список, состоящий из «соседей» этой вершины.
Особенности реализацииПравить
Граф на картинке наверху имеет следующий список смежности: | ||
a | смежно к | b, c |
b | смежно к | a, c |
c | смежно к | a, b |
Есть несколько вариаций представления графа списком смежности, отличающихся особенностями ассоциации вершин и коллекциями соседей, реализацией коллекций, включаются ли рёбра и вершины в коллекции соседей или только вершины, способами представления рёбер и вершин.
- Реализация, предложенная Гвидо ван Россумом, использует хеш-таблицу для ассоциации каждой вершины со списком смежных вершин. Нет явного представления рёбер в этой структуре[1][2].
- Кормен и другие предложили реализацию, в которой вершины представлены числовым индексом в массиве, в котором каждая ячейка массива ссылается на однонаправленный связанный список соседних вершин.[3]
- Объектно-ориентированный список смежности, предложенный Гудричем (англ.) (рус. и Тамассией (англ.) (рус., содержит специальные классы вершин и рёбер. Каждый объект вершины содержит ссылку на коллекцию рёбер. Каждый объект ребра содержит ссылки на исходящую и входящую вершины.[4]
Сравнение с матрицей смежностиПравить
Сравнение с матрицей смежности | ||
Операция | Список смежности | Матрица смежности |
Проверка на наличие ребра (x,y) | ||
Определение степени вершины | ||
Использование памяти для разреженных графов | ||
Вставка/удаление грани[источник не указан 2401 день] | ||
Обход графа |
СсылкиПравить
- ↑ Гвидо ван Россум. Python Patterns — Implementing Graphs (неопр.) (1998). Дата обращения: 4 июля 2016. Архивировано 25 июня 2016 года.
- ↑ Multimap at guava (неопр.). Дата обращения: 4 июля 2016. Архивировано 1 февраля 2019 года.
- ↑ Thomas H. Cormen; Charles E. Leiserson; Ronald L. Rivest; Clifford Stein. Introduction to Algorithms, Second Edition (англ.). — MIT Press and McGraw-Hill, 2001. — P. 527—529 of section 22.1: Representations of graphs. — ISBN 0-262-03293-7.
- ↑ Michael T. Goodrich and Roberto Tamassia. Algorithm Design: Foundations, Analysis, and Internet Examples (англ.). — John Wiley & Sons, 2002. — ISBN 0-471-38365-1.
- ↑ Steven Skiena (англ.) (рус.. Тhe Algorithm Design Manual (2nd ed.) (неопр.). — 2010. — С. 152 of section 5.2: Data Structures for Graphs. — ISBN 0-387-00163-8.