【发布时间】:2012-03-06 12:25:32
【问题描述】:
为一堂课做作业,我想到了这个问题:
对于以下每个正则表达式,给出最小长度的字符串
不是表达式定义的语言。
(bb)*(aa)*b*a*(bab)*∪b∪ab
我将尝试仅在第一个问题上获得帮助,看看我是否能弄清楚第二个问题。这是我所知道的:Kleene * 表示 0 个或多个可能的元素。集合的并集是包含集合 a 和集合 b 的所有元素而不重复元素的集合。从插入 lambda 开始解决第一个问题,我得到:
第一次运行:bbaab
第二名:bbbbaabaabbaabbbbaab
第三名:bbbbbbaabaabbaabbbbaabaabbbbaabaabbaabbbbaabbbbbbaabaabbaabbbbaab
如果我这样做正确,那么长度为 0 到 5 的字符串不在该语言中。我这样做对吗?
【问题讨论】:
-
提示:字母数量超过
a、b和U。 -
第一种情况可以是零长度的字符串。 * 表示出现 0 次或多次,所以其实用空字符串也是可以的。
-
字母比 a b 和 u 多是什么意思?我意识到处理 * 的字符串可以是任何可能的字符串,但在最小的情况下,我们会将空字符串 λ 代替 *,因此生成的第一个字符串必须是 bb[λ]aa[λ] λ 对吗?
-
在Theoretical Computer Science 上问这个问题可能会更好。我们这里通常讨论的正则表达式不是你说的理论纯正则表达式。
-
@Alan Moore:不,cstheory 是针对研究级别的问题(对教授来说很重要的问题),而不是针对家庭作业。请不要在这些情况下建议它。相反,math.stackexchange.com 是合适的。