Справочник от Автор24
Найди эксперта для помощи в учебе
Найти эксперта
+2

Информационные модели на графах

Математические основы моделей на графах

Граф представляет собой совокупность вершин, связанных линиями. Вершины могут обозначаться овалами, прямоугольниками, точками и т.п.

Пример графа. Автор24 — интернет-биржа студенческих работ

Рисунок 1. Пример графа. Автор24 — интернет-биржа студенческих работ

Определение 1

Направленная линия (со стрелкой) называется дугой, ненаправленная - ребром графа. Линия, выходящая из некоторой вершины и возвращающаяся в нее же, называется петлей.

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

Ориентированным называется граф, вершины которого соединены дугами. Взвешенным, - если его вершины, ребра или дуги характеризуются весом (дополнительной количественной информацией).

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

Древовидные графы

Частным случаем моделей-графов являются иерархические (древовидные) структуры.

Определение 2

Иерархией называется расположение элементов целого в порядке от высшего к низшему. Отсчет ведется от единого элемента, называемого корневым.

Для систем, описываемых такими структурами, характерны такие отношения, как «является разновидностью», «входит в состав» и другие выражения подчиненности.

Примером иерархической структуры может служить любое коммерческое предприятие, где установлены отношения подчиненности "директор — заместители", "заместители - начальники отделов", "начальники отделов - исполнители".

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

«Информационные модели на графах» 👇
Помощь эксперта по теме работы
Найти эксперта
Решение задач от ИИ за 2 минуты
Решить задачу
Найди решение своей задачи среди 1 000 000 ответов
Найти

Вершины древовидного графа состоят друг с другом в отношениях «предок - потомок». Любая вершина дерева (кроме корня) имеет только одного предка, т.е. объект, входящий в один из классов верхнего уровня. Любая вершина древовидного графа может указывать на несколько потомков. Этот принцип отношений называется «один ко многим». Вершины, не имеющие вершин-потомков, называются листьями.

Иерархию легко изобразить в форме «лестницы», т.е. многоуровневого списка. Чем дальше от корня уровень иерархии, тем правее находится соответствующий уровень списка. В качестве примера можно привести зоологическую классификацию:

Классификация биологических видов. Автор24 — интернет-биржа студенческих работ

Рисунок 2. Классификация биологических видов. Автор24 — интернет-биржа студенческих работ

Связи между членами семьи также удобно изображать с помощью древовидной схемы. Такой граф называется родословным деревом.

По иерархическому принципу построена и система хранения файлов на жестком диске компьютера, где файлы распределены по папкам (каталогам, директориям). Папки, в свою очередь, принадлежат другим папкам и т.д. Корневая вершина этой иерархии в среде Windows называется "Мой компьютер". Ей принадлежат локальные диски и сетевые ресурсы (второй уровень иерархии). Папки начинаются с третьего уровня. Дальнейшая степень вложенности (количество уровней иерархии) ограничена достаточно большим числом, пригодным для большинства практических задач.

Иерархия папок в среде Windows. Автор24 — интернет-биржа студенческих работ

Рисунок 3. Иерархия папок в среде Windows. Автор24 — интернет-биржа студенческих работ

Пути к файлам записывают особым образом. Уровни иерархии разделяются спецсимволами «\» (в среде Windows), «/» (в среде Unix) или «:» (в среде MacOS), например (для Windows):

./Современные языки программирования/Most-popular-programming-languages.png
./Современные языки программирования/README.md
./Современные языки программирования/800px-Цифровой_код_ЭВМ_«Минск-22».jpg
./Современные языки программирования/shot00.png
./Электронная почта/virus.png
./Электронная почта/README.md
./Электронная почта/письмо.png
./Электронная почта/доставка электронной почты.png
./Создание web-страниц, введение в стандарты HTML и PHP/code-2.png
./Создание web-страниц, введение в стандарты HTML и PHP/web-server.jpg
./Создание web-страниц, введение в стандарты HTML и PHP/README.md
./Создание web-страниц, введение в стандарты HTML и PHP/code-3.png
./Создание web-страниц, введение в стандарты HTML и PHP/code-1.png
./Создание web-страниц, введение в стандарты HTML и PHP/html example.png
./Информационные системы и технологии/README.md
./Информационные системы и технологии/vuz-information-system_1.jpg
./Информационные системы и технологии/каталоги.jpg
./Информационные системы и технологии/рынок it.png

Задача обхода вершин графа

С моделями-графами связана задача обхода его вершин, которая решается при проектировании реальных систем. Например, часто требуется найти кратчайший проезжий путь на местности. Такую задачу можно описать в виде графа, где вершинами буду населенные пункты, а ребрами - связывающие их дороги.

Существует множество способов решения таких задач и готовых компьютерных алгоритмов. В общем случае для каждой не пройденной вершины находят все не пройденные смежные вершины и повторяют поиск для них. Пройденные вершины запоминаются и последовательно исключаются из обработки. Пошаговое представление выглядит так:

  1. выбирается любая вершина из не пройденных (обозначим ее как u);
  2. запускается функция поиска find(u);
  3. вершина u помечается как пройденная.

Для каждой не пройденной вершины, смежной с u (обозначим ее v) запускается find(v), затем повторяются шаги 1 и 2, пока все вершины не будут обработаны.

Пример реализации:

// функция принимает граф G 
// с количеством вершин n 
// и выполняет обход в глубину во всем графе. 

function findAll(G[n]: Graph):
 // создаём массив посещённых вершины 
 // длины n, заполненный false изначально
 visited = array[n, false]
 
 function find(u: int): 
 visited[u] = true
 for v: (u, v) in G 
 if not visited[v] 
 find(v)

 for i = 1 to n 
 if not visited[i] 
 find(i)

Обход графа - пример рекурсии, когда функция многократно вызывается изнутри себя самой.

Дата написания статьи: 20.02.2019
Найди решение своей задачи среди 1 000 000 ответов
Крупнейшая русскоязычная библиотека студенческих решенных задач
Все самое важное и интересное в Telegram

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

Перейти в Telegram Bot