SlideShare a Scribd company logo
1 of 13
Основные структуры
данных

1. Стратегии реализации
графов и деревьев
Для реализации многих приложений выбор
структуры данных - единственное важное
решение: когда выбор сделан, разработка
алгоритмов не вызывает затруднений.
Выбор алгоритмов и структур данных тесно
взаимосвязан.
Одними из основных структур данных,
используемых в программировании, являются
графы.
Графы используются для:
• компьютерной обработки географических карт
(геоинформационные задачи);
• решения поисковых задач (например, в
организации поиска в сети Интернет);
• в системах автоматизированного
проектирования (например, при компоновке
микросхем на плате);
• для управления информацией (например, в
распределенных системах и сетях);
• в календарном планировании (например, с
помощью сетевых графиков);
• при компиляции программ;
• графы применяются и при решении других
задач.
Имеется два стандартных способа представления
графа G = (V, E): как набора списков смежных
вершин или как матрицы смежности. Оба
способа представления применимы как для
ориентированных, так и для неориентированных
графов.
Обычно более предпочтительно представление с
помощью списков смежности, поскольку оно
обеспечивает компактное представление
разреженных графов, т.е. таких, для которых |Е|
гораздо меньше |V|2. Представление при помощи
матрицы смежности предпочтительнее в случае
плотных графов, т.е. когда значение |Е| близко к |
V|2 или когда необходимо получить возможность
быстро определить, имеется ли ребро,
соединяющие две данные вершины.
Представление графа G = (V, E) в виде списка
смежности использует массив Adj из |V| списков,
по одному для каждой вершины из V. Для каждой
вершины u ∈ V список Adj[u] содержит все
вершины v, такие что (u,v) ∈ Е, т.е. Adj[u] состоит
из всех вершин, смежных с u в графе G.
На рис. 1 показано представление графа (а)
в виде списка смежности (б) и матрицы
смежности (в).
1

3
5

4

а) Граф

1
2
3
4
5

2
1
2
2
1

5
3
4
3
2

1

4
5
4

б) Список смежности

Рис. 1. Представление графа

5

2

3

4

5
1

0

1

0

0

1

2

1

0

1

1

1

3

0

1

0

1

0

4

2

0

1

0

5

1

1

1
1
0
0

1

в) Матрица смежности
Если G – ориентированный граф, то сумма длин всех
списков смежности равна |Е| поскольку ребру (u,v)
однозначно соответствует элемент v в списке Adj[u].
Если G – неориентированный граф, то сумма длин
всех списков смежности равна 2|Е|, поскольку ребро
(u,v), будучи неориентированным, появляется в
списке Adj[v] как u, и в списке Adj[u] – как v. Как для
ориентированных, так и для неориентированных
графов представление в виде списков требует объем
памяти, равный Θ(|V| + |Е|).
Списки смежности легко адаптируются для
представления взвешенных графов, т.е. графов, с
каждым ребром которых связан определенный вес,
обычно определяемый весовой функцией w: Е → R.
Например, пусть G = (V, Е) – взвешенный граф с
весовой функцией w. Вес w(u, v) ребра (u, v) ∈ Е
просто хранится вместе с вершиной v в списке
смежности u.
Потенциальный недостаток представления при
помощи списков смежности заключается в том,
что при этом нет более быстрого способа
определить, имеется ли данное ребро (u, v) в
графе, чем поиск v в списке Adj[u]. Этот
недостаток можно устранить ценой
использования асимптотически большего
количества памяти и представления графа с
помощью матрицы смежности.
Представление графа G = (V, Е) с помощью
матрицы смежности предполагает, что вершины
перенумерованы в некотором порядке числами
1,2,...,|V|. В таком случае представление графа G
с использованием матрицы смежности
представляет собой матрицу A = (аij) размером |
V|×|V|, такую что
1
 , (i, j ) ∈E ,
aij = 
0
 , (i, j ) ∉E.

Матрица смежности графа требует объем
памяти, равный Θ(|V|2), независимо от
количества ребер графа.
Например, если G = (V, Е) – взвешенный граф с
весовой функцией w, то вес w(u, v) ребра (u,
v) ∈ Е хранится в записи в строке u и столбце
v матрицы смежности. Если ребро не
существует, то в соответствующем элементе
матрицы хранится некоторое определенное
значение (например, 0 или wmax).
Кроме указанных представлений графа в
виде списка смежности и матрицы
смежности в некоторых задачах
используются и некоторые другие.
Например, иногда применяется матрица
инциденций. Матрицей инциденций
неориентированного графа G = (V, Е)
является матрица B = (bij) размером |V|×|
E|, такая что
1 если ребро j инцидентно вершине i,
bij = 
0 в противном случае.
Для представления ориентированного
графа элемент матрицы инциденций
определяется следующим образом:
− 1 если ребро j выходит из вершины i,

bij =  1 если ребро j входит в вершину i,
 0 в противном случае.


Очевидно, что все указанные представления
графов можно реализовать с помощью
массивов и/или указателей.
При разработке программ часто
применяются графы определенного вида –
деревья.
Существуют различные типы деревьев:
• деревья,
• корневые деревья,
• упорядоченные деревья,
• M-арные деревья,
• бинарные деревья.
Для представления деревьев также можно использовать
список смежности и матрицу смежности. Чаще
используют связные списки.
Например, бинарное дерево (рис. 2) можно представить
в виде списка вершин, каждая из которых ссылается
на две дочерние вершины (левую и правую). Список
начинается с корня. Любое другое корневое дерево
можно представить в виде бинарного дерева.
Например, M-арное дерево можно представить в виде
бинарного, в котором каждая вершина ссылается на
первого потомка и следующего брата.
1

1
2

4

2

3
5

6

7

4

3
5

6

7

а) Бинарное
б) Ссылочная структура
дерево
Рис. 2. Представление
бинарного дерева

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

More Related Content

Viewers also liked

лекция№28
лекция№28лекция№28
лекция№28
student_kai
 
лекция№14
лекция№14лекция№14
лекция№14
student_kai
 
лекция 7 управление конфигурациями-ч1
лекция 7 управление конфигурациями-ч1лекция 7 управление конфигурациями-ч1
лекция 7 управление конфигурациями-ч1
student_kai
 
физика горения08
физика горения08физика горения08
физика горения08
student_kai
 
лекция 3. программирование циклов
лекция 3. программирование цикловлекция 3. программирование циклов
лекция 3. программирование циклов
student_kai
 
лекция 10 управление изменениями-ч2
лекция 10 управление изменениями-ч2лекция 10 управление изменениями-ч2
лекция 10 управление изменениями-ч2
student_kai
 
лабораторная работа №2
лабораторная работа №2лабораторная работа №2
лабораторная работа №2
student_kai
 
физика горения10
физика горения10физика горения10
физика горения10
student_kai
 
лекция № 6
лекция № 6лекция № 6
лекция № 6
student_kai
 
презентация лабораторных работ. часть 1
презентация лабораторных работ. часть 1презентация лабораторных работ. часть 1
презентация лабораторных работ. часть 1
student_kai
 
ст лекция1
ст лекция1ст лекция1
ст лекция1
student_kai
 
кин лекция 10
кин лекция 10кин лекция 10
кин лекция 10
student_kai
 
лекция 15 управление финансами-ч2
лекция 15 управление финансами-ч2лекция 15 управление финансами-ч2
лекция 15 управление финансами-ч2
student_kai
 
лекция№21
лекция№21лекция№21
лекция№21
student_kai
 

Viewers also liked (20)

лекция№28
лекция№28лекция№28
лекция№28
 
лекция№14
лекция№14лекция№14
лекция№14
 
лекция 7 управление конфигурациями-ч1
лекция 7 управление конфигурациями-ч1лекция 7 управление конфигурациями-ч1
лекция 7 управление конфигурациями-ч1
 
Euph doc
Euph docEuph doc
Euph doc
 
физика горения08
физика горения08физика горения08
физика горения08
 
лекция 3. программирование циклов
лекция 3. программирование цикловлекция 3. программирование циклов
лекция 3. программирование циклов
 
лекция 10 управление изменениями-ч2
лекция 10 управление изменениями-ч2лекция 10 управление изменениями-ч2
лекция 10 управление изменениями-ч2
 
п12
п12п12
п12
 
лабораторная работа №2
лабораторная работа №2лабораторная работа №2
лабораторная работа №2
 
лекция 11
лекция 11лекция 11
лекция 11
 
физика горения10
физика горения10физика горения10
физика горения10
 
лекция № 6
лекция № 6лекция № 6
лекция № 6
 
лекция 21
лекция 21лекция 21
лекция 21
 
презентация лабораторных работ. часть 1
презентация лабораторных работ. часть 1презентация лабораторных работ. часть 1
презентация лабораторных работ. часть 1
 
ст лекция1
ст лекция1ст лекция1
ст лекция1
 
кин лекция 10
кин лекция 10кин лекция 10
кин лекция 10
 
лек1
лек1лек1
лек1
 
лекция 15 управление финансами-ч2
лекция 15 управление финансами-ч2лекция 15 управление финансами-ч2
лекция 15 управление финансами-ч2
 
лек20
лек20лек20
лек20
 
лекция№21
лекция№21лекция№21
лекция№21
 

Similar to лекция 12

графы дженжеруха
графы дженжерухаграфы дженжеруха
графы дженжеруха
Gala Timofeeva
 
Лекция 8: Графы. Обходы графов
Лекция 8: Графы. Обходы графовЛекция 8: Графы. Обходы графов
Лекция 8: Графы. Обходы графов
Mikhail Kurnosov
 
1табличные и графические информационные модели
1табличные и графические информационные модели1табличные и графические информационные модели
1табличные и графические информационные модели
m00nster
 
Лекция №12. Графы: представление, обходы, топологическая сортировка. Предмет ...
Лекция №12. Графы: представление, обходы, топологическая сортировка. Предмет ...Лекция №12. Графы: представление, обходы, топологическая сортировка. Предмет ...
Лекция №12. Графы: представление, обходы, топологическая сортировка. Предмет ...
Nikolay Grebenshikov
 
Лекция 8: Графы. Обходы графов
Лекция 8: Графы. Обходы графовЛекция 8: Графы. Обходы графов
Лекция 8: Графы. Обходы графов
Mikhail Kurnosov
 
Формирование технологической и информационной компетентности школьников при и...
Формирование технологической и информационной компетентности школьников при и...Формирование технологической и информационной компетентности школьников при и...
Формирование технологической и информационной компетентности школьников при и...
balin777
 

Similar to лекция 12 (12)

графы дженжеруха
графы дженжерухаграфы дженжеруха
графы дженжеруха
 
Основы теории графов - I
Основы теории графов - IОсновы теории графов - I
Основы теории графов - I
 
создание диаграмм мастер класс
создание диаграмм мастер класссоздание диаграмм мастер класс
создание диаграмм мастер класс
 
Лекция 8: Графы. Обходы графов
Лекция 8: Графы. Обходы графовЛекция 8: Графы. Обходы графов
Лекция 8: Графы. Обходы графов
 
1табличные и графические информационные модели
1табличные и графические информационные модели1табличные и графические информационные модели
1табличные и графические информационные модели
 
Диаграммы в Microsoft Office Excel
Диаграммы в Microsoft Office ExcelДиаграммы в Microsoft Office Excel
Диаграммы в Microsoft Office Excel
 
Лекция 8. Графы. Обходы графов
Лекция 8. Графы. Обходы графовЛекция 8. Графы. Обходы графов
Лекция 8. Графы. Обходы графов
 
Лекция №12. Графы: представление, обходы, топологическая сортировка. Предмет ...
Лекция №12. Графы: представление, обходы, топологическая сортировка. Предмет ...Лекция №12. Графы: представление, обходы, топологическая сортировка. Предмет ...
Лекция №12. Графы: представление, обходы, топологическая сортировка. Предмет ...
 
Лекция 8: Графы. Обходы графов
Лекция 8: Графы. Обходы графовЛекция 8: Графы. Обходы графов
Лекция 8: Графы. Обходы графов
 
лекция 6
лекция 6лекция 6
лекция 6
 
Формирование технологической и информационной компетентности школьников при и...
Формирование технологической и информационной компетентности школьников при и...Формирование технологической и информационной компетентности школьников при и...
Формирование технологической и информационной компетентности школьников при и...
 
9893
98939893
9893
 

More from student_kai

презентация
презентацияпрезентация
презентация
student_kai
 
презентации продолжение банкета
презентации продолжение банкетапрезентации продолжение банкета
презентации продолжение банкета
student_kai
 
основы программирования на языке C
основы программирования на языке Cосновы программирования на языке C
основы программирования на языке C
student_kai
 
презентация курсовой работы
презентация курсовой работыпрезентация курсовой работы
презентация курсовой работы
student_kai
 
лекция№34
лекция№34лекция№34
лекция№34
student_kai
 
лекция№32
лекция№32лекция№32
лекция№32
student_kai
 
лекция№33
лекция№33лекция№33
лекция№33
student_kai
 
лекция№31
лекция№31лекция№31
лекция№31
student_kai
 
лекция№30
лекция№30лекция№30
лекция№30
student_kai
 
