Автомат - это абстрактная модель цифрового компьютера. Цифровые компьютеры полностью детерминированы; их состояние в любое время однозначно предсказуемо из входных данных и исходного состояния.
Когда мы пытаемся моделировать реальные системы, зачем включать недетерминизм в теорию автоматов?
Ответы:
Да, вы правы, компьютеры являются детерминированными компьютерами. Недетерминированные модели более полезны для теоретических целей, иногда детерминистическое решение не столь очевидно для определения (или, скажем, постановка задачи) и так мало трудно найти решение. Затем один из подходов заключается в том, чтобы сначала спроектировать недетерминированную модель, которую можно сравнительно легко спроектировать, а затем попытаться преобразовать ее в детерминистическую. Ниже я попытался продемонстрировать, что я имею в виду, на примере. Рассмотрим регулярное выражение:
Теперь предположим, что если вас попросят нарисовать DFA для языка, созданного выше RE.
С моим знанием проектирования ассоциаций, я знаю , что (1) , когда
*
присутствует в регулярном выражении показала мне нужно соответствующее цикл в FA (2) Соединить операции какa.b
средство что - то вроде: .(q0)─a→(q1)─b→(q2)
Итак, с первой попытки я бы нарисовал NFA как:
Хотя это не является детерминированным решением, но выглядит очень простым FA, который может быть легко разработан с использованием данного регулярного выражения. Моя аналогия, чтобы показать сходство между приведенным выше регулярным выражением и моим NFA, выглядит следующим образом:
(01)*
01
(после(01)*
) дает(q0)─0→(q1)─1→(q2)
(0 + 1)*
дает сам цикл в состоянии q 2 для метки 0, 1В соответствии с моей аналогией, я думаю, что ФА, который я нарисовал выше, сравнительно просто извлечь из данного RE. И, к счастью, в классе конечных автоматов каждая недетерминированная модель может быть преобразована в эквивалентную детерминированную. У нас есть алгоритмический метод для преобразования NFA в DFA . Так что я могу легко конвертировать выше NFA в DFA:
Другая часть , к сожалению , это не всегда возможно преобразовать недетерминированное модель в детерминированный, например , класс для детерминированной толчке вниз автомата является подмножество класса детерминированных стекового автомата «проверить диаграмму Венна » , и вы не всегда можете конвертировать NPDA в КПК.
Обычно, когда невозможно преобразовать недетерминированное решение в детерминированное, тогда с помощью недетерминированного решения мы определяем детерминированное решение в субдомене (или, скажем, частичной области) вместо полной области. Или мы определяем решение другими способами (например, жадным подходом), который, конечно, может не дать вам оптимального решения .
Иногда недетерминизм является эффективным механизмом для точного и эффективного описания некоторой сложной проблемы / решения, например, недетерминированные машины могут служить моделью алгоритма поиска и возврата (читай: как строковый процесс в недетерминированной модели с использованием возврата) ). Напротив, детерминированные модели лучше представляют эффективные, минимизированные и менее избыточные решения.
Здесь я также хотел бы процитировать из Википедии Использование недетерминированного алгоритма :
Как @keshlam также упомянул в своем комментарии : «Недетерминизм» на практике используется для обозначения любой непредсказуемости в результате какого-либо процесса. Например, параллельные программы демонстрируют недетерминированное поведение - два выполнения одной и той же программы с одним и тем же вводом могут давать разные результаты (если механизм управления параллелизмом не применяется). Подробнее об этом читайте в разделе «Полезность недетерминизма» .
Я бы также предложил вам прочитать следующие ссылки:
1. В чем разница между недетерминизмом и случайностью?
2. 9.2.2. Недетерминированные и вероятностные модели: (а). Недетерминированный: я понятия не имею, что сделает природа. (б). Вероятностный: я наблюдал за природой и собирал статистику.
3. Недетерминированное программирование
источник
Скорее наоборот: автоматы возникли первыми, как математические модели. А недетерминизм вполне закономерен, перед вами часто открывается несколько путей. Вместо какого-то грязного способа указать, что все пути должны идти до конца в некотором порядке, и, возможно, увязнуть в бесконечных ветвях, и ... просто использовать недетерминизм.
И хотя недетерминированные языки программирования не являются мейнстримом, у них богатая история, возможно, начинающаяся с GCL Дейкстры . По мере того, как машины получают все больше и больше ядер (независимых процессоров), некоторая форма недетерминизма проникает во все программирование.
источник
NFA могут быть использованы на практике, посмотрите этот ответ на stackexchange. Причина в том, что конструкцию блока питания можно, так сказать, моделировать на лету. Чтобы смоделировать NFA на детерминированном компьютере, мы просто отслеживаем возможные состояния, в которых может быть NFA. Как правило, это число будет небольшим, и поэтому моделирование будет быстрым. Это гораздо более практично, чем запуск реальной конструкции блока питания: результирующий автомат может быть очень большим, хотя на практике большинство наборов достигается редко.
Недетерминизм также важен для сложности вычислений, где он используется для определения класса NP. (Класс NP также имеет другие эквивалентные определения, например, с использованием свидетелей.)
источник
Вы правильно утверждаете, что автоматы являются моделями, поэтому недетерминизм может иметь две части:
Использовать при моделировании реальных задач.
Кроме того, недетерминированные автоматы могут предоставлять более компактные представления языков. Например, хорошо известно, что существуют NFA, минимальный эквивалентный DFA которых экспоненциально больше.
Используйте в теории.
Использование недетерминизма может упростить доказательства, например, преобразование регулярных выражений в конечные автоматы.
источник
(Это переформулировка некоторых других ответов, но я все равно выложу :)
Вы пишете: автомат - это абстрактная модель цифрового компьютера.
Я не согласен! Автоматы моделируют то, как мы, люди, определяем вычисления, а не только то, как их выполняют компьютеры. Недетерминизм как раз и есть разница. Наши спецификации часто недетерминированы.
Например, возьмите сортировку слиянием . Сортировка слиянием - это сортировка путем разделения элементов, подлежащих сортировке, на две половины примерно одинакового размера, сортировки каждой половины с использованием сортировки слиянием и слияния отсортированных результатов. Это полностью определяет идею сортировки слиянием, но она не является детерминированной: она не определяет порядок сортировки половинок (для нас все равно, это может быть сделано одновременно), а также не указывает точный способ определить раскол. Эти детали необходимо будет заполнить, чтобы получить детерминированную последовательную версию сортировки слиянием, которая может быть реализована однопоточной компьютерной программой, но я бы сказал, что они являются частью определенного способа выполнения сортировки слиянием, а не сама идея слияния сортируется.
То же самое верно для алгоритмов в целом - например, рецепты поваренной книги. Некоторые люди определяют алгоритмы как детерминированные, и в этом случае это более общее и, на мой взгляд, более естественное понятие «алгоритм» требует другого названия.
Идея работы с недетерминированными спецификациями была формализована методом программирования Дейкстры, который начинается с спецификаций, которые дают только предварительные и постусловия, которым должна соответствовать программа, и систематически разрабатывает из них детерминистическую, императивную программу. Дейкстра, вероятно, сказал бы: сортировка - это проблема, отношения между предварительными и постусловиями, которые мы пытаемся установить; Сортировка слияниемподход к этому, где-то на полпути между спецификацией проблемы и детерминированным решением; конкретный, детерминированный алгоритм сортировки слиянием является конкретным детерминированным решением. Но тот же общий подход может быть использован для разработки параллельных программ, в которых конечная программа все еще недетерминирована. Такие программы могут, например, выполняться в распределенных вычислительных средах.
источник
Вы правы, мы НЕ можем построить недетерминированную машину. Поэтому цель не в том, чтобы использовать концепцию для создания лучших машин. Скорее, недетерминизм является полезным понятием при попытке понять вычисления. Например, теперь мы знаем, что с точки зрения вычислимости недетерминизм не является чем-то более мощным, чем детерминизм, а это означает, что мы можем моделировать недетерминированную машину, используя детерминистскую. Однако, с точки зрения сложности, недетерминизм позволяет нам, например, рассуждать и пытаться понять связь между трудностью поиска эффективного решения проблемы и трудностью проверки решения (которая является известной проблемой P против NP) , И так далее. Поэтому главная причина изучения недетерминизма - теоретическая.
источник
изобретение машины Тьюринга было сделано в 1936 году Тьюрингом. FSM-подобные модели были представлены МакКаллохом и Питтсом , двумя нейрофизиологами, в качестве модели для нейробиологической активности в 1943 году со страницы истории Stanford CS :
не историк CS, но подозреваю, что модель МакКаллоха-Питтса не включала недетерминизм, а модель Мили - Мура в естественное обобщение / абстрагирование формальной / теоретической концепции. обратите внимание, что DFA и NFA имеют одинаковую репрезентативную силу, поэтому, если кто-то желает моделировать реальные системы, у вас есть выбор. Одно из основных отличий заключается в том, что NFA может быть намного меньше, чем эквивалентный DFA (например, существует естественный элемент сжатия данных / информации). Есть также естественные аспекты / аналоги параллелизма в исследовании NFA.
источник
Прежде всего, я хотел бы сказать спасибо всем людям, которые ответили на вопрос. Все ответы важны и добавляют некоторую полезную информацию. Но так как это сложный вопрос для начинающих, и мне нужно достаточно времени, чтобы хорошо его понять, я постараюсь обобщить, что я получил от всех ответов и из некоторых книг:
На самом деле у меня была путаница, связанная с механизмом недетерминированной модели. Я всегда задавался вопросом о недетерминированной машине, поскольку это немеханическая машина, которой нет в реальном мире. Я всегда сравнивал Automata с нашими современными компьютерами, которые по своей природе являются полностью детерминированными. На самом деле я не совсем правильно понимал недетерминированную модель. Теперь я думаю, что хорошо понимаю недерминистскую модель: недетерминированная машина - это машина, которая всегда следует по пути выполнения, который приводит к принятию строки (без обратного отслеживания). Но как это может быть возможно в реальной жизни? : Для современных компьютеров абсолютно невозможно быть таким умным, чтобы предсказывать будущее. Так почему вообще недетерминизм? Ответ на этот вопрос довольно сложный. Из этого я пришел к выводу, что: Теория автоматов существовала, когда компьютеров не существовало (сначала теория, а потом практическая). Это чисто теоретический предмет, а понятие недетерминизма пришло интуитивно. Мотивом предмета «Теория автоматов» было не то, чтобы иметь дело с практическими компьютерами. Но когда практически компьютер приходит, то с помощью теории автоматов мы можем точно определить практические компьютеры: каковы ограничения современных компьютеров. Какие алгоритмические проблемы очень сложны для компьютеров и настолько непрактичны (Здесь роль недерминизма очень важна, поэтому можно различить два класса сложности P и NP). Каковы решения этих непрактичных задач, с помощью которых он может быть выполнен сравнительно быстрее? Это полезность недетерминизма. Это чисто теоретический предмет, а понятие недетерминизма пришло интуитивно. Мотивом предмета «Теория автоматов» было не то, чтобы иметь дело с практическими компьютерами. Но когда практически компьютер приходит, то с помощью теории автоматов мы можем точно определить практические компьютеры: каковы ограничения современных компьютеров. Какие алгоритмические проблемы очень сложны для компьютеров и настолько непрактичны (Здесь роль недерминизма очень важна, поэтому можно различить два класса сложности P и NP). Каковы решения этих непрактичных задач, с помощью которых он может быть выполнен сравнительно быстрее? Это полезность недетерминизма. Это чисто теоретический предмет, а понятие недетерминизма пришло интуитивно. Мотивом предмета «Теория автоматов» было не то, чтобы иметь дело с практическими компьютерами. Но когда практически компьютер приходит, то с помощью теории автоматов мы можем точно определить практические компьютеры: каковы ограничения современных компьютеров. Какие алгоритмические проблемы очень сложны для компьютеров и настолько непрактичны (Здесь роль недерминизма очень важна, поэтому можно различить два класса сложности P и NP). Каковы решения этих непрактичных задач, с помощью которых он может быть выполнен сравнительно быстрее? Это полезность недетерминизма. Но когда практически компьютер приходит, то с помощью теории автоматов мы можем точно определить практические компьютеры: каковы ограничения современных компьютеров. Какие алгоритмические проблемы очень сложны для компьютеров и настолько непрактичны (Здесь роль недерминизма очень важна, поэтому можно различить два класса сложности P и NP). Каковы решения этих непрактичных задач, с помощью которых он может быть выполнен сравнительно быстрее? Это полезность недетерминизма. Но когда практически компьютер приходит, то с помощью теории автоматов мы можем точно определить практические компьютеры: каковы ограничения современных компьютеров. Какие алгоритмические проблемы очень сложны для компьютеров и настолько непрактичны (Здесь роль недерминизма очень важна, поэтому можно различить два класса сложности P и NP). Каковы решения этих непрактичных задач, с помощью которых он может быть выполнен сравнительно быстрее? Это полезность недетерминизма. Каковы решения для этих непрактичных проблем, с помощью которых это может быть выполнено сравнительно быстрее? Это полезность недетерминизма. Каковы решения для этих непрактичных проблем, с помощью которых это может быть выполнено сравнительно быстрее? Это полезность недетерминизма.
Пожалуйста, поправьте меня, если что-то не так.
источник
Недетерминизм полезен, потому что он помогает вам понять детерминизм, но не наоборот. Вы могли бы сказать, что недетерминизм - большая идея. Детерминированная машина Тьюринга является частным случаем недетерминированного. - Недетерминизм может помочь нам понять, почему на современных платформах трудно определить некоторые проблемы. Существует ряд вычислительных задач, которые не имеют эффективного решения на детерминированной вычислительной платформе, но мы понимаем, что на недетерминированных могут быть эффективные решения. ... состояние, кодировка, недетерминизм, все они связаны http://people.cs.umass.edu/~rsnbrg/teach-eatcs.pdf
В детерминированной машине Тьюринга набор правил предписывает не более одного действия, которое должно быть выполнено для любой конкретной ситуации. Недетерминированная машина Тьюринга (NTM), напротив, может иметь набор правил, которые предписывают более одного действия для данной ситуации. http://en.wikipedia.org/wiki/Non-deterministic_Turing_machine Если вы можете создать программный блок, который может управлять переходами состояний настолько хорошо, что он может обрабатывать более одного действия, вы можете получить производительность за пределами детерминированных машин.
источник
Детерминизм имеет сильную тенденцию нарушать симметрии. Эта тенденция еще сильнее проявляется при последовательном детерминизме, но понятие ациклического ориентированного графа и топологический порядок такого графа позволяют игнорировать разницу между детерминизмом и последовательным детерминизмом. Недетерминизм является надмножеством детерминизма, который позволяет сохранить больше симметрий. При проектировании решения задачи, начиная с недетерминированного решения, можно сохранить полезные симметрии, а также сохранить описание решения небольшим и компактным. Нарушение симметрии может быть затем делегировано на более поздней стадии во время реализации, одновременно преобразуя недетерминированное решение в детерминированное решение.
Часто недетерминизм означает, что понятие частичной функции заменяется понятием отношения. В этом случае недетерминированная машина может работать как вперед, так и назад во времени, хотя в целом это невозможно для детерминированной машины. Если мы вместо этого работаем с полными функциями для детерминизма и многозначными полными функциями для недетерминированного симметрии, симметрия уже не так хороша, но все же можно заставить работать
источник