【问题标题】:Exhibiting an algorithm that determines if L = L*, given any regular language L展示一个确定 L = L* 的算法,给定任何常规语言 L
【发布时间】:2011-04-24 16:19:47
【问题描述】:
我正在研究会员算法,我正在研究这个特定的问题,它说如下:
展示一个算法,给定任何常规语言 L,确定 L 是否 = L*
所以,我的第一个想法是,我们有 L*,它是 L 的 Kleene 星,并且要确定 L = L*,我们不能说既然 L 是规则的,我们就知道 L* 根据定义指出常规语言的家族在星闭合下是闭合的。
因此 L 将始终等于 L*?
我觉得肯定还有很多东西,我可能缺少一些东西。任何帮助,将不胜感激。再次感谢。
【问题讨论】:
标签:
algorithm
membership
regular-language
【解决方案1】:
由于 L 是正则的,我们知道 L* 是根据定义,它表明正则语言家族在星闭包下是封闭的。因此L总是等于L*?
没有。 Regular(L) --> Regular(L*),但这并不意味着L == L*。仅仅因为两种语言都是正则并不意味着它们是相同正则语言。例如,a* 和 b* 都是常规语言,但这并不意味着它们是相同的语言。
L != L* 的一个示例是语言L = a*b*,因此是L* = (a*b*)*。字符串abab 是L* 的一部分,但不是L 的一部分。
就算法而言,让我提醒您,正则语言的概念是可以由 DFA 解析的 - 对于任何给定的 DFA,该 DFA 存在单一的最佳缩减。
【解决方案2】:
你所说的暗示是错误的。 Kleene 星下的封闭性仅意味着 L* 再次是规则的,如果 L 是规则的。
检查是否 L = L* 的一种可能性是计算两者的最小自动机,然后检查等价性。