У меня проблема с NFA. Я попытался реализовать это, но что, если у нас будет ситуация, как на картинке с первым l oop - например, мы можем выбрать q0 или q1, если мы начнем с символа 0;
def __init__(self, states, alphabet, transition_function, start_state, accept_states):
self.states = states
self.alphabet = alphabet
self.transition_function = transition_function
self.start_state = start_state
self.accept_states = accept_states
self.current_state = start_state
return
def transition_to_state_with_input(self, input_value):
if (self.current_state, input_value) not in self.transition_function.keys():
self.current_state = None
return
self.current_state = self.transition_function[(self.current_state, input_value)]
return
def in_accept_state(self):
return self.current_state in accept_states
def go_to_initial_state(self):
self.current_state = self.start_state
self.list_of_state.append(self.current_state)
print("\tactual state: " + self.current_state)
return
def run_with_input_list(self, input_list):
self.go_to_initial_state()
for inp in input_list:
self.transition_to_state_with_input(inp)
print("\tinput symbol: " + inp)
print("\tactual state: " + str(self.current_state))
if self.current_state is not None:
self.list_of_state.append(self.current_state)
continue
print(self.list_of_state)
self.list_of_state.clear()
return self.in_accept_state()
pass
Вывод:
INPUT: 112
actual state: q0
input symbol: 1
actual state: ('q0', 'q2')
input symbol: 1
actual state: None
input symbol: 2
actual state: None
['q0', ('q0', 'q2')]
False
в этом случае наше фактическое состояние должно быть q2 без списка состояний. Как я могу выбрать правильный путь?