Минимизация ДКА, алгоритм Хопкрофта (сложность O(n log n)) — различия между версиями
(→Псевдокод) |
|||
Строка 46: | Строка 46: | ||
= Литература = | = Литература = | ||
* ''Хопкрофт Д., Мотвани Р., Ульман Д.'' '''Введение в теорию автоматов, языков и вычислений''', 2-е изд. : Пер. с англ. — Москва, Издательский дом «Вильямс», 2002. — С. 177: ISBN 5-8459-0261-4 (рус.) | * ''Хопкрофт Д., Мотвани Р., Ульман Д.'' '''Введение в теорию автоматов, языков и вычислений''', 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. | ||
+ | |||
[[Категория: Теория формальных языков]] | [[Категория: Теория формальных языков]] | ||
− | + | [[Категория: Автоматы и регулярные языки]] |
Версия 06:49, 11 января 2012
Содержание
Постановка задачи
Пусть дан автомат, распознающий определенный язык. Требуется найти эквивалентный автомат с наименьшим количеством состояний.
Минимизация ДКА
Понятие эквивалентности состояний позволяет объединить состояния в блоки следующим образом.
- Все состояния в блоке эквивалентны.
- Любые два состояния, выбранные из разных блоков, неэквивалентны.
Таким образом, основная идея минимизации ДКА состоит в разбиении множества состояний на блоки эквивалентности.
Пример минимизации ДКА
Первый блок состоит из состояния
, а второй из эквивалентных состояний и .Алгоритм
Алгоритм итеративно строит разбиение множества состояний следующим образом.
- Первоначальное разбиение множества состояний — класс допускающих состояний и класс недопускающих состояний.
- Алгоритм помещает оба эти класса в очередь.
- Из очереди извлекается класс, далее именуемый как сплиттер.
- Перебираются все символы из алфавита , где — текущий символ.
- Все классы текущего разбиения разбиваются на 2 подкласса (один из которых может быть пустым). Первый состоит из состояний, которые по символу переходят в сплиттер, а второй из всех оставшихся.
- Те классы, которые разбились на два непустых подкласса, заменяются этими подклассами в разбиении, а также меньший из двух подклассов добавляется в очередь.
- Пока очередь не пуста, алгоритм выполняет п.3 – п.6.
Псевдокод
— множество состояний ДКА. — множество терминальных состояний. — очередь. — разбиение множества состояний ДКА. — класс состояний ДКА.
while not isEmpty( ) .pop( ) for all for all in if & replace in with and 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.