Минимизация ДКА, алгоритм Хопкрофта (сложность O(n log n))
Содержание
Постановка задачи
Пусть дан автомат, распознающий определенный язык. Требуется найти эквивалентный автомат с наименьшим количеством состояний.
Минимизация ДКА
Понятие эквивалентности состояний позволяет объединить состояния в классы следующим образом.
- Все состояния в классе эквивалентны.
- Любые два состояния, выбранные из разных класов, неэквивалентны.
Таким образом, основная идея минимизации ДКА состоит в разбиении множества состояний на классы эквивалентности.
Пример минимизации ДКА
Первый класс состоит из состояния , а второй из эквивалентных состояний и .
Алгоритм
Итеративно строим разбиение множества состояний следующим образом.
- Первоначальное разбиение множества состояний — класс допускающих состояний и класс недопускающих состояний.
- Меньший из них помещается в очередь.
- Из очереди извлекается класс, далее именуемый как сплиттер.
- Перебираются все символы из алфавита , где — текущий символ.
- Все классы текущего разбиения разбиваются на 2 подкласса (один из которых может быть пустым). Первый состоит из состояний, которые по символу переходят в сплиттер, а второй из всех оставшихся.
- Те классы, которые разбились на два непустых подкласса, заменяются этими подклассами в разбиении, а также меньший из двух подклассов добавляется в очередь.
- Пока очередь не пуста, алгоритм выполняет п.3 – п.6.
Псевдокод
— множество состояний ДКА. — множество терминальных состояний. — очередь. — разбиение множества состояний ДКА. — класс состояний ДКА.
if .push() else .push() while not .isEmpty() .pop() for all for all in if and replace in with and if in replace in with and else if .push() else .push()
Время работы алгоритма
Благодаря системе добавления классов состояний в очередь, каждое ребро будет рассмотрено не более чем раз. А так как ребер у нас порядка то получаем
Литература
- Хопкрофт Д., Мотвани Р., Ульман Д. Введение в теорию автоматов, языков и вычислений, 2-е изд. : Пер. с англ. — М.: Издательский дом «Вильямс», 2002. — С. 177 — ISBN 5-8459-0261-4 (рус.)
- J. E. Hopcroft. An n log n algorithm for minimizing states in a finite automaton. Technical Report CS-71-190, Stanford University, January 1971.