лекция№29
лекция№29лекция№29
лекция№29
student_kai
 
лекция№27
лекция№27лекция№27
лекция№27
student_kai
 
лекция№26
лекция№26лекция№26
лекция№26
student_kai
 
лекция№25
лекция№25лекция№25
лекция№25
student_kai
 
лекция№25
лекция№25лекция№25
лекция№25
student_kai
 
лекция№24
лекция№24лекция№24
лекция№24
student_kai
 
лекция№23
лекция№23лекция№23
лекция№23
student_kai
 
лекция№22
лекция№22лекция№22
лекция№22
student_kai
 
лекция№20
лекция№20лекция№20
лекция№20
student_kai
 
лекция№19
лекция№19лекция№19
лекция№19
student_kai
 
лекция№18
лекция№18лекция№18
лекция№18
student_kai
 

More from student_kai (20)

презентация
презентацияпрезентация
презентация
 
презентации продолжение банкета
презентации продолжение банкетапрезентации продолжение банкета
презентации продолжение банкета
 
основы программирования на языке C
основы программирования на языке Cосновы программирования на языке C
основы программирования на языке C
 
презентация курсовой работы
презентация курсовой работыпрезентация курсовой работы
презентация курсовой работы
 
лекция№34
лекция№34лекция№34
лекция№34
 
лекция№32
лекция№32лекция№32
лекция№32
 
лекция№33
лекция№33лекция№33
лекция№33
 
лекция№31
лекция№31лекция№31
лекция№31
 
лекция№30
лекция№30лекция№30
лекция№30
 
лекция№29
лекция№29лекция№29
лекция№29
 
лекция№27
лекция№27лекция№27
лекция№27
 
лекция№26
лекция№26лекция№26
лекция№26
 
лекция№25
лекция№25лекция№25
лекция№25
 
лекция№25
лекция№25лекция№25
лекция№25
 
лекция№24
лекция№24лекция№24
лекция№24
 
лекция№23
лекция№23лекция№23
лекция№23
 
лекция№22
лекция№22лекция№22
лекция№22
 
лекция№20
лекция№20лекция№20
лекция№20
 
лекция№19
лекция№19лекция№19
лекция№19
 
лекция№18
лекция№18лекция№18
лекция№18
 

