Гиперграф - это просто график G=(V,E)
, где V
- это набор вершин (узлов), а E
- это подмножество набора мощности V
.Это структура данных.
Таким образом, общий граф - это просто гиперграф с рангом 2. (т. Е. Каждый набор в E содержит ровно две вершины).Направленный гиперграф использует пары (X,Y)
в качестве ребер, где X
и Y
- множества.
Если вы хотите смоделировать машину Тьюринга, вам нужно смоделировать «ленту».Вы хотите, чтобы лента «встроена» в график?Думаю, вам больше повезет, если подумать о тезисе Черча-Тьюринга (церковь Алонсо, лямбда-исчисление).Лямбда-исчисление является формой переписывающей системы, и, безусловно, есть ветвь, которая использует переписывание графа (и гиперграфы).
Конечно, переходы можно смоделировать как граф (я неконечно, что вы имели в виду, но прямой подход не очень помогает), если бы вы моделировали его нормально, вы, вероятно, создали бы словарь / хэш-карту с кортежами в качестве ключей (State, Symbol) и значениями (State, Rewrite,слева | справа).например,
states = {1,2,3}
symbols = {a,b,c}
moves = L, R
delta = { (1,a) -> (1,b,R)
(1,b) -> (2,c,L)
...
}
, поэтому, если вы хотите получить график, вам сначала понадобится V = состояния U символов U перемещений.Ясно, что они должны быть непересекающимися множествами.поскольку {1, a} -> {1, b, R} по определению равен {a, 1} -> {b, R, 1} и т. д.
states = {1,2,3}
symbols = {a,b,c}
moves = L, R
V = {1,2,3,a,b,c,L,R}
E = { ({1,a},{1,b,R})
({b,1},{L,2,c})
...
}
turing-hypergraph = (V,E)
Как я упоминал ранее,ищите переписывание графа или переписывание термина.