mirror of
https://github.com/krahets/hello-algo.git
synced 2026-07-23 03:46:05 +00:00
build
This commit is contained in:
@@ -40,13 +40,13 @@ $$
|
||||
|
||||
<p align="center"> Рисунок 9-3 Связный и несвязный графы </p>
|
||||
|
||||
Мы также можем добавить к ребрам переменную "вес" и получить показанный ниже <u>взвешенный граф (weighted graph)</u>. Например, в мобильных играх вроде Honor of Kings система рассчитывает "близость" между игроками по времени совместной игры, и такую сеть близости можно представить взвешенным графом.
|
||||
Мы также можем добавить к ребрам переменную «вес» и получить <u>взвешенный граф (weighted graph)</u>, как показано на рисунке 9-4. Например, в мобильных играх вроде Honor of Kings система рассчитывает «близость» между игроками по времени совместной игры, и такую сеть близости можно представить взвешенным графом.
|
||||
|
||||
{ class="animation-figure" }
|
||||
|
||||
<p align="center"> Рисунок 9-4 Взвешенный и невзвешенный графы </p>
|
||||
|
||||
Со структурой данных "граф" связаны следующие основные термины.
|
||||
Со структурой данных «граф» связаны следующие основные термины.
|
||||
|
||||
- <u>Смежность (adjacency)</u>: если между двумя вершинами существует ребро, то такие вершины называются смежными. На рисунке 9-4 с вершиной 1 смежны вершины 2, 3 и 5.
|
||||
- <u>Путь (path)</u>: последовательность ребер от вершины A до вершины B называется путем из A в B. На рисунке 9-4 последовательность ребер 1-5-2-4 является одним из путей от вершины 1 к вершине 4.
|
||||
@@ -54,13 +54,13 @@ $$
|
||||
|
||||
## 9.1.2 Представление графа
|
||||
|
||||
Распространенные способы представления графа включают "матрицу смежности" и "список смежности". Ниже для примера рассматривается неориентированный граф.
|
||||
Распространенные способы представления графа включают «матрицу смежности» и «список смежности». Ниже для примера рассматривается неориентированный граф.
|
||||
|
||||
### 1. Матрица смежности
|
||||
|
||||
Пусть число вершин графа равно $n$ ; тогда <u>матрица смежности (adjacency matrix)</u> использует матрицу размера $n \times n$ для представления графа, где каждая строка и каждый столбец соответствуют вершине, а элементы матрицы показывают наличие или отсутствие ребра.
|
||||
Пусть число вершин графа равно $n$. Тогда <u>матрица смежности (adjacency matrix)</u> использует матрицу размера $n \times n$ для представления графа, где каждая строка и каждый столбец соответствуют вершине, а элементы матрицы показывают наличие или отсутствие ребра.
|
||||
|
||||
Как показано на рисунке 9-5, обозначим матрицу смежности через $M$ , а список вершин через $V$ ; тогда элемент матрицы $M[i, j] = 1$ означает наличие ребра между вершинами $V[i]$ и $V[j]$ , а элемент $M[i, j] = 0$ означает отсутствие ребра.
|
||||
Как показано на рисунке 9-5, обозначим матрицу смежности через $M$ , а список вершин через $V$. Тогда элемент матрицы $M[i, j] = 1$ означает наличие ребра между вершинами $V[i]$ и $V[j]$ , а элемент $M[i, j] = 0$ означает отсутствие ребра.
|
||||
|
||||
{ class="animation-figure" }
|
||||
|
||||
@@ -84,7 +84,7 @@ $$
|
||||
|
||||
Список смежности хранит только реально существующие ребра, а общее число ребер обычно значительно меньше $n^2$ , поэтому он лучше экономит память. Однако для поиска ребра в списке смежности требуется обходить список, поэтому по времени он уступает матрице смежности.
|
||||
|
||||
Если посмотреть на рисунок 9-6, можно заметить, что **структура списка смежности очень похожа на цепную адресацию в хеш-таблицах, поэтому здесь можно использовать похожие методы оптимизации эффективности**. Например, если список слишком длинный, его можно преобразовать в AVL-дерево или красно-черное дерево, чтобы снизить временную сложность с $O(n)$ до $O(\log n)$ ; также список можно преобразовать в хеш-таблицу, чтобы довести временную сложность до $O(1)$ .
|
||||
Как видно на рисунке 9-6, **структура списка смежности очень похожа на цепную адресацию в хеш-таблицах, поэтому здесь можно использовать похожие методы оптимизации эффективности**. Например, если список слишком длинный, его можно преобразовать в AVL-дерево или красно-черное дерево, чтобы снизить временную сложность с $O(n)$ до $O(\log n)$. Также список можно преобразовать в хеш-таблицу, чтобы довести временную сложность до $O(1)$ .
|
||||
|
||||
## 9.1.3 Типичные применения графов
|
||||
|
||||
|
||||
Reference in New Issue
Block a user