Графы и их представление

Понятно [10] несколько представлений графа G=(V, E), где V – огромное количество вершин, Е - огромное количество ребер. Одно из их - матрица смежностей, т. е. матрица А размера |V|*|V|, состоящая из 0 и 1, в какой A[i, j]=1 и тогда только тогда, когда есть дуга из узла i в узел j. Представление в Графы и их представление виде матрицы смежности комфортно для тех алгоритмов на графах, для которых нередко необходимо знать, есть ли в графе данная дуга, ибо время, нужное для определения наличия дуги, фиксировано и не находится в зависимости от |V| и |E|.

Основной недочет внедрения матрицы смежностей состоит в том, что она занимает память |V Графы и их представление|2 даже тогда, когда граф содержит только О(|V|) дуг. Уже изначальное наполнение матрицы смежностей средством "естественной" процедуры просит времени О(|V|2), что сводит на нет методы трудности О(|V|) при работе с графами, содержащими только О(|V|) дуг. Потому методы трудности О(|V|), основанные на работе с матрицей Графы и их представление смежностей, встречаются изредка.

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

Очередное представление графа - при помощи перечня. Перечнем смежностей для узла V именуется перечень всех узлов W, смежных с V. Граф можно представить Графы и их представление при помощи |V| списков смежностей, по одному для каждого узла.

Пример 3.2. На рис. 3.8,а изображен орграф, содержащий четыре узла, а на рис. 3.8,б - его матрица смежностей. На рис. 3.8,в показаны четыре перечня смежностей, по одному для каждого узла. К примеру, из узла 1 в узлы 2 и 4 идут дуги, так что Графы и их представление перечень смежностей для узла 1 содержит
составляющие 2 и 4, связанные в смысле рис. 3.1.

Табличное представление перечня смежностей показано на рис. 3.8,г. Любая из первых 4 ячеек в массиве NEXT содержит указатель на 1-ый узел перечня смежностей, а конкретно NEXT[i] показывает на 1-ый узел перечня смежностей для узла i.

Заметим, что NEXT Графы и их представление[3]=0, так как в перечне смежностей для узла 3 нет узлов. Другие составляющие массива NEXT представляют дуги графа. Массив END содержит узлы из списков смежностей. Таким макаром, перечень смежностей узла 1 начинается в ячейке 5, ибо NEXT[1]=5, END[5]=2; это указывает, что есть дуга (1,2). Равенства NEXT[5]=6 и END[6]=4 означают, что есть дуга (1,4), а NEXT[6]=0, что больше Графы и их представление нет дуг, начинающихся в узле 1.

Заметим, что представление графа в виде списков смежностей просит памяти порядка |V|+|E|. Таким представлением нередко пользуются, если |E|<<|V|2.

Если граф неориентирован, то каждое ребро (v,w), т. е. дуга с 2-мя обратными направлениями, представляется два раза: один раз в перечне смежностей для Графы и их представление v и один раз в перечне смежностей для w. В данном случае можно добавить новый массив, именуемый CON (CONjuction – соединение, связь), чтоб корректировать оба экземпляра неориентированной дуги. Таким макаром, если i-я ячейка, соответственная узлу w в перечне смежностей для v, то CON[i]- ячейка, соответственная узлу v в Графы и их представление перечне смежностей для w.

Если нужно с удобством удалять рёбра из неориентирован-ного графа, то списки смежностей можно связать два раза (подразд. 3.1). Это обычно бывает необходимо поэтому, что даже если удалять всегда ребро (v, w), стоящее первым в перечне смежностей узла v, всё равно возможно окажется, что ребро Графы и их представление, идущее в оборотном направлении, стоит посреди перечня смежностей узла w. Чтоб стремительно удалить ребро (v, w) из перечня смежностей для w, нужно уметь стремительно отыскивать ячейку, содержащую предшествующее ребро в этом перечне смежностей.


Деревья и их представление

Определения и характеристики

Определение. Конечное корневое дерево T - это непустое огромное количество упорядоченных Графы и их представление узлов, таких что существует один выделенный узел, именуемый корнем дерева, а оставшиеся узлы разбиты на m 0 поддеревьев Т1,Т2,...,Тm. Узлы, не имеющие поддеревьев, именуются листьями; другие узлы именуются внутренними.

