0 / 0 / 0
Регистрация: 11.06.2017
Сообщений: 5
|
|
Построить конечный автомат для распознания регулярного множества цепочек трехсимвольного алфавита11.06.2017, 13:01. Показов 6644. Ответов 4
Метки нет Все метки)
(
Построить конечный автомат (КА–распознаватель) для распознания регулярного множества цепочек трехсимвольного алфавита в соответствии с описанием:
Содержит два символов “а”, заканчивается на “ b ”, а символы “а” и "с " не стоят рядом.
0
|
11.06.2017, 13:01 | |
Ответы с готовыми решениями:
4
Построить конечный автомат, распознающий среди цепочек из нулей и единиц такие, где на каждом третьем месте 0
Построить конечный автомат для принтера |
477 / 280 / 90
Регистрация: 15.11.2013
Сообщений: 530
|
|
14.06.2017, 03:47 | |
А здесь ничего не надо знать. Здесь чистая незамутнённая логика. Формулируете, что вам нужно. А нужно, чтобы в строчке два раза встретились буквы a, причём ни перед, ни после них не стояла буква c, и строчка кончалась на b.
Автомат можно задавать разными способами. Один из них — задание в виде графа. Граф — это куча состояний, которые обозначают кружочками. Состояния связаны между собой стрелочками. По стрелочкам автомат переходит от одного состояния к другому. Причём переход возможен только по очередной букве. Каждая буква — это инструкция, которая говорит автомату, в какое состояние ему надо переходить. Здесь самое главное понять, как автомат запоминает информацию о предыдущих событиях. Вот представьте себе, что у человека специфическое расстройство памяти. Он не помнит, что было вчера. У него есть дом, в доме 100 комнат, и каждая комната что-то означает. Если, например, он утром проснулся в комнате № 23, это значит, что надо позвонить родителям. Если в комнате 56, значит сегодня будет корпоратив. А если в комнате 82, значит и то, и другое. Точно так же автомат. Комната – это состояние. Автомат не помнит, что было раньше. Вся его память заключается в том, в каком состоянии он в данный момент находится. Ваша задача придумать минимальный набор состояний, которые покрывают все существенные для решения вашей задачи ситуации. Начинаете строить автомат с исходного состояния, которое я обозначу 0. Это состояние означает «не пришло ещё ни одной буквы а, и предыдущая буква была не с». Почему нас волнуют именно буквы а и с? Буква а вообще имеет глобальное значение. Нам нужно их пересчитать и убедиться, что их ровно две. Если больше или меньше, значит строка неправильная. Буква с нас интересует постольку-поскольку за ней не должна следовать буква а, иначе строка тоже будет неправильной. Если автомат в состоянии 0 получает букву а, он переходит в состояние 1. Оно означает «пришла первая буква а, и перед ней не было буквы с». По букве с автомат переходит из состояния 0 в состояние 2. Оно означает «не было ещё ни одной буквы а, а предыдущая буква была с». Далее, если в состоянии 1 пришла буква c, то это ошибка, автомат должен перейти в какое-то состояние, которое будет означать ошибку. Из этого состояния автомат не должен выходить и по любой букве должен возвращаться в него. Это состояние я условно обозначу 99. В состояние 99 автомат также должен перейти из состояния 2 по букве а. Желательно, чтобы из каждого состояния по любой букве можно было бы куда-то перейти. Поэтому в каждом состоянии должен быть определён переход по любой букве. Что будет, если в состоянии 1 придёт буква b? Автомат должен перейти в состояние 3, которое означает «была уже одна буква а, и предыдущая буква была не с». Что будет, если в состоянии 1 придёт буква a? Автомат должен перейти в состояние 4, которое означает «было уже две буквы а, и предыдущая буква была не с». Что будет, если в состоянии 2 придёт буква b? Нужно вернуться в состояние 0. Что будет, если в состоянии 2 придёт буква с? Нужно остаться в состоянии 2. И так перебираете каждое состояние по каждой букве. Должно получиться что-то типа
1
|
0 / 0 / 0
Регистрация: 11.06.2017
Сообщений: 5
|
|||||||
14.06.2017, 09:52 [ТС] | |||||||
AdmiralHood, Огромное тебе спасибо! ты столько сделал! можно с тобой связаться лично в Вк или по почте? Есть ещё один вопрос. Напиши мне сюда:del
0
|
14.06.2017, 09:52 | ||||||
Помогаю со студенческими работами здесь
5
Построить конечный автомат Построить конечный автомат Построить детерминированный конечный автомат Построить детерминированный конечный автомат
Искать еще темы с ответами Или воспользуйтесь поиском по форуму:
|
|
Новые блоги и статьи
![]() |
||||
Результаты исследования от команды MCM (март 2025 г.)
Programma_Boinc 07.04.2025
Результаты исследования от команды MCM (март 2025 г. )
В рамках наших текущих исследований мы продолжаем изучать гены, которые имеют наибольшую вероятность развития рака легких, выявленные в рамках. . .
|
Рекурсивные типы в Python
py-thonny 07.04.2025
Рекурсивные типы - это типы данных, которые определяются через самих себя или в сочетании с другими типами, которые в свою очередь ссылаются на исходный тип. В мире программирования такие структуры. . .
|
C++26: Объединение и конкатенация последовательностей и диапазонов в std::ranges
NullReferenced 07.04.2025
Работа с последовательностями данных – одна из фундаментальных задач, с которой сталкивается каждый разработчик. C++ прошел длинный путь в эволюции средств для манипуляции коллекциями – от. . .
|
Обмен данными в микросервисной архитектуре
ArchitectMsa 06.04.2025
Когда разработчики начинают погружаться в мир микросервисов, они часто сталкиваются с парадоксальным правилом: "два сервиса не должны делить один источник данных". Эта мантра звучит повсюду в. . .
|
PostgreSQL в Kubernetes: Автоматизация обслуживания с CNPG
Mr. Docker 06.04.2025
Администраторы баз данных сталкиваются с целым рядом проблем при обслуживании PostgreSQL в Kubernetes: как обеспечить правильную репликацию данных, как настроить автоматическое переключение при. . .
|
Async/await в TypeScript
run.dev 06.04.2025
Асинхронное программирование — это подход к разработке программного обеспечения, при котором операции выполняются независимо друг от друга. В отличие от синхронного выполнения, где каждая последующая. . .
|
Многопоточность в C#: Синхронизация потоков
UnmanagedCoder 06.04.2025
Многопоточное программирование стало неотъемлемой частью разработки современных приложений на C#. С появлением многоядерных процессоров возможность выполнять несколько задач параллельно значительно. . .
|
TypeScript: Классы и конструкторы
run.dev 06.04.2025
TypeScript, как статически типизированный язык, построенный на основе JavaScript, привнес в веб-разработку новый уровень надежности и структурированности кода. Одним из важнейших элементов этой. . .
|
Многопоточное программирование: Rust против C++
golander 06.04.2025
C++ существует уже несколько десятилетий и его поддержка параллелизма постепенно наращивалась со временем. Начиная с C++11, язык получил стандартную библиотеку для работы с потоками, а в последующих. . .
|
std::vector в C++: от основ к оптимизации производительности
NullReferenced 05.04.2025
Для многих программистов знакомство с std::vector происходит на ранних этапах изучения языка, но между базовым пониманием и подлинным мастерством лежит огромная дистанция. Контейнер std::vector. . .
|