Я пересматривал Теорию вычислений для забавы, и этот вопрос меня мучил некоторое время (забавно, никогда не думал об этом, когда я изучал Теорию автоматов в моем старшекурснике). Итак, «почему» мы точно изучаем детерминированные и недетерминированные конечные автоматы (DFA / NFAs)? Итак, вот некоторые ответы, которые я придумал после ответа, но все еще не вижу их общего вклада в момент «ага»:
- Изучить то, что они есть и не способны, т.е. ограничения
- Почему?
- Так как они являются базовыми моделями теоретических вычислений и заложат основу других более способных моделей вычислений.
- Что делает их «основными»? Это то, что у них есть только один бит памяти и переходы между состояниями?
- Хорошо, и что? Как все это способствует ответу на вопрос вычислимости? Кажется, машины Тьюринга помогают понять это очень хорошо, и есть «меньшие» модели вычислений, такие как PDA, DFA / NFAs / Regexes и т. Д. Но если кто-то не знает FA, на чем они упускают?
Так что, хотя я в некоторой степени «понимаю», я не могу ответить на этот вопрос для себя? Как лучше всего объяснить «зачем изучать D / N-FA»? На какой вопрос они хотят ответить? Как это помогает и почему это первое, чему учат в теории автоматов?
PS: я знаю о различных лексикографических приложениях и шаблонах, которые могут быть реализованы как таковые. Тем не менее, я не хочу знать, для чего он может быть использован практически, но какова была его причина для использования / изобретения / дизайна во время кульминации изучения теории вычислений. Исторически говоря, что побудило человека начать с этого и к какому «ага» пониманию оно должно привести? Если бы вам пришлось объяснить их важность студентам CS, только начинающим изучать теорию автоматов, как бы вы это сделали?
источник
Ответы:
Я лично наслаждался несколькими Ага! моменты из изучения базовой теории автоматов. НФА и ДФА образуют микрокосм для теоретической информатики в целом.
Я мог бы продолжать. (И дальше.) * Я считаю полезным иметь автоматы в затылке и время от времени вспоминать их, чтобы понять новую концепцию или получить представление о математических идеях высокого уровня. Я сомневаюсь, что обо всем, что я упомянул выше, можно рассказать в первых лекциях курса или даже в первом курсе. Это долгосрочные вознаграждения, основанные на первоначальных инвестициях в начальные лекции курса теории автоматов.
Говоря о вашем названии: я не всегда стремлюсь к просветлению, но когда я это делаю, я предпочитаю конечные автоматы. Оставайся жаждущим, мой друг.
источник
Есть много веских теоретических причин для изучения N / DFA. Два, которые сразу приходят на ум:
Машины Тьюринга (мы думаем) фиксируют все, что вычислимо. Однако мы можем спросить: какие части машины Тьюринга являются «существенными»? Что происходит, когда вы ограничиваете машину Тьюринга различными способами? DFAs - очень серьезное и естественное ограничение (устранение памяти). КПК являются менее серьезным ограничением и т. Д. Теоретически интересно посмотреть, что дает вам память и что происходит, когда вы обходитесь без нее. Это кажется мне очень естественным и основным вопросом.
Машины Тьюринга нуждаются в бесконечной ленте. Наша вселенная конечна, поэтому в некотором смысле каждое вычислительное устройство является DFA. Похоже, важная, и снова естественная тема для изучения.
Спрашивать, почему нужно изучать DFAs, все равно, что спрашивать, почему нужно изучать теорему Годеля о полноте, когда по-настоящему интересной является его теорема о неполноте .
Причина, по которой они являются первой темой в теории автоматов, заключается в том, что естественно создавать более сложные режимы из менее сложных.
источник
Чтобы добавить еще одну перспективу к остальным ответам: потому что вы можете делать вещи с конечными автоматами, в отличие от машин Тьюринга.
Практически любые интересные свойства машин Тьюринга неразрешимы. Напротив, с конечными автоматами, почти все это разрешимо. Равенство языка, включение, пустота и универсальность - все это решаемо. В сочетании с этими конечными автоматами закрываются практически все операции, которые вы можете придумать, и что эти операции вычислимы, вы можете делать практически все, что вы когда-либо захотите делать с конечными автоматами.
Это означает, что если вы можете захватывать что-либо с помощью конечных автоматов, вы автоматически получаете множество инструментов для анализа. Например, при тестировании программного обеспечения системы и их спецификации могут быть смоделированы как конечные автоматы. Затем вы можете автоматически проверить, правильно ли ваша система реализует спецификацию.
Таким образом, машины Тьюринга и конечные автоматы учат людей интересному и вездесущему контрасту: больше описательной силы идет рука об руку с меньшей управляемостью. Конечные автоматы не могут описать многое, но мы, по крайней мере, можем с ними что-то делать.
источник
Государственный. вам нужно понять, что можно моделировать мир (для определенных задач) как конечное пространство состояний, и в этих настройках можно подумать о вычислениях. Это простое понимание, но чрезвычайно полезно, если вы занимаетесь программированием - вы будете сталкиваться с состоянием снова и снова и снова, и FA даст вам возможность подумать о них. Я считаю это достаточным оправданием для преподавания полного класса. Конечно, состояние может быть детерминированным или недетерминированным. Таким образом DFA и NFA, но вы можете конвертировать между ними и т. Д.
Вторая вещь, которую нужно выучить, - это теорема Халтинга. Что связано с теоремой Гёделя о неполноте. (Вы не можете построить машину, которая может вычислить все, и есть математические утверждения, которые вы не можете ни доказать, ни опровергнуть, и поэтому их необходимо принимать за аксиомы. То есть мы живем в мире, который не имеет конечного описания или реального оракулы - ты для нас!)
Итак, я закончил обучение по математике, и вы привыкли к мысли, что вы изучаете вещи, которые вы не знаете, почему вы учитесь (теория групп, теория мер, теория множеств, гильбертовы пространства и т. Д., И т. Д., И т. Д. [Все хорошие вещи КСТАТИ]). Есть кое-что, что можно сказать об обучении тому, как учиться - в следующий раз вам придется выучить некоторую причудливую математику (потому что вы должны использовать это, чтобы сделать что-то там в реальном мире), что выглядит очень странно, если вы идете с ходу. В частности, третье, чему нужно научиться, - это математическая зрелость - умение тщательно спорить о вещах, знать, когда доказательства правильны или нет, записывать доказательства и т. Д. Если у вас это уже есть, этот курс прост, и вам будет все равно много почему вы изучаете это.
За исключением этого, курс - пустая трата вашего времени, как и все остальное. В частности, вы можете жить счастливой жизнью, не зная этого материала. Но это буквально верно для всех знаний. Более менее. Для меня курс в университете стоит своего времени, если вы посмотрите на мир по-другому после его изучения. Это определенно один из курсов, который изменил мой взгляд на мир. Что еще можно спросить?
источник
Хотя это и не та причина, по которой они были первоначально изучены, конечные автоматы и обычные языки, которые они распознают, достаточно гибки, чтобы их можно было использовать в качестве строительных блоков для более сложных математических теорий. В этом контексте рассмотрим, в частности, автоматические группы (группы, в которых элементы могут быть представлены строками на обычном языке и в которых произведения элементов на генераторы групп могут быть вычислены с помощью преобразователей конечных состояний) и мягкие подвиги (подвиги пространства сдвигов, чьи Запрещенные слова образуют обычный язык). Так что есть причины их изучать, даже если вы интересуетесь чистой математикой, а не информатикой.
Конечные автоматы также использовались при разработке алгоритмов для других типов объектов. Например, алгоритм Кулика для проверки, является ли одномерный клеточный автомат обратимым, включает в себя конструирование, изменение и тестирование свойств определенных NFA. А в 1986 году в статье FOCS Натараджана было показано, как решить определенную проблему при проектировании механических сборочных линий, сократив ее до вычисления конечных автоматов.
источник
Вы задаете (как минимум) два разных вопроса: (а) Какие части теории в настоящее время строятся на конечных автоматах? (б) Почему конечные автоматы были разработаны в первую очередь? Я думаю, что лучший способ справиться с последним - взглянуть на старые документы, такие как:
Вот первые два абзаца:
Короче говоря, они были разработаны как модели реальных компьютеров, которые имеют ограниченные ресурсы.
источник
Другая причина в том, что это относительно практические теоретические модели. Машина Тьюринга, помимо невозможности бесконечной ленты, является своего рода неловким приспособлением для программирования компьютера (обратите внимание, что это не очень хорошая аналогия для начала!). КПК и DFA, однако, вполне поддаются модели реальных программ в том смысле, что дизайн PDA / DFA часто можно легко превратить в реальную программу. Например, дизайн компилятора широко использует их. Таким образом, в такого рода точках связи между теорией и практикой мы получаем представление о том, как все это связано друг с другом и что мы можем и не можем делать.
источник
Проверьте игру «Живой бинарный сумматор» здесь: http://courstltc.blogspot.com/2012/12/living-binary-adder-game.html Я использовал эту игру для моих учеников в первых главах о DFA / NFA. Это иллюстрирует две важные вещи в теории автоматов:
Это иногда приносит момент «Ага» моим ученикам.
источник
Концепция DFA очень полезна для разработки эффективных решений многих типов проблем. Одним из примеров является сеть. Каждый протокол может быть реализован как конечный автомат. Реализация этого решения делает код проще и означает более низкую частоту появления дефектов. Это также означает, что изменения в коде проще и имеют меньшее влияние, опять же с более низким уровнем дефектов.
Некоторым людям трудно рассматривать сетевой протокол как конечный автомат, но те, кто может совершить скачок, считают его очень полезным с точки зрения отдачи от усилий.
источник
На самом деле, мои ученики иногда спрашивают именно об этом - потратив большую часть семестра на конечные автоматы и, наконец, прибыв на машины Тьюринга. Зачем тратить столько времени на более слабый формализм, если доступен более сильный? Поэтому я объясняю присущий компромисс между выразительной силой и аналитической сложностью. Более богатые модели, как правило, сложнее анализировать. Дихотомия DFA vs. TM является экстремальной, поскольку проблема членства тривиальна для одного и неисчислима для другого. Менее экстремальным примером будет DFA против PDA. Проблема принадлежности к последним оказывается эффективно разрешимой, но решение вовсе не тривиально. Мы наблюдаем это во многих областях математики и науки: изучите простую модель, чтобы получить как можно более полное понимание, которое обычно приводит к пониманию и более сложных моделей.
источник
Я вижу несколько ответов, называющих FM «меньшими», чем машины Тьюринга.
Основное внимание в аспирантуре, которую я выбрал, заключалось в их эквивалентности, а не в различиях. Для каждой модели FSM, которую мы изучали, мы должны были доказать их эквивалентность машинам Тьюринга. Это делается путем внедрения машины Тьюринга в FSM. IIRC, мы также изучили некоторые другие компьютерные модели, которые не реализуют ТМ, но я забыл, что это были. Дело в том, что если вы можете реализовать TM, вы можете запустить любую программу TM на модели, учитывая достаточно большой аналог ленты для выполняемой задачи.
Суть ответа на этот вопрос заключалась в следующем: TM является базовой моделью вычислимости, но не очень практичной, когда речь идет о создании полезных машин. Отсюда и модели FSM.
Это было мне интуитивно понятно, когда примерно в то же время (1984) я обнаружил язык FORTH. Его исполнительный движок построен на чистой реализации PDA Dual Stack. Идя глубже, я увлекаюсь этим же движком под компиляторами выражений.
Хотя для меня реальным влиянием FSM было открытие книги «Теория конечных автоматов» Трахтенброта и Корзинского (?), Когда мне было 18 лет, открытие, которое, по сути, дало мне мою карьеру.
источник