Задание графов соответствием 9 > Матричное представление графов 10 Вопросы применения графов в программировании 12 > Вопросы визуализации и визуальной обработки графов 14
Вид материала | Литература |
- Задача является np-полной для кубических планарных графов, реберных графов, ориентированных, 39.45kb.
- 1. Элементы теории графов Введение в теорию графов: основные понятия и определения., 32.17kb.
- Вопросы к экзамену, 14.82kb.
- «Применение информационный технологий в теории графов», 272.84kb.
- Программа дисциплины Комбинаторные алгоритмы Семестры, 18.74kb.
- Лекция 12: Алгоритмы на графах и деревьях, 395.7kb.
- Программа вступительного экзамена в аспирантуру по специальностям 05. 13. 05 - "Элементы, 88.59kb.
- Билеты по Дискретной математике «Теория Графов», 12.79kb.
- «Теория графов», 114.81kb.
- Спецкурс «Теория графов» пм 4 курс История возникновения и развития теории графов., 13.97kb.
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
ФГОУ ВПО
«ЧУВАШСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ИМЕНИ И.Н.УЛЬЯНОВА»
АЛАТЫРСКИЙ ФИЛИАЛ
ФАКУЛЬТЕТ УПРАВЛЕНИЯ И ЭКОНОМИКИ
Кафедра высшей математики и информационных технологий
КУРСОВАЯ РАБОТА
По дисциплине «Дискретная математика»
на тему:
«Представление графов в ЭВМ»
Студент: Яшин А.В.
Группа: АФТ-0508
Руководитель: асс. Немкова М.П.
«Допустить к защите»
«______» __________ 2009 г.
Дата представления работы: «______» __________ 2009 г.
Дата защиты: «______» __________ 2009 г.
Оценка: _________________
Алатырь,
2009 год
Содержание
Введение 3
1. Графы и способы их представления. Основные определения 6
2. Способы описания графов 8
3. Задание графов соответствием 9
4. Матричное представление графов 10
5. Вопросы применения графов в программировании 12
6. Вопросы визуализации и визуальной обработки графов 14
7. Визуализация графовой модели и интерфейс в системе HIGRES 16
8. Визуальная обработка графов в системе HIGRES 19
9. Реализация графов на языке Turbo Pascal 20
Заключение 23
Литература 24
Введение
В последние годы особую важность приобрели те разделы математики, которые имеют отношение к развитию цифровых устройств, цифровой связи и цифровых вычислительных машин. Базой для преподавания этих дисциплин наряду с классическими методами анализа непрерывных физических моделей стали алгебраические, логические и комбинаторные методы исследования различных моделей дискретной математики.
Значительно возросла популярность теории графов – ветви дискретной математики. Графы встречаются во многих областях под разными названиями: "структуры" в гражданском строительстве, "сети" – в электронике, "социограммы" – в социологии и экономике, "молекулярные структуры" – в химии, "дорожные карты", электрические или газовые распределительные сети и т. д.
Родившись при решении головоломок и игр, таких, например, как задача о кенигсбергских мостах и игра Гамильтона, теория графов стала мощным средством исследования и решения многих задач, возникающих при изучении больших и сложных систем. Для специалистов по вычислительной технике, информационным системам и системам цифровой связи теория графов – это удобный язык выражения понятий из этой области; многие результаты теории графов имеют непосредственную связь с задачами, с которыми им приходится сталкиваться.
Рис. 1
Так в виде ориентированных графов можно представить любую логическую или функционально - логическую схему (рис. 1). На таких графовых моделях можно, например, оценить быстродействие схемы. Блок-схема алгоритма может быть представлена вероятностным графом (рис. 2), который позволяет оценить временные характеристики алгоритма, затраты процессорного времени, трудоемкость и другие.
Рис. 2
Графом типа "дерево" можно отобразить практически любую структуру организации или предприятия (рис. 3).
Рис. 3
Широкое применение теория графов получила при исследовании так называемой проблемы оптимизации, возникающей при конструировании больших систем как технических, так и программных, например, таких, как компиляторы.
В рамках этих исследований были разработаны многие, неизвестные ранее теоретико-графовые понятия. Теория графов имеет большую привлекательность для специалистов в области проектирования для построения эффективных алгоритмов и анализа их сложности. Использование аппарата теории графов оказало существенное влияние на разработку алгоритмов конструкторского проектирования схем. Непосредственное и детальное представление практических систем, таких, как распределительные сети, системы связи, приводит к графам большого размера, успешный анализ которых зависит в равной степени, как от эффективных алгоритмов, так и от возможностей компьютерной техники. Поэтому в настоящее время основное внимание сосредоточено на разработке и описании компьютерных алгоритмов анализа графов. В связи с этим основной упор в данном учебном пособии делается на машинные способы представления графов и алгоритмы решения задач на графах, легко реализуемых на ЭВМ.
Графы и способы их представления. Основные определения
Граф задается множеством точек или вершин х1, х2, ..., хn и множеством линий или ребер a1, a2, ... , am, соединяющих между собой все или часть точек. Формальное определение графа может быть дано следующим образом.
Графом называется двойка вида
G = (X, A),
где X = {xi}, i = 1, 2, ..., n – множество вершин графа, A = {ai}, i = 1, 2,... , m – множество ребер графа.
Графы могут быть ориентированными, неориентированными и смешанными (рис. 4). Если ребра у множества A ориентированы, что обычно показывается стрелкой, то они называются дугами, и граф с такими ребрами называется ориентированным графом или орграфом (рис. 4,а).
Рис. 4
Если ребра не имеют ориентации, то граф называется неориентированным (рис. 4,б). Граф, в котором присутствуют и ребра, и дуги называется смешанным (рис. 4,в). В случае, когда G = (X, A) является орграфом, и мы хотим пренебречь направленностью дуг из множества A, то неориентированный граф, соответствующий G, будет обозначаться и называться неориентированным дубликатом или неориентированным двойником (рис. 4,г).
Дуга ai может быть представлена упорядоченной парой вершин (хn, хk), состоящей из начальной хn и конечной хk вершин. Например, для графа G1 (рис. 4,а) дуга a1 задается парой вершин (x2, x1), а дуга а3 парой (x2, x3). Если хn, хk – концевые вершины дуги ai, то говорят, что вершины хn и хk инцидентны дуге ai или дуга ai инцидентна вершинам хn и хk.
Дуга, у которой начальная и конечная вершины совпадают, называется петлей. В графе G3 (рис. 4,в) дуга a7 является петлей.
Каждая вершина орграфа хi может характеризоваться полустепенью исхода d0(хi) и полустепенью захода dt(хi).
Полустепенью исхода вершины хi — d0(хi) называется количество дуг, исходящих из этой вершины. Например, для орграфа G1 (рис. 4,а) характеристики полустепеней исхода следующие: d0(х1)=1, d0(х2)=2, d0(х3)=2, d0(х4 )=1.
Полустепенью захода вершины хi — dt(хi) называется количество дуг, входящих в эту вершину. Например, для орграфа G1: dt(х1)=2, dt(х2)=1, dt(х3)=2, dt(х4 )=1.
Очевидно, что сумма полустепеней исхода всех вершин графа, а также сумма полустепеней захода всех вершин графа равна общему числу дуг графа, т. е.
ni=1d0(xi)=ni=1dt(xi)=m
где n – число вершин графа, m – число дуг.
Каждая вершина неориентированного графа хi может характеризоваться степенью вершины d(хi).
Степенью вершины хi – d(хi) называется количество ребер, инцидентных этой вершине. Например, для орграфа G1 (рис. 4,б) характеристики степеней следующие: d(х1)=2, d(х2)=3, d(х3)=2, d(х4 )=2.
Способы описания графов
Теоретико-множественное представление графов
Граф описывается перечислением множества вершин и дуг. Примеры описания приведены для орграфов на рис. 5 и рис. 6.
G4 = (Х, А),
где Х = {хi}, i = 1, 2, 3, 4 – множество вершин; А = {ai }, i = 1, 2, ..., 6 – множество дуг, причем А = {(х1, х2), (х4, х2), (х2, х4 ), (х2, х3), (х3, х3), (х4 , х1)}.
Рис. 5
G5 = (X, A),
где X = {B, C, D, E, F} – множество вершин графа, A = {ai}, i = 1, 2, ..., 5 – множество дуг графа, причем a1 = (F, B), a2 = (B, E), a3 = (F, D), a4 = (E, C), a5 = (C, D).
Рис. 6
Задание графов соответствием
Описание графов состоит в задании множества вершин Х и соответствия Г, которое показывает, как между собой связаны вершины.
Соответствием Г называется отображение множества Х в Х, а граф в этом случае обозначается парой G = (X, Г).
Отображением вершины хi — Г(хi) является множество вершин, в которые существуют дуги из вершины хi, т. е. Г(хi) = { хj: дуга (хi, хj)A}.
Так для орграфа на рис. 5 описание заданием множества вершин и соответствия выглядит следующим образом:
G4=(X, Г),
где X = {хi}, I = 1, 2, ..., 4 – множество вершин, Г(х1) = { х2 }, Г(х2) = { х3, х4 }, Г(х3) = { х3 }, Г(х4) = { х1, х2 } – отображения.
Для неориентированного или смешанного графов предполагается, что соответствие Г задает такой эквивалентный ориентированный граф, который получается из исходного графа заменой каждого неориентированного ребра двумя противоположно направленными дугами, соединяющими те же самые вершины. Например, для графа на рис. 4,б Г(х2) = { х1, х3, х5 }, Г(х4) ={ х3, х5} и т. д.
Матричное представление графов
Для обработки на ЭВМ графы удобно представлять в виде матриц смежности и инциденций.
Матрица смежности – это квадратная матрица размерностью n x n, (где n – число вершин графа), однозначно представляющая его структуру.
A = {aij}, i, j = 1, 2, ..., n, а каждый элемент матрицы определяется следующим образом:
aij = 1, если дуга (хi, хj),
aij = 0, если нет дуги (хi, хj).
Матрица инциденций представляет собой прямоугольную матрицу размером n x m, где n – количество вершин графа, а m – количество дуг графа. Обозначается матрица инциденций B = {bij}, i = 1, 2, ..., n, j = 1, 2, ..., m.
Каждый элемент матрицы определяется следующим образом:
bij = 1, если хi является начальной вершиной дуги aj,
bij = –1, если хi является конечной вершиной дуги aj,
bij = 0, если хi не является концевой вершиной дуги aj или если aj является петлей.
На рис. 7, а,б приведен граф и его матрица смежности, по которой можно найти характеристики вершин. Так сумма элементов i-ой строки матрицы дает полустепень исхода вершины хi, а сумма элементов i-го столбца дает полустепень захода вершины хi. По матрице смежности можно найти прямые и обратные отображения. Рассмотрим i-ю строку матрицы. Если элемент aij=1, то элемент графа хj входит в отображение Г(хi). Например, во 2-й строке матрицы А (рис. 7,б) единицы стоят в 2-м и 5-м столбцах, следовательно, Г(х2) = { х2, х5}.
Рис. 7. Орграф и его матричное представление: а – орграф; б – матрица смежности; в – матрица инциденций
Для графа на рис. 7, а матрица инциденций приведена на рис. 7,в. Поскольку каждая дуга инцидентна двум различным вершинам, за исключением того случая, когда дуга образует петлю, то каждый столбец либо содержит один элемент равный 1 и один – равный – 1, либо все элементы столбца равны 0.
Для неориентированного графа, матрица инциденций определяется так же, за исключением того, что все элементы, равные –1, заменяются на 1.
Вопросы применения графов в программировании
Современное состояние программирования нельзя представить себе без теоретико-графовых алгоритмов. Хорошо известно, что многие задачи повышения качества трансляции, как в смысле улучшения рабочих характеристик транслятора, так и в смысле повышения качества получаемых машинных программ формулируются и решаются как задачи на графах. Сюда относятся в первую очередь задачи, связанные с представлением программ в виде теоретико-графовых моделей, важнейшей из которых является управляющий граф. Кроме того, необходимо указать на такие области применения граф-моделей, как эффективное использование ресурсов вычислительной системы (оптимизация использования памяти, регистров, уменьшение обменов между оперативной и внешней памятью и т.д.). организация больших массивов информации (деревья и, вообще, графы данных для повышения эффективности информационного поиска), увеличение степени параллелизма программы, повышение эффективности работы многопроцессорных и многомашинных систем (распределение загрузки процессоров, обмен сообщениями между процессами, синхронизация, конфигурация сетей связи между процессорами и т.д. 1. Решение этих и подобных задач привело к появлению множества граф-моделей, связанных как с программами и структурами данных, так и с вычислительными системами, в том числе параллельными.
Как уже отмечалось выше, теория графов из академической дисциплины все более превращается в средство, владение которым становится решающим для успешного применения ЭВМ во многих прикладных областях. Причем совершенно ясно, что, несмотря на наличие обширной специальной литературы по решению задач на графах, широкое применение в практике программирования полученных математических результатов затруднено в силу отсутствия их систематического описания, ориентированного на программистов. Поэтому значительный класс практических задач, по существу сводящихся к простому выбору подходящего способа решения и к построению конкретных формулировок абстрактных алгоритмов, для многих программистов все еще остается полем для интеллектуальной деятельности по переоткрытию методов.
В данный момент математики ориентируются на высокоуровневое описание алгоритмов в терминах специального псевдоязыка (лексикона) программирования с использован нем традиционных конструкций математики и языков программирования высокого уровня. Такой подход позволяет формулировать алгоритмы в естественной форме, допускающей прямой анализ их корректности и сложности, а также простой перенос алгоритмов на традиционные языки программирования и ЭВМ с сохранением полученных оценок сложности. Кроме того, подобный стиль описания алгоритмов является базой для доказательного стиля программирования: он позволяет понять алгоритм на содержательном уровне, оценить пригодность его для решения конкретной задачи и осуществить модификацию алгоритма, не снижая степень математической достоверности окончательного варианта программы.
Среди теоретико-графовых алгоритмов и методов, применяемых в программировании, естественно выделяются классы алгоритмов, общим для которых является тот или иной тип графов, используемых в качестве модели. Здесь в первую очередь следует назвать класс алгоритмов обработки деревьев, класс алгоритмов обработки бесконтурных графов (ациклические графы, ВАС), моделирующих частично упорядоченные множества, решетки и полурешетки, а также класс алгоритмов обработки регуляризуемых графов (сводимые графы), моделирующих программу при потоковом анализе, оптимизирующей трансляции и распараллеливании и являющихся основой современных технологий программирования, таких как структурное программирование, трансформационное программирование и др. Поэтому нам показалось естественным при изложении теоретико-графовых методов и алгоритмов для программистов использовать указанное их разделение на классы.
Вопросы визуализации и визуальной обработки графов
Существующие системы визуализации графов можно условно разделить на два класса.
К первому (более широкому) классу относятся узкоспециальные системы, которые ориентированы на графовые модели с определенной семантикой и топологией. Каждая такая система является, как правило, частью некоторого большого проекта, включающего ее в качестве визуализатора каких-либо специфических для данного проекта данных. Более широкое использование таких систем либо очень затруднено, либо просто невозможно.
Второй класс — это универсальные системы визуальной обработки графовых моделей, такие как, например, системы daVinci, GraphEd, Graphlet, GraVis, VCG, а также библиотеки LEDA, AGD, ffGraph, Graph Layout Toolkit, Graph Editor Toolkit и др. Несмотря на значительный прогресс в создании универсальных систем, следует отметить ряд недостатков подавляющего большинства из них. Прежде всего для российского пользователя общим недостатком этих систем является их ориентация на работу в ОС UNIX на больших рабочих станциях, которыми в достаточной степени оснащены иностранные университеты, их разрабатывающие. Как правило, универсальность существующих систем весьма ограничена, в частности, ни одна из них не позволяет графовым моделям быть иерархическими и не поддерживает визуализацию алгоритмов их обработки
Требования к универсальным системам визуализации и визуальной обработки информационных моделей сложны для формализации и нуждаются в отдельном исследован ни. Отметим лишь, что такие системы должны обладать базовыми возможностями поддержки визуальной обработки, связанной с решением широкого крута задач анализа и синтеза иерархических графовых моделей в irx конструкторском, исследовательском и учебном применении.
Система должна поддерживать визуализацию и редактирование помеченных иерархических графов. В частности, при изображении графовой модели тип ее элементов может быть связан с определенной геометрической формой соответствующих представлении и/или их цветовой гаммой, а также местом и способом представления пометок, относящихся к элементам соответствующего типа. Система должна обладать современным графическим интерфейсом, ориентированным на иерархичность графовых моделей и поддерживающим их многооконное редактирование и визуализацию с возможностями регулирования масштаба, использования разных геометрических и цветовых образов для формирования изображения графа, работы с прямоугольной сеткой для выравнивания объектов и т.п.
Система должна обладать рядом возможностей, облегчающих и автоматизирующих отдельные операции конструирования, визуализации и изучения различных объектов и явлений в рамках их иерархических графовых моделей, включая возможности отката, генерации случайных графов, автоматического расположения графов на плоскости, анимации процессов обработки графовых моделей и специализации системы.
При использовании правил преобразований для задания семантической части графовой модели возникают вопросы поддержки визуальной обработки системы преобразований, связанные с их визуальным конструированием, применением и анализом. В частности, весьма важной является возможность поддержки управляемого визуального применения системы преобразований, позволяющего в каждый момент задавать, какое преобразование и каким образом нужно применять к текущему виду модели, а также возвращаться к виду модели, имеющемуся у нее до преобразования. Нужно подчеркнуть важную роль вопросов визуальной обработки систем преобразований и для случая явного описания семантической части графовой модели. Многие из порождающих процессов удобно не рассматривать как неделимое глобальное преобразование, а задавать с помощью системы локальных преобразований. Именно такая ситуация, например, имеет место для сетей Петри, функционирование которых описывается в терминах локальных преобразований, представляющих срабатывания переходов.
Визуализация графовой модели и интерфейс в системе HIGRES
Визуализация графа в системе HIGRES организована таким образом, чтобы максимально наглядно изобразить как иерархическую структуру графа, так и его семантику.
Каждому фрагменту графа соответствует некоторый прямоугольник плоскости, внутри которого располагаются все его вершины (см. рис. 2). Кроме того, для каждого фрагмента можно открыть отдельное окно, в котором видны только вершины данного фрагмента и его подфрагменты. При этом каждый подфрагмент можно объявить закрытым — тогда изображаются только его контуры, либо открытым — тогда изображаются все его вершины и инцидентные им дуги. Для изображения контуров фрагментов в системе используется прием создания эффекта тени. Закрытые фрагменты выглядят слегка выступающими вверх, как будто они закрыты крышками, открытые же слегка утоплены вниз.
Рис. 8. Модель СБИС, представленная иерархическим графом
Для изображения вершин используется несколько вариантов геометрических фигур. Кроме того, можно выбирать стиль и цвет контура и заливки вершины. Эти параметры задаются отдельно для каждого типа вершин. Таким образом, вершины, принадлежащие к одному типу, визуально похожи друг на друга, хотя могут отличаться текстом меток. Ребра (дуги) графа изображаются либо ломаными линиями, задаваемыми точками сгиба, либо гладкими кривыми, для задания которых также используется некоторый набор точек на плоскости, вдоль которых проходит дуга (эти точки по аналогии также называются точками сгиба). Вариант изображения дуги, стиль ее линии и стиль стрелки на конце (если граф ориентированный) задается отдельно для каждого типа дут. Для визуализации атрибутов объектов (вершин, ребер, фрагментов) используется гибкая система, позволяющая изображать их не просто как список значений меток, а более наглядным и естественным образом.
Для каждого типа объектов задается "строка визуализации", представляющая собой шаблон текста, изображающего атрибуты каждого объекта данного типа. В этой строке определяются места, в которые при визуализации подставляются значения меток конкретного объекта. Кроме того, строка может содержать специальные символы, отмечающие места начала новой строки В конечном итоге для каждого объекта определяется некоторый текст, который называется текстом меток. Более точно, для типов вершин задаются две строки визуализации и соответственно два текста меток: внутренний и внешний. При визуализации вершины внутренний текст меток располагается внутри нее, а внешний — рядом с ней. Точно так же для типов фрагментов задаются две строки визуализации, порождающих "закрытый" и "открытый'' текст меток. Первый изображается внутри фрагмента, когда он закрыт, а второй — когда открыт. Е1динственная строка визуализации, задаваемая для каждого типа дуг, порождает текст меток для каждой дуги данного типа, который располагается рядом с одной из точек сгиба дуги либо рядом с одной из конечных точек данной дуги.
Интерфейс системы придерживается основных общепринятых стандартов для приложений Windows 95. Система имеет главное окно, внутри которого расположены окна фрагментов, которые пользователь может открывать п закрывать по мере надобности, переходя вверх и вниз по иерархии Главное окно системы содержит меню и toolbar, обеспечивающий быстрый доступ к часто используемым операциям. Пользователь может переключаться с режима просмотра на режим редактирования графа.
В режиме просмотра можно только открывать и закрывать фрагменты графа и их окна, просматривая содержимое, скроллировать изображение в окнах и изменять его масштаб.
В режиме редактирования левая кнопка мыши служит для выделения объектов, а правая — для высвечивания всплывающего меню, с помощью которого можно выбрать операцию, производимую с выделенным объектом. Кроме того, выбрав соответствующий пункт в этом меню, можно добавить в граф новую вершину, фрагмент или дугу. С помощью левой кнопки мыши пользователь может перемещать вершины, фрагменты и сгибы дуг, а также изменять размеры вершин и границы фрагментов. При этом никакие две вершины не должны накладываться друг на друга и каждый фрагмент должен целиком включать в себя все свои вершины и подфрагменты. По выбору пользователя система может поддерживать выполнение данного условия одним из двух способов. Она может либо автоматически слегка корректировать расположение графа после каждого его изменения пользователем, нарушающего данное условие, либо просто запретить любые такие изменения.
Существуют также два дополнительных режима редактирования, использование которых может ускорить выполнение некоторых часто производимых операций, — режим создания объектов и режим редактирования меток.
Визуальная обработка графов в системе HIGRES
С интерфейсной точки зрения процесс визуальной обработки иерархического графа в системе HIGRES выглядит следующим образом. Пользователь с помощью системы выбирает нужный ему внешний модуль и запускает его. Система передает текущий граф обрабатывающему модулю и открывает специальное окно, предоставляющее пользователю интерфейс для управления работой модуля. Пользователь может регулировать параметры обработки, прерывать ее на любом шаге, просматривать промежуточные результаты в любую сторону в форме анимации либо в покадровом режиме. Для каждого модуля определяется набор числовых и текстовых параметров, которые пользователь может изменять в процессе работы. Кроме того, модуль может сам инициировать запрос необходимых ему данных, а также генерировать сообщения, которые вместе с другой рабочей информацией записываются в протокол. выдаваемый на экран.
От программиста, создающего свой собственный внешний модуль, не требуются знания деталей внутреннего представления иерархических графов в системе, поскольку все взаимодействие внешнего модуля с системой обеспечивается функциями библиотеки HGL. Создавая модуль, программист должен позаботиться, кроме программирования непосредственно самого процесса обработки, лишь о разбиении этого процесса на шаги, число которых не фиксируется. Внешний модуль представляет собой отдельное Windows-приложение и может быть получен с использованием любого компилятора C++ для Windows, понимающего шаблоны классов. В настоящий момент для иллюстрации возможностей визуальной обработки создано несколько примеров графовых моделей и внешних модулей к ним. К этим моделям относятся конечные автоматы (рис. 9), сети Петри и простейшие схемы программ.
Рис. 9. Моделирование работы конечного автомата
Реализация графов на языке Turbo Pascal
Как было сказано выше для обработки на ЭВМ графы удобно представлять в виде матриц смежности и инциденций.
Матрица смежности – это квадратная матрица размерностью n x n, (где n – число вершин графа), однозначно представляющая его структуру.
Рассмотрим матрицу на рис. 10.
A = {aij}, i, j = 1, 2, ..., n, а каждый элемент матрицы определяется следующим образом:
aij = 1, если дуга (хi, хj),
aij = 0, если нет дуги (хi, хj).
Матрица инциденций представляет собой прямоугольную матрицу размером n x m, где n – количество вершин графа, а m – количество дуг графа. Обозначается матрица инциденций B = {bij}, i = 1, 2, ..., n, j = 1, 2, ..., m.
Каждый элемент матрицы определяется следующим образом:
bij = 1, если хi является начальной вершиной дуги aj,
bij = –1, если хi является конечной вершиной дуги aj,
bij = 0, если хi не является концевой вершиной дуги aj или если aj является петлей.
Рис. 10
Из всего перечисленного следует что любой граф имеет матрицу инцидентности, которая характеризует данных граф. На языке Turbo Pascal матрица представляется в виде набора логических констант и определяется в разделе const. Вот так выглядит матрица инцидентности для графа на рис. 10.
const n=6;
m: array[1..n, 1..n] of boolean=
(
(False, True, True, False, True, False),
(False, True, False, False, True, False),
(False, False, False, False, False, False),
(False, False, True, False, False, False),
(False, False, False, True, False, False),
(True, False, False, False, True, True),
);
Мною была разработана программа умножения двух матриц:
Program proizvedenie_matric;
uses crt;
type
mat_a = array [1..15,1..15] of real;
mat_b = array [1..15,1..15] of real;
mat_c = array [1..15,1..15] of real;
var
n, m, r : integer;
i, j, k : integer;
a : mat_a;
b : mat_b;
c : mat_c;
begin clrscr;
writeln('kolichestvo strok matrici a');
readln (m);
writeln('kolichestvo stolbcov matrici b');
readln (r);
writeln ('kolichestvo stolbcov matrici a i kolichestvo strok matrici b');
readln (n);
for i:= 1 to m do
for j:= 1 to n do
begin
write('a[',i:2,',',j:2,']=');
readln (a[i,j]); end;
writeln ('vivod matrici a');
for i:= 1 to m do begin
for j:= 1 to n do
write(a[i,j]:4:0,'':3); writeln; end;
for j:= 1 to n do
for k:= 1 to r do
begin write('b[',j:2,',',k:2,']=');
readln (b[j,k]); end;
writeln ('vivod matrici b');
for j:= 1 to n do begin
for k:= 1 to r do
write(b[j,k]:4:0,'':3); writeln; end;
for i:= 1 to m do
for k:= 1 to r do
c[i,k]:= 0;
for i:= 1 to m do
for k:= 1 to r do
begin
for j:= 1 to n do
c[i,k]:= c[i,k] + a[i,j]*b[j,k];
end;
writeln ('proizvedenie matric a i b (matrica c)');
for i:= 1 to m do begin
for k:= 1 to r do
write(c[i,k]:5:0,'':3); writeln; end;
readkey;
end.
Заключение
Теория графов стала активно применяться в программировании одновременно с использованием ЭВМ в силу удобного выражения задач обработки информации на теоретико-графовом языке. Среди первых работ, существенно использующих теоретико-графовые методы в решении задач программирования, можно отметить широко известные работы А.П. Ершова по организации вычисления арифметических выражении (1958 г.) и оптимальному использованию оперативной памяти (1962 г.), а также заметку Р. Карпа (1960 г., на русском языке — 1962 г.), в которой была введена теоретико-графовая модель программы в виде управляющего графа. Эта модель стала к настоящему времени классической для решения задач трансляции и конструирования программ.
Модель программы в виде управляющего графа, модель арифметического выражения в виде ориентированного дерева, синтаксические деревья, деревья сортировки, сети Петри и другие теоретико-графовые конструкции внесли свой существенный вклад в развитие программирования и его автоматизации. Появление суперкомпьютеров и сетей и возникшая при этом проблема эффективной организации параллельных и распределенных вычислений над информационными массивами большого объема подтвердили тенденцию использования графов как наиболее эффективного средства автоматизации программирования.
Расширение круга задач, решаемых на ЭВМ, потребовало выхода на модели дискретной математики, что привело к подлинному расцвету теории графов и комбинаторики, которые за сорок лет трансформировались из разделов ''досуговой" математики в основной инструмент решения огромного числа задач.
Современное состояние информатики и программирования нельзя представить себе без теоретико-графовых методов и алгоритмов. Широкая применимость графов связана с тем, что они являются очень естественным средством объяснения сложных ситуаций на интуитивном уровне. Эти преимущества представления сложных структур и процессов графами становятся еще более ощутимыми при наличии хороших средств их визуализации. Поэтому неслучайно в настоящее время в мире растет интерес к методам и системам визуальной обработки графов и графовых моделей.
Список использованной литературы
1. Касьянов В.Н. Оптимизирующие преобразования программ. — М.: Наука, 1988.
2. Касьянов В.Н., Поттосин И.В. Методы построения трансляторов. — Новосибирск: Наука, 1986.
3. Di Battista G., Eades P., Tamassia R., Tollis I.G. Algorithms for drawing graphs: an annotated bibliography // Comput. Geom. Theory Appl. — 1994. —Vol. 4. — P. 235—282.
4. Кнут Д. Искусство программирования для ЭВМ. — М.: Мир; Том 1: Основные алгоритмы, 1976; Том 2: Получисленные алгоритмы, 1977; Том 3: Сортировка и поиск, 1978.
5. Евстигнеев В.А., Касьянов В.Н. Теория графов: алгоритмы обработки деревьев. — Новосибирск: Наука, 1994.
6. Евстигнеев В.А., Касьянов В.Н. Теория графов: алгоритмы обработки бесконтурных графов. — Новосибирск: Наука, 1998.
7. Евстигнеев В.А., Касьянов В.Н. Сводимые графы и граф-модели в программировании. — Новосибирск: Изд-во ИДМИ, 1999.