Пример 3.3.На рис. 3.9 изображено дерево с одиннадцатью узлами, помеченными знаками от А до К. Узлы с метками D, E, F Графы и их представление, H, J и K являются листьями; другие узлы внутренние. Узел А - корень.

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

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

Так, в дереве (либо поддереве) все узлы Графы и их представление являются потомками его корня, и напротив, корень - предок всех собственных потомков. Корень называется папой корней его поддеревьев, которые в свою очередь будут отпрысками корня. На рис. 3.9 узел А является папой узлов B, G и I; J и K - сыновья I, а C, E, F - братья; пунктиром выделено поддерево с Графы и их представление узлами I, J, K.

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

Для дерева вводятся последующие свойства:

· глубина узла v в дереве - это длина пути из корня в Графы и их представление v;

· высота узла в дереве - это длина самого длинноватого пути из v в какой-либо лист;

· высотой дерева именуется высота его корня;

· уровень узла v в дереве равен разности высоты дерева и глубины узла v.

К примеру, на рис. 3.9 высота дерева равна 3; узел К имеет глубину 2, высоту 0 и уровень Графы и их представление 1.

Определение. Лес - упорядоченное огромное количество деревьев. В связи с этим можно переопределить понятие дерева: дерево есть непустое огромное количество узлов, такое, что существует один выделенный узел, именуемый корнем дерева, а оставшиеся узлы образуют лес с m 0 поддеревьями корня.

Принципиальной разновидностью корневых деревьев является класс бинарных (двоичных) деревьев.

Определение. Бинарное Графы и их представление дерево Т или пустое, или состоит из выделенного узла, именуемого кор-нем, и 2-ух бинарных поддеревьев: левого Т1 и правого T2. Бинарные деревья не являются подмножеством множе-ства деревьев, они вполне отличаются по собственной структуре, так как две последующие рисунки (в и г на рис. 3.10) не изображают одно и Графы и их представление то же бинарное дерево. Как деревья, но, они обе неотличимы от рисунки д.

Различие меж деревом и бинарным деревом заключается в том, что дерево не может быть пустым, и каждый узел дерева может иметь случайное число поддеревьев; в то же время бинарное дерево может быть пустым, любой из Графы и их представление его узлов может иметь 0, 1 либо 2 поддерева, и существует различие меж левыми и правыми поддеревьями.

Определение. Бинарное дерево именуется полным, если для некого целого k каждый узел глубины меньше k имеет как левого, так и правого отпрыска, а каждый узел глубины k является листом. Полное бинарное дерево высоты k имеет Графы и их представление ровно 2k+1–1 узлов.

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

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

Представление деревьев

Практически все Графы и их представление машинные представления деревьев основаны на связанных рассредотачиваниях, при всем этом каждый узел состоит из поля INFO и нескольких полей для указателей. К примеру, одно из представлений для каждого узла имеет единственное поле для указателя F (Father – отец) на отца данного узла. При всем этом приведенное на рис. 3.8 дерево будет смотреться Графы и их представление так, как показано на рис. 3.11.

Такое представление полез-но, если нужно подниматься по дереву от потомков к праотцам. Но эта операция встречается достаточно изредка; почаще требуется спуститься по дереву от протцов к потомкам.

Представление дерева (либо леса) с внедрением указате-лей, ведущих от протцов к потомкам Графы и их представление, достаточно трудно, так как узел, имея менее 1-го отца, может иметь в то же время произвольно много отпрыской. Другими словами, при таком представлении узлы должны различаться по размеру, что является определённым неудобством. Один из путей обхода этой трудности заключается в том, чтоб найти соотношение меж деревьями и бинарными деревьями, так как Графы и их представление бинарные деревья просто представить узлами фиксированного размера. Каждый узел в данном случае имеет три поля: LEFT (показывает положение корня левого поддерева), INFO (содержимое узла) и RIGHT (указатель местоположения корня правого поддерева). Всё произнесенное выше проиллюстрировано на рис. 3.12.

Деревья можно изобразить как бинарные (используя узлы фикси-рованного размера), представляя каждый узел Графы и их представление леса в виде узла бинарного дерева, состоящего из полей LEFT, INFO и RIGHT. При всем этом поле LEFT предназначается для указания самого левого отпрыска данного узла, а поле RIGHT – для указания последующего брата этого узла.

