Изменения

Перейти к: навигация, поиск

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

84 байта добавлено, 22:55, 6 ноября 2013
Псевдокод
<tex>Q</tex> {{---}} множество состояний ДКА.
<tex>F</tex> {{---}} множество терминальных состояний.
<tex>WS</tex> {{---}} очередьмножество пар <tex>(C, a)</tex>.
<tex>P</tex> {{---}} разбиение множества состояний ДКА.
<tex>R</tex> {{---}} класс состояний ДКА.
<tex>P \leftarrow \{ F, Q \setminus F \}</tex>
<tex>W S \leftarrow \{ \}varnothing </tex> '''for all''' <tex>a c \in \Sigma</tex> <tex>Winsert </tex>'''.push'''<tex>('''min'''(<tex>F, Q \setminus F), c)</tex>), '''to''' <tex>aS</tex>) '''while not''' <tex>WS \ne \varnothing</tex>'''.isEmpty()''' <tex>Wremove </tex> <tex>(C, a)</tex>'''.popfrom'''(<tex>S, a</tex>) '''for each''' <tex>R</tex> '''in''' <tex>P</tex> '''split by''' <tex>(SC, a)</tex> <tex> R_1, R_2 \leftarrow </tex> <tex> split(R, C, a)</tex> '''<tex>replace''' </tex> <tex>R</tex> '''in''' <tex>P</tex> '''with''' <tex>R_1</tex> '''and''' <tex>R_2</tex> '''iffor''' (<tex>R, ac \in \Sigma</tex>) '''inif''' <tex>W(R, c)</tex> '''replacein''' (<tex>R, aS</tex>) '''in''' <tex>Wreplace</tex> '''with''' (<tex>R_1(R, ac)</tex>) '''andin''' (<tex>R_2, aS</tex>) '''else''' '''ifwith''' <tex> |(R_1| \le |R_2|</tex> <tex>W, c)</tex>'''.pushand'''(<tex>R_1(R_2, ac)</tex>)
'''else'''
<tex>Winsert</tex> <tex>(min(R_1, R_2), c)</tex>'''.pushto'''(<tex>R_2, aS</tex>)
===Время работы===
403
правки

Навигация