Минимизация ДКА

Материал из testwiki
Версия от 21:01, 26 февраля 2025; imported>Sldst-bot (Замена редиректа ш:Заготовка раздела на актуальный ш:Дополнить раздел с добавлением даты установки в разделе «Алгоритм Хопкрофта» (2019-07-27))
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Перейти к навигации Перейти к поиску

Минимизация ДКА — построение по детерминированному конечному автомату (ДКА) эквивалентного ДКА, имеющего наименьшее возможное число состояний.

Минимальный ДКА

Для любого регулярного языка существует минимальный ДКА, который его принимает, то есть, ДКА с наименьшим возможным числом состояний. Такой автомат единственен с точностью до изоморфизма.

Алгоритмы

Алгоритм Хопкрофта

1.     Разделить все состояния ДКА на две группы: группу конечных состояний и группу неконечных состояний.

2.     Для каждого символа алфавита, проверить, в какую из групп перейдет автомат из каждого состояния, используя данный символ. Если из состояний A и B можно перейти в состояния C и D соответственно, то состояния A и B будут считаться эквивалентными по данному символу, если состояния C и D принадлежат одной и той же группе.

3.     На основе этой информации разделить каждую группу на подгруппы, где состояния, эквивалентные по всем символам алфавита, находятся в одной подгруппе.

4.     Повторять шаги 2 и 3 до тех пор, пока группы перестанут разделяться.

5.     Построить новый автомат, используя полученные подгруппы в качестве новых состояний. Переходы между состояниями будут соответствовать переходам между подгруппами.

6.     Удалить недостижимые состояния.Шаблон:Дополнить раздел

Алгоритм Бжозовского

Пусть 𝒜 — ДКА. Обозначим через r(𝒜) инвертированный автомат 𝒜. Через d(𝒜) обозначим детерминизированный автомат, полученный из 𝒜 процедурой построения подмножеств. Имеет место следующий результат[1]: Шаблон:Теорема

См. также

Примечания

Шаблон:Примечания

Литература

Ссылки

Шаблон:Формальные языки Шаблон:Math-stub