Алгебра графов — различия между версиями
Gpevnev (обсуждение | вклад) м |
м (rollbackEdits.php mass rollback) |
||
(не показано 12 промежуточных версий 3 участников) | |||
Строка 1: | Строка 1: | ||
− | '''Алгебра графов''' (англ. '' | + | '''Алгебра графов''' (англ. ''algebra of graphs'') {{---}} способ построить на пространстве [[Основные определения теории графов#Ориентированные графы | ориентированных графов]] алгебраическую структуру. Впервые такая возможность была продемонстрирована McNulty и George F. в 1983 году.<ref>[https://www.researchgate.net/publication/225490641_Inherently_nonfinitely_based_finite_algebras McNulty, George F.; Shallon, Caroline R. (1983) {{---}} "Inherently nonfinitely based finite algebras", Universal algebra and lattice theory (Puebla, 1982), Lecture Notes in Math., 1004, Berlin, New York: Springer-Verlag, pp. 206–231.]</ref> |
== Основные определения == | == Основные определения == | ||
{{Определение | {{Определение | ||
Строка 7: | Строка 7: | ||
{{Определение | {{Определение | ||
|definition= | |definition= | ||
− | '''Одиночный граф''' (англ. '' | + | '''Одиночный граф''' (англ. ''single graph'') {{---}} [[Основные определения теории графов#Ориентированные графы|граф]] состоящий из одной вершины. Здесь и далее для удобства будем обозначать и одиночный граф и множество его вершин одной буквой. Например, <tex> a = \{a, \varnothing \}</tex> {{---}} граф содержащий толко одну вершину <tex>a</tex>. |
}} | }} | ||
{{Определение | {{Определение | ||
Строка 13: | Строка 13: | ||
'''Алгеброй графов''' (англ. ''algebra of graphs'') называется множество ориентированных графов с двумя определенными на нем операциями. | '''Алгеброй графов''' (англ. ''algebra of graphs'') называется множество ориентированных графов с двумя определенными на нем операциями. | ||
Пусть <tex>G_1 = \{V_1, E_1\}</tex> и <tex>G_2 = \{V_2, E_2\}</tex>. Тогда <tex>\forall G_1, G_2</tex> | Пусть <tex>G_1 = \{V_1, E_1\}</tex> и <tex>G_2 = \{V_2, E_2\}</tex>. Тогда <tex>\forall G_1, G_2</tex> | ||
− | * '''Сложение'''(англ. ''overlay''): <tex>G_1 + G_2 = \{V_1 \cup V_2, E_1 \cup E_2\}</tex> | + | * '''Сложение''' (англ. ''overlay''): <tex>G_1 + G_2 = \{V_1 \cup V_2, E_1 \cup E_2\}</tex> |
− | * ''' | + | * '''Соединение''' (англ. ''connect''): <tex> G_1 \rightarrow G_2 = \{V_1 \cup V_2, E_1 \cup E_2 \cup V_1 \times V_2\}</tex> |
}} | }} | ||
− | |||
− | |||
− | |||
− | |||
== Cвойства операций == | == Cвойства операций == | ||
− | Данные операции обладают следующими свойствами очевидными из определения | + | Данные операции обладают следующими свойствами очевидными из определения. |
=== Сложение === | === Сложение === | ||
* Наличие нейтрального элемента | * Наличие нейтрального элемента | ||
Строка 48: | Строка 44: | ||
Левая часть: | Левая часть: | ||
− | <tex>G_1 \rightarrow (G_2 \rightarrow G_3) = (V_1, E_1) \rightarrow ((V_2, E_2) \rightarrow (V_3, E_3)) = (V_1, E_1) \rightarrow (V_2 \cup V_3, E_2 \cup E_3 \cup V_2 \times V_3) = (V_1 \cup V_2 \cup V_3, E_1 \cup E_2 \cup E_3 \cup V_2 \times V_3 \cup V_1 \times (V_2 \cup V_3) = (V_1 \cup V_2 \cup V_3, E_1 \cup E_2 \cup E_3 \cup V_2 \times V_3 \cup V_1 \times V_2 \cup V_1 \times V_3) = (V_1 \cup V_2 \cup V_3, E_1 \cup E_2 \cup E_3 \cup V_1 \times V_2 \cup V_1 \times V_3 \cup V_2 \times V_3)</tex> | + | <tex>G_1 \rightarrow (G_2 \rightarrow G_3) = (V_1, E_1) \rightarrow ((V_2, E_2) \rightarrow (V_3, E_3)) = (V_1, E_1) \rightarrow (V_2 \cup V_3, E_2 \cup E_3 \cup V_2 \times V_3) = (V_1 \cup V_2 \cup V_3, E_1 \cup E_2 \cup E_3 \cup V_2 \times V_3 \cup V_1 \times (V_2 \cup V_3)) = (V_1 \cup V_2 \cup V_3, E_1 \cup E_2 \cup E_3 \cup V_2 \times V_3 \cup V_1 \times V_2 \cup V_1 \times V_3) = (V_1 \cup V_2 \cup V_3, E_1 \cup E_2 \cup E_3 \cup V_1 \times V_2 \cup V_1 \times V_3 \cup V_2 \times V_3)</tex> |
Правая часть: | Правая часть: | ||
Строка 66: | Строка 62: | ||
Правая часть: | Правая часть: | ||
− | <tex>G_1 \rightarrow G_2 + G_1 \rightarrow G_3 = (V_1, E_1) \rightarrow (V_2, E_2) + (V_1, E_1) \rightarrow (V_3, E_3) = (V_1 \cup V_2, E_1 \cup E_2 \cup V_1 \times V_2) + (V_1 \cup V_3, E_1 \cup E_3 \cup V_1 \times V_3) = (V_1 \cup V_2 \cup V_1 \cup V_3, E_1 \cup E_2 \cup V_1 \times V_2 \cup E_1 \cup E_3 \cup V_1 \times V_3 = (V_1 \cup V_2 \cup V_3, E_1 \cup E_2 \cup E_3 \cup V_1 \times V_2 \cup V_1 \times V_3) = (V_1 \cup V_2 \cup V_3, E_1 \cup E_2 \cup E_3 \cup V_1 \times (V_2 \cup V_3))</tex> | + | <tex>G_1 \rightarrow G_2 + G_1 \rightarrow G_3 = (V_1, E_1) \rightarrow (V_2, E_2) + (V_1, E_1) \rightarrow (V_3, E_3) = (V_1 \cup V_2, E_1 \cup E_2 \cup V_1 \times V_2) + (V_1 \cup V_3, E_1 \cup E_3 \cup V_1 \times V_3) = (V_1 \cup V_2 \cup V_1 \cup V_3, E_1 \cup E_2 \cup V_1 \times V_2 \cup E_1 \cup E_3 \cup V_1 \times V_3) = (V_1 \cup V_2 \cup V_3, E_1 \cup E_2 \cup E_3 \cup V_1 \times V_2 \cup V_1 \times V_3) = (V_1 \cup V_2 \cup V_3, E_1 \cup E_2 \cup E_3 \cup V_1 \times (V_2 \cup V_3))</tex> |
Правая дистрибутивность доказывается аналогично. | Правая дистрибутивность доказывается аналогично. | ||
Строка 82: | Строка 78: | ||
<tex>G_1 \rightarrow G_2 + G_1 \rightarrow G_3 + G_2 \rightarrow G_3 = (V_1, E_1) \rightarrow (V_2, E_2) + (V_1, E_1) \rightarrow (V_3, E_3) + (V_2, E_2) \rightarrow (V_3, E_3) = (V_1 \cup V_2, E_1 \cup E_2 \cup V_1 \times V_2) + (V_1 \cup V_3, E_1 \cup E_3 \cup V_1 \times V_3) + (V_2 \cup V_3, E_2 \cup E_3 \cup V_2 \times V_3) = (V_1 \cup V_2 \cup V_1 \cup V_3 \cup V_2 \cup V_3, E_1 \cup E_2 \cup V_1 \times V_2 \cup E_1 \cup E_3 \cup V_1 \times V_3 \cup E_2 \cup E_3 \cup V_2 \times V_3) = (V_1 \cup V_2 \cup V_3, E_1 \cup E_2 \cup E_3 \cup V_1 \times V_2 \cup V_1 \times V_3 \cup V_2 \times V_3)</tex> | <tex>G_1 \rightarrow G_2 + G_1 \rightarrow G_3 + G_2 \rightarrow G_3 = (V_1, E_1) \rightarrow (V_2, E_2) + (V_1, E_1) \rightarrow (V_3, E_3) + (V_2, E_2) \rightarrow (V_3, E_3) = (V_1 \cup V_2, E_1 \cup E_2 \cup V_1 \times V_2) + (V_1 \cup V_3, E_1 \cup E_3 \cup V_1 \times V_3) + (V_2 \cup V_3, E_2 \cup E_3 \cup V_2 \times V_3) = (V_1 \cup V_2 \cup V_1 \cup V_3 \cup V_2 \cup V_3, E_1 \cup E_2 \cup V_1 \times V_2 \cup E_1 \cup E_3 \cup V_1 \times V_3 \cup E_2 \cup E_3 \cup V_2 \times V_3) = (V_1 \cup V_2 \cup V_3, E_1 \cup E_2 \cup E_3 \cup V_1 \times V_2 \cup V_1 \times V_3 \cup V_2 \times V_3)</tex> | ||
}} | }} | ||
− | == | + | |
− | + | ||
+ | {{Утверждение | ||
+ | |statement=Любой граф <tex>G = \{V, E\}</tex> можно представить в виде композиции сложений и соединений. | ||
+ | |proof=Действительно, <tex>G = \sum_{(u, v\in V)}u \rightarrow v</tex>, где <tex>\sum</tex> это послeдовательное применение операции сложения графов. | ||
+ | }} | ||
+ | == Построение графов в функциональных языках == | ||
Построенная нами алгебраическая структура очень полезна для использования в функциональных языках программирования. До введения понятия алгебры графов работа с ними в функциональных языках была очень неудобна и часто порождало ошибки. | Построенная нами алгебраическая структура очень полезна для использования в функциональных языках программирования. До введения понятия алгебры графов работа с ними в функциональных языках была очень неудобна и часто порождало ошибки. | ||
− | Дело в том, что способ представления в виде списка смежности либо матрицы смежности, широко используемых в императивных программах, оказался очень тяжело применим в функциональной среде. Компилятор при представлении графа в виде списка не может проверить, ни его корректность в | + | Дело в том, что способ представления в виде списка смежности либо матрицы смежности, широко используемых в императивных программах, оказался очень тяжело применим в функциональной среде. Компилятор при представлении графа в виде списка не может проверить, ни его корректность в принципе, ни корректность совершения некоторой операции над ним. Но если представить граф в виде последовательности операций из простейших графов, то почти все проблемы, связанные с построением графа и проверкой его корректности, устраняются. |
− | Подробная реализация на языке Haskell | + | Подробная реализация на языке <tex>\mathrm{Haskell}</tex><ref>[https://blogs.ncl.ac.uk/andreymokhov/an-algebra-of-graphs/ An algebra of graphs {{---}} "no time" Andrey Mokhov's blog]</ref>. |
== См. также == | == См. также == | ||
* [[Основные определения теории графов]] | * [[Основные определения теории графов]] | ||
Строка 102: | Строка 103: | ||
* [https://blogs.ncl.ac.uk/andreymokhov/graphs-a-la-carte/ Graphs à la carte {{---}} "no time" Andrey Mokhov's blog] | * [https://blogs.ncl.ac.uk/andreymokhov/graphs-a-la-carte/ Graphs à la carte {{---}} "no time" Andrey Mokhov's blog] | ||
− | [[Категория: | + | [[Категория: Алгоритмы и структуры данных]] |
+ | [[Категория: Основные определения теории графов]] |
Текущая версия на 19:22, 4 сентября 2022
Алгебра графов (англ. algebra of graphs) — способ построить на пространстве ориентированных графов алгебраическую структуру. Впервые такая возможность была продемонстрирована McNulty и George F. в 1983 году.[1]
Содержание
Основные определения
Определение: |
Пустой граф (англ. empty graph) — граф в котором нет вершин и ребер. Здесь и далее будем обозначать его как . То есть . |
Определение: |
Одиночный граф (англ. single graph) — граф состоящий из одной вершины. Здесь и далее для удобства будем обозначать и одиночный граф и множество его вершин одной буквой. Например, — граф содержащий толко одну вершину . |
Определение: |
Алгеброй графов (англ. algebra of graphs) называется множество ориентированных графов с двумя определенными на нем операциями.
Пусть и . Тогда
|
Cвойства операций
Данные операции обладают следующими свойствами очевидными из определения.
Сложение
- Наличие нейтрального элемента
Утверждение: |
- Коммутативность:
Утверждение: |
- Aссоциативность:
Утверждение: |
Соединение
- Наличие левого и правого нейтральных элементов:
Утверждение: |
- Ассоциативность:
Утверждение: |
Левая часть:
Правая часть: |
Другие свойства
- Левая и правая дистрибутивность:
Утверждение: |
Левая часть:
Правая часть: Правая дистрибутивность доказывается аналогично. |
- Декомпозиция:
Утверждение: |
Левая часть:
Правая часть: |
Утверждение: |
Любой граф можно представить в виде композиции сложений и соединений. |
Действительно, | , где это послeдовательное применение операции сложения графов.
Построение графов в функциональных языках
Построенная нами алгебраическая структура очень полезна для использования в функциональных языках программирования. До введения понятия алгебры графов работа с ними в функциональных языках была очень неудобна и часто порождало ошибки.
Дело в том, что способ представления в виде списка смежности либо матрицы смежности, широко используемых в императивных программах, оказался очень тяжело применим в функциональной среде. Компилятор при представлении графа в виде списка не может проверить, ни его корректность в принципе, ни корректность совершения некоторой операции над ним. Но если представить граф в виде последовательности операций из простейших графов, то почти все проблемы, связанные с построением графа и проверкой его корректности, устраняются.
Подробная реализация на языке [2].
См. также
Примечания
Источники информации
- McNulty, George F.; Shallon, Caroline R. (1983), "Inherently nonfinitely based finite algebras", Universal algebra and lattice theory (Puebla, 1982), Lecture Notes in Math., 1004, Berlin, New York: Springer-Verlag, pp. 206–231
- Algebra of Parameterised Graphs — Andrey Mokhov, Victor Khomenko, Newcastle University UK, ACM Transactions on Embedded Computing Systems, Vol. 1, No. 1, Article 1, Publication date: January 2014 .
- An algebra of graphs — "no time" Andrey Mokhov's blog
- Graphs à la carte — "no time" Andrey Mokhov's blog