Таким макаром, поле LEFT некого узла употребляется для указателя на связанный перечень отпрыской Графы и их представление этого узла; этот перечень связывается при помощи полей RIGHT. Такое представле-ние именуется естественным соответствием меж лесами и бинарными деревьями.

Бинарное дерево обычно представляют в памяти машины в виде 2-ух массивов LES (LEftSon - левый отпрыск) и RIS (RIghtSon - правый отпрыск). Пусть узлы бинарного дерева зануме-рованы целыми Графы и их представление числами от 1 до N. В данном случае LES[i]=j и тогда только тогда, когда узел с номером j является левым отпрыском узла с номером i. Если у узла i нет левого отпрыска, то LES[i]=0. RIS[i] определяется аналогично. Узел i, у которого LES[i] = 0, является листом. Братьями являются узлы Графы и их представление i, j, k, для которых имеет место соотношение RIS[i] = j, RIS[j] = k.

Полное бинарное дерево высоты k нередко представляют одним массивом. В позиции 1 этого массива находится корень. Левый отпрыск узла в пози-ции i размещен в позиции 2i, а его правый отпрыск - в позиции [i/2].

Разглядим Графы и их представление на определенном примере преобразование дерева (леса) в бинарное дерево, используя естественное соответствие меж ними, также приведём представление бинарного дерева в памяти ЭВМ.

Пример 3.4.Задан лес (рис. 3.13, а). Преобразуем его в бинарное дерево, зачем выстроим всех братьев в горизонтальные полосы, которым будут соответствовать связанные списки братьев; при всем этом Графы и их представление корешки всех деревьев леса числятся также братьями. В итоге такового преобразо-вания получим бинарное дерево, показанное на рис.3.13,б.


Сейчас можно приобретенное бинарное дерево представить в виде массивов LES и RIS, сведенных в таблицу. На рис. 3.14 приведен кусок этой таблицы, причём в качестве индексов массивов в ней ис-пользуются имена узлов, расположенных Графы и их представление в алфавитном порядке. Видно, что к примеру узел С является папой, у которого самый левый отпрыск – узел D, а другие сыновья (E и F) рассматриваются как последующие братья узла D. В то же время соотношение RIS[C]=G гласит о том, что узел G является братом для Графы и их представление узла C; если сейчас поглядеть на строчку G, то можно узреть ещё 1-го брата узлов C и G - узел H. Нули в массиве LES для строк с индексами D, E, F, G означают, что узлы с теми же именами не имеют отпрыской; в строке с индексом F имеем Графы и их представление RIS[F]=0, т.е. узел F не имеет последующего брата.

LES RIS
A B M Если переименовать узлы рассматри-ваемого леса, т.е. ввести заместо букв их но-мера в алфавитном порядке, то можно убедиться, что эти номера подчиняются приведенным выше соотношениям. Так, LES[3]=4 и LES[4]=0 (C®3, D®4), т Графы и их представление.е. узел 4 является самым левым отпрыском узла 3, а узел 4 не имеет отпрыской.
B C
C D G
D E
E F
F
G H
H I
Рис.3.14. Представле- ние бинарного дерева

В заключение разглядим пример представления арифметического выражения при помощи бинарного дерева.

Пример 3.5. Арифметическое выражение с операциями +, -, ´, ¤может быть естественным образом Графы и их представление представлено бинарным деревом, если в качестве операторов взять внутренние узлы, а операндами считать листья. К примеру, выражению ((A+B)/C-D)´E соответствует последующее дерево (рис. 3.15).

Прохождение леса

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

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

Представляются полезными последующие Графы и их представление 4 главных метода прохождения леса в неком порядке, а конкретно: в прямом (в глубину), оборотном (снизу ввысь), в горизонтальном (в ширину) и для бинарных деревьев – во внутреннем (симметричном либо словарном).

Прохождение в прямом порядке полезно в процедурах поиска.

Заметим, что прохождение леса в прямом порядке в точности такое же, как Графы и их представление и прохождение в прямом порядке бинарного дерева, являющегося его представлением. Данный факт делает ²естественным² соответствие меж деревом и бинарным деревом.

Оборотный порядок полезен, а именно поэтому, что он позволяет вычислять рекурсивно определённые функции на лесах.

