【发布时间】:2014-01-15 05:37:47
【问题描述】:
我们都知道(a + b)* 是只包含符号a 和b 的常规语言。
但是(a + b)* 是一个无限长的字符串,它是有规律的,因为我们可以构建一个有限自动机,所以它应该是有限的。
谁能解释一下?
【问题讨论】:
标签: regular-language finite-automata automata formal-languages automata-theory
我们都知道(a + b)* 是只包含符号a 和b 的常规语言。
但是(a + b)* 是一个无限长的字符串,它是有规律的,因为我们可以构建一个有限自动机,所以它应该是有限的。
谁能解释一下?
【问题讨论】:
标签: regular-language finite-automata automata formal-languages automata-theory
(a+b) 语言中的每个单词都是有限长度的。就像有无限多个整数一样,但每个整数都是有限的。
是的,语言本身就是一个无限集合。大多数语言都是。但是有限自动机(注意:自动机是复数)对他们来说工作得很好,前提是每个单词的长度都是有限的。
顺便说一句:这类问题可能应该去 cs.stackexchange.com。
【讨论】:
1. 正则表达式描述了由某种语言生成的字符串。应用该正则表达式可为您提供该语言可以描述的所有字符串。
2. 当您将该正则表达式转换为有限自动机(具有有限状态的自动机)时,这意味着也可以通过从状态遍历来生成相同的字符串- 对该自动机进行陈述。现在,直观地说,这里的每个状态都代表属于该语言的字符串组。它说,在“吸收”了一些输入之后,字符串现在处于状态 X。
示例:
如果您希望正则表达式接受偶数 0 的字符串,那么您将拥有一个状态(组),表明偶数 0 已经到目前为止在输入中观察到。奇数的另一个状态(组) --> 这个状态将是您在 FA 中的不接受状态。
如此处所示,您只需要 2 个(有限)状态即可生成无限数量的字符串,因为我们对奇数和偶数进行了分组。
而这就是为什么它是常规的。
【讨论】:
可以为任何正则语言构造有限自动机,而正则语言可以是有限集或无限集。当然,有无限的集合是非常规集合。查看下面的维恩图:
备注:
1. 每个有限集都是正则集。
2. 无限集的任何 dfa 将始终包含循环(或者无限集不可能没有循环的 dfa)。
3.每一种非常规语言都是一个无限集。
有限自动机中的“有限”一词意味着在自动机中对于常规语言类存在“有限量的内存”,因此只有“有限”(或说有界)量的信息可以存储在任何实例处理一串语言的时间。
在有限自动机中,内存仅以状态的形式存在(而在另一类自动机如 Pda 中,图灵机的外部内存用于存储无限信息)。您可以将有限自动机视为没有显式内存的 CPU;只能将最近结果存储在其寄存器中。
因此,我们可以将“常规语言”定义为 — 一类语言,在处理语言字符串时,在任何时间实例中只需要存储有界(有限)信息。
进一步阅读(无限语言):
【讨论】:
但是
(a + b)*是一个无限长的字符串
不,(a + b)* 是一种有限方式来表达有限字符串的无限集合(语言)。
【讨论】:
这只是意味着存在指定语言的有限正则表达式,并且与从表达式生成的字符串无关。 对于许多正则语言,我们可以生成无限数量的字符串,这些字符串遵循该语言,但该语言是正则的,以证明我们需要一个必须是有限的正则表达式。 因此,这里的表达式 (a+b)* 是表达 0-n 个 a 或 b 或它们的组合的有限方式,但 n 可以采用任何值,从而导致无穷大。字符串。
【讨论】: