【发布时间】:2015-12-01 23:57:01
【问题描述】:
如何计算常规语言的最小抽水长度。例如,如果我有 0001*,那么最小泵送长度应为 4,即 000 无法泵送。为什么会这样?
【问题讨论】:
标签: regular-language pumping-lemma
如何计算常规语言的最小抽水长度。例如,如果我有 0001*,那么最小泵送长度应为 4,即 000 无法泵送。为什么会这样?
【问题讨论】:
标签: regular-language pumping-lemma
它将小于或等于该语言的最小 DFA 中的状态数减一。因此,将正则表达式转换为 DFA,将其最小化,并对状态进行计数。以您为例:
0001*
SOURCE SYMBOL DESTINATION
q1 0 q2
q1 1 q5
q2 0 q3
q2 1 q5
q3 0 q4
q3 1 q5
q4 0 q5
q4 1 q4
q5 0 q5
q5 1 q5
为什么等于这个?因为这是您可以在 DFA 中进行的最大转换次数,而无需访问某个州两次。一旦你两次访问一个州,你就循环了。
当然,一种语言的最小 DFA 可能缺少该长度的路径。在这种情况下,您可以通过使用自动机图的深度优先搜索之类的方法找到最长的路径(从起始状态开始),并查看您可以追踪多长的路径。这才是你真正的答案。
【讨论】: