2017-01-11 2 views
0

Я пытаюсь создать машину состояний, которая будет пересекать все возможные переходы между состояниями. Однако конечный автомат не может перейти от данного состояния к себе. На диаграмме ниже, я выработал, что, учитывая число состояний (N), число переходов равно N^2 - Н.State Machine, способный ко всем переходам

State Transitions for 5 States

Любые идеи о том, как к этому подойти, пожалуйста?

+0

Вы хотите осуществить это? –

+0

Да, у меня есть 5-битный шаблон, который я хочу отправить на устройство, все возможные переходы, т.е. 32 состояния с 992 переходами – Malteaser6900

+0

Пример: для 2-битного шаблона у меня 4 состояния A, B, C, D. Я хочу покрыть A> B, A> C, A> D, B> A, B> C, B> D, C> A, C> B, C> D, D> A, D> B и D> C. – Malteaser6900

ответ

1

Непонятно, проблема в первый раз, вот еще одна попытка.

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

states = 4 # Select number of states 

path = [0] # Start in state 0 (must be zero) 

def walk(path): 
    home_state = path[-1] 
    for i in range(home_state + 2, states): 
     # We leave a state out that we go to next 
     path.append(i) 
     path.append(home_state) 
    if home_state + 1 < states: 
     path.append(home_state + 1) 
     walk(path) 
     path.append(home_state) 

walk(path) 
print path 

должен дать

[0, 2, 0, 3, 0, 1, 3, 1, 2, 3, 2, 1, 0] 
+0

Мне пришлось бы удалить дубликаты из этого списка. Я имею в виду, что, используя вашу логику выше, вы создадите переходы, как я описал в своем ответе по первоначальному вопросу, т.е. A> B, A> C, A> D, B> A, B> C, B> D, C> A, C> B, C> D, D> A, D> B и D> C. Но это переводит в один длинный список переходов A> B> A> C> A> D> B> A> B> C> B> D> C> A> C> B> C> D> D> A> D > B> D> С. Это вводит дубликаты переходов, первый из которых в этом списке равен B> A. – Malteaser6900

+0

Хорошо, это делает его немного сложнее. Я обновил решение. –

+0

@ Malteaser6900 у вас появилась возможность попробовать новое решение? –

Смежные вопросы