我们都知道(a + b)*
是一种常规语言,仅包含符号a
和b
。
但是(a + b)*
是一个无限长度的字符串,它是规则的,因为我们可以建立一个有限自动机,所以它应该是有限的。
有人可以解释一下吗?
答案 0 :(得分:8)
可以为任何常规语言构造有限自动机,并且常规语言可以是有限集或无限集。当然有无限集,那些不常规集。检查下面的维恩图:
<子> 备注强>:
1.每个有限集是一个常规集 2.无限集的任何dfa将始终包含循环(或无循环的dfa对于无限集不可能) 3.每种非常规语言都是无限的。
有限自动机中的“有限”一词意味着在常规语言类的自动机中存在“有限量的内存”,因此只有“有限”(或有限的)信息量才能存储在任何实例中。处理一串语言时的时间。
在有限自动机中,内存仅以状态的形式存在(而在其他类自动机中,如Pda,图灵机外部存储器用于存储无界信息)。您可以将有限自动机视为没有显式内存的CPU;只能将最近的结果存储在其寄存器中。
因此,我们可以将“常规语言”定义为 - 一类语言,在处理语言字符串时,只需要在任何时刻存储有界(有限)信息。
进一步阅读(对于无限语言):
答案 1 :(得分:3)
语言(a+b)
中的每个单词都是有限长度的。与无限多个整数的方式相同,但每个整数都是有限的。
是的,语言本身就是一个无限的集合。大多数语言都是。但是有限自动机(NB:自动机是复数)对它们来说效果很好,前提是每个单词的长度都是有限的。
顺便说一句:这类问题可能应该发送到cs.stackexchange.com。
答案 2 :(得分:2)
但是
(a + b)*
是一个无限长的字符串
不,(a + b)*
是一种有限方式来表达有限字符串的无限集(语言)。
答案 3 :(得分:1)
1。正则表达式描述了某种语言生成的字符串。应用该正则表达式可以为您提供该语言可以描述的所有字符串。
2. 当您将该正则表达式转换为有限自动机(具有有限状态的自动机)时,这意味着也可以通过遍历状态生成这些相同的字符串在那个自动机上的状态。现在,直观地说,这里的每个州都代表属于该语言的组字符串。它说,在“吸收”了一些输入后,字符串现在处于状态X.
示例:强>
如果您希望正则表达式接受偶数 0 的字符串,那么您将拥有一个状态(组),表示偶数 0 已被到目前为止在输入中观察到了。另一个奇数的状态(组) - &gt;这种状态将是你在FA中的不接受状态。
如图所示,你只需要2个(有限)状态来生成无限数量的字符串,因为我们将奇数和偶数分组。
这就是为什么是常规的。
答案 4 :(得分:0)
它只是意味着存在指定语言的有限正则表达式,并且不与表达式生成的字符串相关。 对于许多常规语言,我们可以生成无数个字符串,这些字符串遵循该语言,但是对于该语言来说,这是常规的,以证明我们需要一个必须是有限的正则表达 所以这里表达式(a + b)*是表示0-n数量的a或b或s的组合的有限方式,但是n可以取任何导致无穷大的值。字符串。