Я создаю минимизатор DFA, используя python, и я застрял. Я использую алгоритм, который нашел в Интернете, но он не дает мне правильного результата, и я не могу понять, почему.
functions = {'p1,c': 'p2', 'p1,d': 'p6', 'p2,c': 'p7', 'p2,d': 'p3', 'p3,c': 'p1', 'p3,d': 'p3', 'p4,c': 'p3',
'p4,d': 'p7', 'p5,c': 'p8', 'p5,d': 'p6', 'p6,c': 'p3', 'p6,d': 'p7', 'p7,c': 'p7', 'p7,d': 'p5',
'p8,c': 'p7', 'p8,d': 'p3'}
DS = ['p1', 'p2', 'p3', 'p4', 'p5', 'p6', 'p7', 'p8']
acceptedStates = ['p3']
symbols = ['c', 'd']
# ---- some more code here that's currently not important ----
dist = []
for pair in pairs: #pairs is a list of lists with all possible pairs of states
if (pair[0] in acceptableStates and par[1] not in prihvatljivaStanja) or (pair[0] not in acceptableStates and par[1] in acceptableStates):
dist.append(pair)
for pair in pairs:
for symbol in symbols:
priv1 = functions[par[0] + ',' + symbol]
priv2 = functions[par[1] + ',' + symbol]
if (priv1 in acceptableStates and priv2 not in acceptableStates) or (priv1 not in acceptableStates and priv2 in acceptableStates):
dist.append(pair)
for i in pairs:
if i not in dist:
print(i)
По сути, я пытаюсь распечатать все неразличимые состояния в конце. Правильный результат (для примера, который я использую):
dist = [['p1', 'p5'], ['p2', p8'], ['p4', 'p6']]
, и результат, который я получаю:
dist = [['p1', 'p5'] #correct
['p1', 'p7']
['p2', 'p8'] #correct
['p4', 'p6'] #correct
['p5', 'p7']]
Как видите, все текущие в но есть некоторые дополнительные, которые не должны быть здесь. Проходя через код, я понимаю, почему это происходит, но я не уверен, как это исправить. Любые идеи?