Алгебра графов — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
м
м
Строка 88: Строка 88:
 
Дело в том, что способ представления в виде списка смежности либо матрицы смежности, широко используемых в императивных программах, оказался очень тяжело применим в функциональной среде.  Компилятор при представлении графа в виде списка не может проверить, ни его корректность в принципе, ни корректность совершения некоторой операции над ним. Но если представить граф в виде последовательности операций из простейших графов, то почти все проблемы, связанные с построением графа и проверкой его корректности, устраняются.  
 
Дело в том, что способ представления в виде списка смежности либо матрицы смежности, широко используемых в императивных программах, оказался очень тяжело применим в функциональной среде.  Компилятор при представлении графа в виде списка не может проверить, ни его корректность в принципе, ни корректность совершения некоторой операции над ним. Но если представить граф в виде последовательности операций из простейших графов, то почти все проблемы, связанные с построением графа и проверкой его корректности, устраняются.  
  
Подробная реализация на языке Haskell<ref>[https://blogs.ncl.ac.uk/andreymokhov/an-algebra-of-graphs/ An algebra of graphs {{---}} "no time" Andrey Mokhov's blog]</ref>.
+
Подробная реализация на языке <tex>Haskell</tex><ref>[https://blogs.ncl.ac.uk/andreymokhov/an-algebra-of-graphs/ An algebra of graphs {{---}} "no time" Andrey Mokhov's blog]</ref>.
 
== См. также ==
 
== См. также ==
 
* [[Основные определения теории графов]]
 
* [[Основные определения теории графов]]

Версия 00:43, 19 декабря 2017

Алгебра графов (англ. algebra of graphs) — способ построить на пространстве ориентированных графов алгебраическую структуру. Впервые такая возможность была продемонстрирована McNulty и George F. в 1983 году.[1]

Основные определения

Определение:
Пустой граф (англ. empty graph) — граф в котором нет вершин и ребер. Здесь и далее будем обозначать его как ε. То есть ε={,}.


Определение:
Одиночный граф (англ. single graph) — граф состоящий из одной вершины. Здесь и далее будем обозначать его как просто строчной буквой. То есть a={a,}


Определение:
Алгеброй графов (англ. algebra of graphs) называется множество ориентированных графов с двумя определенными на нем операциями.

Пусть G1={V1,E1} и G2={V2,E2}. Тогда G1,G2

  • Сложение (англ. overlay): G1+G2={V1V2,E1E2}
  • Соединеие (англ. connect): G1G2={V1V2,E1E2V1×V2}

Cвойства операций

Данные операции обладают следующими свойствами очевидными из определения

Сложение

  • Наличие нейтрального элемента
Утверждение:
G+ε=G
  • Коммутативность:
Утверждение:
G1+G2=G2+G1
  • Aссоциативность:
Утверждение:
G1+(G2+G3)=(G1+G2)+G3

Соединение

  • Наличие левого и правого нейтральных элементов:
Утверждение:
εG=GGε=G
  • Ассоциативность:
Утверждение:
G1(G2G3)=(G1G2)G3

Левая часть:

G1(G2G3)=(V1,E1)((V2,E2)(V3,E3))=(V1,E1)(V2V3,E2E3V2×V3)=(V1V2V3,E1E2E3V2×V3V1×(V2V3))=(V1V2V3,E1E2E3V2×V3V1×V2V1×V3)=(V1V2V3,E1E2E3V1×V2V1×V3V2×V3)

Правая часть:

(G1G2)G3=((V1,E1)(V2,E2))(V3,E3)=(V1V2,E1E2V1×V2)(V3,E3)=(V1V2V3,E1E2V1×V2E3(V1V2)×V3)=(V1V2V3,E1E2E3V1×V2V1×V3V2×V3)

Другие свойства

  • Левая и правая дистрибутивность:
Утверждение:
G1(G2+G3)=G1G2+G1G3(G1+G2)G3=G1G3+G2G3

Левая часть:

G1(G2+G3)=(V1,E1)((V2,E2)+(V3,E3))=(V1,E1)(V2V3,E2E3)=(V1V2V3,E1E2E3V1×(V2V3)

Правая часть:

G1G2+G1G3=(V1,E1)(V2,E2)+(V1,E1)(V3,E3)=(V1V2,E1E2V1×V2)+(V1V3,E1E3V1×V3)=(V1V2V1V3,E1E2V1×V2E1E3V1×V3)=(V1V2V3,E1E2E3V1×V2V1×V3)=(V1V2V3,E1E2E3V1×(V2V3))

Правая дистрибутивность доказывается аналогично.
  • Декомпозиция:
Утверждение:
G1G2G3=G1G2+G1G3+G2G3

Левая часть:

G1G2G3=(V1,E1)(V2,E2)(V3,E3)=(V1V2,E1E2V1×V2)(V3,E3)=(V1V2V3,E1E2V1×V2E3(V1V2)×V3)=(V1V2V3,E1E2E3V1×V2V1×V3V2×V3)

Правая часть:

G1G2+G1G3+G2G3=(V1,E1)(V2,E2)+(V1,E1)(V3,E3)+(V2,E2)(V3,E3)=(V1V2,E1E2V1×V2)+(V1V3,E1E3V1×V3)+(V2V3,E2E3V2×V3)=(V1V2V1V3V2V3,E1E2V1×V2E1E3V1×V3E2E3V2×V3)=(V1V2V3,E1E2E3V1×V2V1×V3V2×V3)


Утверждение:
Любой граф G={V,E} можно представить в виде композиции сложений и соединений.
Действительно, G=(u,vV)uv, где это послузовательное применение операции сложения графов.

Построение графов в функциональных языках

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

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

Подробная реализация на языке Haskell[2].

См. также

Примечания

Источники информации