лекция 12

  • 1. Основные структуры данных 1. Стратегии реализации графов и деревьев
  • 2. Для реализации многих приложений выбор структуры данных - единственное важное решение: когда выбор сделан, разработка алгоритмов не вызывает затруднений. Выбор алгоритмов и структур данных тесно взаимосвязан. Одними из основных структур данных, используемых в программировании, являются графы. Графы используются для: • компьютерной обработки географических карт (геоинформационные задачи); • решения поисковых задач (например, в организации поиска в сети Интернет); • в системах автоматизированного проектирования (например, при компоновке микросхем на плате);
  • 3. • для управления информацией (например, в распределенных системах и сетях); • в календарном планировании (например, с помощью сетевых графиков); • при компиляции программ; • графы применяются и при решении других задач. Имеется два стандартных способа представления графа G = (V, E): как набора списков смежных вершин или как матрицы смежности. Оба способа представления применимы как для ориентированных, так и для неориентированных графов.
  • 4. Обычно более предпочтительно представление с помощью списков смежности, поскольку оно обеспечивает компактное представление разреженных графов, т.е. таких, для которых |Е| гораздо меньше |V|2. Представление при помощи матрицы смежности предпочтительнее в случае плотных графов, т.е. когда значение |Е| близко к | V|2 или когда необходимо получить возможность быстро определить, имеется ли ребро, соединяющие две данные вершины. Представление графа G = (V, E) в виде списка смежности использует массив Adj из |V| списков, по одному для каждой вершины из V. Для каждой вершины u ∈ V список Adj[u] содержит все вершины v, такие что (u,v) ∈ Е, т.е. Adj[u] состоит из всех вершин, смежных с u в графе G.
  • 5. На рис. 1 показано представление графа (а) в виде списка смежности (б) и матрицы смежности (в). 1 3 5 4 а) Граф 1 2 3 4 5 2 1 2 2 1 5 3 4 3 2 1 4 5 4 б) Список смежности Рис. 1. Представление графа 5 2 3 4 5 1 0 1 0 0 1 2 1 0 1 1 1 3 0 1 0 1 0 4 2 0 1 0 5 1 1 1 1 0 0 1 в) Матрица смежности
  • 6. Если G – ориентированный граф, то сумма длин всех списков смежности равна |Е| поскольку ребру (u,v) однозначно соответствует элемент v в списке Adj[u]. Если G – неориентированный граф, то сумма длин всех списков смежности равна 2|Е|, поскольку ребро (u,v), будучи неориентированным, появляется в списке Adj[v] как u, и в списке Adj[u] – как v. Как для ориентированных, так и для неориентированных графов представление в виде списков требует объем памяти, равный Θ(|V| + |Е|). Списки смежности легко адаптируются для представления взвешенных графов, т.е. графов, с каждым ребром которых связан определенный вес, обычно определяемый весовой функцией w: Е → R. Например, пусть G = (V, Е) – взвешенный граф с весовой функцией w. Вес w(u, v) ребра (u, v) ∈ Е просто хранится вместе с вершиной v в списке смежности u.
  • 7. Потенциальный недостаток представления при помощи списков смежности заключается в том, что при этом нет более быстрого способа определить, имеется ли данное ребро (u, v) в графе, чем поиск v в списке Adj[u]. Этот недостаток можно устранить ценой использования асимптотически большего количества памяти и представления графа с помощью матрицы смежности. Представление графа G = (V, Е) с помощью матрицы смежности предполагает, что вершины перенумерованы в некотором порядке числами 1,2,...,|V|. В таком случае представление графа G с использованием матрицы смежности представляет собой матрицу A = (аij) размером | V|×|V|, такую что
  • 8. 1  , (i, j ) ∈E , aij =  0  , (i, j ) ∉E. Матрица смежности графа требует объем памяти, равный Θ(|V|2), независимо от количества ребер графа. Например, если G = (V, Е) – взвешенный граф с весовой функцией w, то вес w(u, v) ребра (u, v) ∈ Е хранится в записи в строке u и столбце v матрицы смежности. Если ребро не существует, то в соответствующем элементе матрицы хранится некоторое определенное значение (например, 0 или wmax).
  • 9. Кроме указанных представлений графа в виде списка смежности и матрицы смежности в некоторых задачах используются и некоторые другие. Например, иногда применяется матрица инциденций. Матрицей инциденций неориентированного графа G = (V, Е) является матрица B = (bij) размером |V|×| E|, такая что 1 если ребро j инцидентно вершине i, bij =  0 в противном случае.
  • 10. Для представления ориентированного графа элемент матрицы инциденций определяется следующим образом: − 1 если ребро j выходит из вершины i,  bij =  1 если ребро j входит в вершину i,  0 в противном случае.  Очевидно, что все указанные представления графов можно реализовать с помощью массивов и/или указателей. При разработке программ часто применяются графы определенного вида – деревья.
  • 11. Существуют различные типы деревьев: • деревья, • корневые деревья, • упорядоченные деревья, • M-арные деревья, • бинарные деревья. Для представления деревьев также можно использовать список смежности и матрицу смежности. Чаще используют связные списки. Например, бинарное дерево (рис. 2) можно представить в виде списка вершин, каждая из которых ссылается на две дочерние вершины (левую и правую). Список начинается с корня. Любое другое корневое дерево можно представить в виде бинарного дерева. Например, M-арное дерево можно представить в виде бинарного, в котором каждая вершина ссылается на первого потомка и следующего брата.
  • 12. 1 1 2 4 2 3 5 6 7 4 3 5 6 7 а) Бинарное б) Ссылочная структура дерево Рис. 2. Представление бинарного дерева Реализовать связный список для представления бинарного дерева можно с помощью указателей и/или массивов, имеющихся в выбранном языке программирования.
  • 13. 2. Вопросы эффективности для структур данных Эффективность конкретной структуры данных зависит от задачи и ресурсов, имеющихся для ее решения. Если в графе много вершин, причем каждая из них связана лишь с небольшим количеством других вершин, список смежности оказывается выгоднее, поскольку он занимает меньше места, а длина просматриваемых списков вершин невелика. Если же число вершин в графе мало, то лучше воспользоваться матрицей смежности: она будет небольшой, и даже потери при хранении в матричном виде разреженного графа будут незначительны. Если же в графе много ребер и он почти полный, то матрица смежности всегда является лучшим способом хранения графа. Однако если рассматриваемый граф является деревом, то с учетом того, что каждая вершина может быть связана только со своими родителем и потомками, то и список смежности и матрица смежности неэкономично расходуют память. В этом случае лучше воспользоваться ссылочной структурой.