При горизонтальном обходе узлы леса проходятся слева вправо, уровень за уровнем, от корня вниз Графы и их представление. Такое прохождение дерева полезно в определённых методах на графах.

Разглядим три обширно распространённых метода прохождения дерева: в прямом, оборотном и внутреннем порядке.

Определение. Пусть Т - дерево с корнем r и отпрысками v1, vk, k 0. При k=0 это дерево состоит из единственного узла r. Тогда прохождение дерева определяется последующими Графы и их представление рекурсиями.

В прямом порядке:

1) посетить корень r;

2) посетить в прямом порядке поддеревья с корнями v1,...,vk в обозначенной последовательности.

В оборотном порядке:

1) посетить в оборотном порядке поддеревья с корнями v1,...,vk в обозначенной последовательности;

2) посетить корень r;

Во внутреннем порядке:

1) посетить во внутреннем порядке левое поддерево корня (если оно существует Графы и их представление);

2) посетить корень r;

3) посетить во внутреннем порядке правое поддерево корня (если оно существует).

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

При нумерации в прямом порядке все узлы поддерева с корнем r имеют номера, не наименьшие r. Поточнее, если Dr - огромное количество потомков узла r, то v будет номером некого узла из Dr и тогда только тогда, когда r£v

Поставив в Графы и их представление соответствие каждому узлу его номер в прямом порядке и количество его потомков, просто найти, является ли некий узел w потомком для v, причём за фиксированное время, не зависящее от размера дерева. Номера, надлежащие оборотному порядку, владеют подобными качествами.

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


Пример 3.6.На рис. 3.16 изображено двоичное дерево, узлы которого пронумерованы в согласовании с прохождением его разным образом.

Отметим, что метод прохождения во внутреннем порядке тщательно рассматривается в последующей главе.


Заключение

Данные, до того как подвергнутся обработке в машине, проходят две стадии структурирования: поначалу выбираются (строятся) их Графы и их представление матема-тические модели (математические структуры, либо абстрактные типы данных по [7]), а потом они трансформируются в структуры, комфортные для представления в памяти машины (машинные структуры).

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

В согласовании с формулой Н. Вирта [6] для построения эффек-тивного метода требуется избрать подходящие структуры данных; этот выбор определяется операциями, которые будут проводиться над данными.

Для представления множеств, графов и деревьев в машине могут быть применены разные структуры данных; в большинстве случаев это списки.

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

Время выполнения операций над перечнем не находится в зависимости от его длины.

Обход деревьев используют в комбинаторных задачках; более нередко употребляются 3 метода обхода: прямой, оборотный Графы и их представление и внутренний.

Контрольные вопросы. Упражнения

1. Какую структуру данных целенаправлено использовать при составлении метода решения задачки поиска пути в лабиринте?

2. Какую структуру данных целенаправлено использовать при составлении метода решения задачки «Ханойские башни»?

3. Что общего у стека и очереди, в чём их различие?

4. Почему время выполнения операции вставки частей в перечень Графы и их представление хоть какого вида или удаления из него не находится в зависимости от длины перечня?

5. Напишите на псевдоязыке программку печати частей односвязного перечня, используя операцию readel (чтение элемента перечня без его удаления) и вспомогательный регистр RG.

6. Напишите функцию обмена элементами в позициях p и NEXT[p] для односвязного перечня.

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

8. В критериях предшествующего упражнения используйте стек и очередь.

9. Разглядим многочлен вида , где b1>b2>…>bn³0. Таковой многочлен можно представить в виде Графы и их представление связанного перечня, где любая ячейка имеет три поля: одно – для коэффициента ai; 2-ое - для показателя степени bi; третье – для указателя на последующую ячейку. Для описанного представления многочленов напишите программки их сложения, умножения, дифференцирования и интегрирования.

10. Как воплотить очередь, если её элементами являются символьные строчки случайной длины? Сколько времени Графы и их представление нужно для операции вставки элемента в очередь?


gotovie-esse-po-russkomu-yaziku-problema-krasoti-prirodi-po-v-a-solouhinu.html
gotovie-esse-po-russkomu-yaziku-problema-sootnosheniya-vnutrennej-i-vneshnej-krasoti-po-sent-ekzyuperi.html
gotovie-esse-po-russkomu-yaziku-rodina-po-v-koneckomu.html