Я нахожусь на курсе теории высшего уровня, специализируясь в области компьютерных наук, и ему было поручено разработать NFA. Если я не ошибаюсь, NFA принимает вход, если любой путь в NFA может взять строку и перейти в принимающее состояние. Я понимаю и могу хорошо создавать DFA и понимать необходимость того, чтобы NFA выражали проблемы, которые были бы значительно больше в эквивалентном DFA. Но я немного смущен тем, насколько конкретным должен быть NFA, чтобы что-то принять.NFA Acceptance Confusion
Например, одна из моих проблем в выполнении домашних заданий выглядят следующим образом:
Дайте НКУ для {ш х ш^R | x ∈ {0, 1} *, w ∈ {0, 1}^2},
где, если я правильно интерпретировал w^R, это обратная строка w, x - некоторая двоичная строка произвольной длины , и w является либо «00», «01», «10», «11».
Таким образом, по существу NFA принимает строку, которая начинается с w, имеет некоторую строку x, а затем заканчивается в обратном порядке w.
Я уже разработал правильно, хотя и очень большой DFA для этого в предыдущем домашнем задании, но я уверен, что это научить меня, что NFA проще использовать в некоторых контекстах, чем DFA. Я придумал что-то вроде этого для ответа:
http://s1056.photobucket.com/user/pcd132/media/Untitled_zps4317347c.jpg.html
Эта NFA принимает почти любую непустую двоичную строку, так же как она удовлетворяет вопрос? Я просто смущен концепцией, если это каким-то образом, каким-то образом примет что-то, оно должно быть принято. Или я должен построить его таким образом, чтобы он каким-то образом принимал условие, но ничего больше? Спасибо за помощь и разъяснение, если я не понимаю этого.