Этот цикличный ненаправленный граф может быть описан тремя списками {b, c}, {a, c}, {a, b}.

Список смежности — один из способов представления графа в виде коллекции списков вершин. Каждой вершине графа соответствует список, состоящий из «соседей» этой вершины.

Особенности реализации

править
Граф на картинке наверху имеет следующий список смежности:
a смежно к b, c
b смежно к a, c
c смежно к a, b

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

  • Реализация, предложенная Гвидо ван Россумом, использует хеш-таблицу для ассоциации каждой вершины со списком смежных вершин. Нет явного представления рёбер в этой структуре[1][2].
  • Кормен и другие предложили реализацию, в которой вершины представлены числовым индексом в массиве, в котором каждая ячейка массива ссылается на однонаправленный связанный список соседних вершин.[3]
  • Объектно-ориентированный список смежности, предложенный Гудричем[англ.] и Тамассией[англ.], содержит специальные классы вершин и рёбер. Каждый объект вершины содержит ссылку на коллекцию рёбер. Каждый объект ребра содержит ссылки на исходящую и входящую вершины.[4]

Сравнение с матрицей смежности

править
Сравнение с матрицей смежности
Операция Список смежности Матрица смежности
Проверка на наличие ребра (x,y)
Определение степени вершины
Использование памяти для разреженных графов
Вставка/удаление грани[источник не указан 3632 дня]
Обход графа

Ссылки

править
  1. Гвидо ван Россум. Python Patterns — Implementing Graphs (1998). Дата обращения: 4 июля 2016. Архивировано 25 июня 2016 года.
  2. Multimap at guava. Дата обращения: 4 июля 2016. Архивировано 1 февраля 2019 года.
  3. 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.
  4. Michael T. Goodrich and Roberto Tamassia. Algorithm Design: Foundations, Analysis, and Internet Examples (англ.). — John Wiley & Sons, 2002. — ISBN 0-471-38365-1.
  5. Steven Skiena[англ.]. Тhe Algorithm Design Manual (2nd ed.). — 2010. — С. 152 of section 5.2: Data Structures for Graphs. — ISBN 0-387-00163-8.

📚 Artikel Terkait di Wikipedia

Разработка алгоритмов

Дата обращения: 30 июня 2011 Algorithm Design Paradigms — Обзор Пола Данна из Университета Ливерпуля The Stony Brook Algorithm Repository от Стивена С. Скиена

Генетический алгоритм

Генети́ческий алгори́тм (англ. genetic algorithm) — эвристический алгоритм поиска, используемый для решения задач оптимизации и моделирования путём случайного

Свёртка списка

n).foldLeft(BigInt(1))(_ * _) Bird, Richard. Pearls of Functional Algorithm Design (англ.). — Cambrigde: University Press, 2010. — 277 p. — ISBN 978-0-521-51338-8

Линейное зондирование

0898715962. Goodrich M. T., Tamassia R. Section 6.3.3: Linear Probing // Algorithm Design and Applications (англ.). — Wiley, 2015. — P. 200–203. — ISBN 978-1-118-33591-8

Topcoder Open

название Topcoder Open. Включает в себя все 4 вида соревнований: Algorithm, Design, Development, Marathon Matches. В отборочных соревнованиях может принять

Основная теорема о рекуррентных соотношениях

theorem), pp. 73–90. (англ.) Michael T. Goodrich and Roberto Tamassia. Algorithm Design: Foundation, Analysis, and Internet Examples. Wiley, 2002. ISBN 0-471-38365-1

Скиена, Стивен

University Press, 2013. — ISBN 978-1107041370. Skiena, Steven. The Algorithm Design Manual. — 2nd ed. — Springer Science+Business Media, 2010. — ISBN 978-1-849-96720-4

Алгоритм умножения матриц

Algorithms. — MIT, 1999. Steven Skiena. Sorting and Searching // The Algorithm Design Manual. — Springer, 2008. — ISBN 978-1-84800-069-8. — doi:10.1007/978-1-84800-070-4_4