Да, вы правы, компьютеры являются детерминированными компьютерами. Недетерминированные модели более полезны для теоретических целей, иногда детерминистическое решение не столь очевидно для определения (или, скажем, постановка задачи) и так мало трудно найти решение. Затем один из подходов заключается в том, чтобы сначала спроектировать недетерминированную модель, которую можно сравнительно легко спроектировать, а затем попытаться преобразовать ее в детерминистическую. Ниже я попытался продемонстрировать, что я имею в виду, на примере. Рассмотрим регулярное выражение:
(01)*01(0 + 1)*
Теперь предположим, что если вас попросят нарисовать DFA для языка, созданного выше RE.
С моим знанием проектирования ассоциаций, я знаю , что (1) , когда *
присутствует в регулярном выражении показала мне нужно соответствующее цикл в FA (2) Соединить операции как a.b
средство что - то вроде: .(q0)─a→(q1)─b→(q2)
Итак, с первой попытки я бы нарисовал NFA как:
Хотя это не является детерминированным решением, но выглядит очень простым FA, который может быть легко разработан с использованием данного регулярного выражения. Моя аналогия, чтобы показать сходство между приведенным выше регулярным выражением и моим NFA, выглядит следующим образом:
- Цикл в состоянии q 0 должен быть для
(01)*
01
(после (01)*
) дает(q0)─0→(q1)─1→(q2)
(0 + 1)*
дает сам цикл в состоянии q 2 для метки 0, 1
В соответствии с моей аналогией, я думаю, что ФА, который я нарисовал выше, сравнительно просто извлечь из данного RE. И, к счастью, в классе конечных автоматов каждая недетерминированная модель может быть преобразована в эквивалентную детерминированную. У нас есть алгоритмический метод для преобразования NFA в DFA . Так что я могу легко конвертировать выше NFA в DFA:
Другая часть , к сожалению , это не всегда возможно преобразовать недетерминированное модель в детерминированный, например , класс для детерминированной толчке вниз автомата является подмножество класса детерминированных стекового автомата «проверить диаграмму Венна » , и вы не всегда можете конвертировать NPDA в КПК.
Обычно, когда невозможно преобразовать недетерминированное решение в детерминированное, тогда с помощью недетерминированного решения мы определяем детерминированное решение в субдомене (или, скажем, частичной области) вместо полной области. Или мы определяем решение другими способами (например, жадным подходом), который, конечно, может не дать вам оптимального решения .
Иногда недетерминизм является эффективным механизмом для точного и эффективного описания некоторой сложной проблемы / решения, например, недетерминированные машины могут служить моделью алгоритма поиска и возврата (читай: как строковый процесс в недетерминированной модели с использованием возврата) ). Напротив, детерминированные модели лучше представляют эффективные, минимизированные и менее избыточные решения.
Здесь я также хотел бы процитировать из Википедии Использование недетерминированного алгоритма :
При разработке алгоритмов недетерминированные алгоритмы часто используются, когда проблема, решаемая алгоритмом, по своей природе допускает множественные результаты (или когда существует один исход с несколькими путями, по которым можно обнаружить результат, каждый из которых одинаково предпочтителен). Важно то, что каждый результат, который дает недетерминированный алгоритм, действителен, независимо от того, какой выбор делает алгоритм во время работы.
Большое количество проблем может быть концептуализировано с помощью недетерминированных алгоритмов, включая самый известный нерешенный вопрос в теории вычислений, P vs NP.
Как @keshlam также упомянул в своем комментарии : «Недетерминизм» на практике используется для обозначения любой непредсказуемости в результате какого-либо процесса. Например, параллельные программы демонстрируют недетерминированное поведение - два выполнения одной и той же программы с одним и тем же вводом могут давать разные результаты (если механизм управления параллелизмом не применяется). Подробнее об этом читайте в разделе «Полезность недетерминизма» .
Я бы также предложил вам прочитать следующие ссылки:
1. В чем разница между недетерминизмом и случайностью?
2. 9.2.2. Недетерминированные и вероятностные модели: (а). Недетерминированный: я понятия не имею, что сделает природа. (б). Вероятностный: я наблюдал за природой и собирал статистику.
3. Недетерминированное программирование