Изменения

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

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

29 байт добавлено, 20:06, 19 декабря 2013
м
Реализация
<tex>S \leftarrow \varnothing </tex>
'''for''' <tex>c \in \Sigma</tex>
'''insert''' <tex> insert \ (min (F, Q \setminus F), c)</tex> '''toin''' <tex>S</tex>
'''while''' <tex>S \ne \varnothing</tex>
<tex>(C, a) \leftarrow </tex> '''pop'''(<tex>S)</tex>)
<tex>T = \{R \ | \ R \in P, \ R</tex> '''split by''' <tex>(C, a) \}</tex>
'''for each''' <tex>R</tex> '''in''' <tex>T</tex>
<tex> R_1, R_2 \leftarrow </tex> '''split'''(<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>
'''for''' <tex>c \in \Sigma</tex>
'''if''' <tex>(R, c)</tex> '''in''' <tex>S</tex>
'''replace''' <tex>replace \ (R, c)</tex> '''in''' <tex>S</tex> '''with''' <tex>(R_1, c)</tex> '''and''' <tex>(R_2, c)</tex>
'''else'''
'''insert''' <tex>insert \ (min(R_1, R_2), c)</tex> '''toin''' <tex>S</tex>
К сожалению, совсем не очевидно, как быстро находить множество <tex>T</tex>. С другой стороны, понятно, что <tex>T \subset T'</tex>, где <tex>T'</tex> {{---}} это множество классов текущего разбиения, из состояний которых в автомате существует переход в состояния сплиттера <tex>C</tex> по символу <tex>a</tex>.
403
правки

Навигация