正则语言的有限性

Posted

技术标签:

【中文标题】正则语言的有限性【英文标题】:Finiteness of Regular Language 【发布时间】:2014-01-15 05:37:47 【问题描述】:

我们都知道(a + b)* 是只包含符号ab 的常规语言。 但是(a + b)* 是一个无限长的字符串,它是有规律的,因为我们可以构建一个有限自动机,所以它应该是有限的。

谁能解释一下?

【问题讨论】:

【参考方案1】:

(a+b) 语言中的每个单词都是有限长度的。就像有无限多个整数一样,但每个整数都是有限的。

是的,语言本身就是一个无限集合。大多数语言都是。但是有限自动机(注意:自动机是复数)对他们来说工作得很好,前提是每个单词的长度都是有限的。

顺便说一句:这类问题可能应该去 cs.stackexchange.com。

【讨论】:

【参考方案2】:

1. 正则表达式描述了由某种语言生成的字符串。应用该正则表达式可为您提供该语言可以描述的所有字符串。

2. 当您将该正则表达式转换为有限自动机(具有有限状态的自动机)时,这意味着也可以通过从状态遍历来生成相同的字符串- 对该自动机进行陈述。现在,直观地说,这里的每个状态都代表属于该语言的字符串。它说,在“吸收”了一些输入之后,字符串现在处于状态 X。

示例:

如果您希望正则表达式接受偶数 0 的字符串,那么您将拥有一个状态(组),表明偶数 0 已经到目前为止在输入中观察到。奇数的另一个状态(组) --> 这个状态将是您在 FA 中的不接受状态。

如此处所示,您只需要 2 个(有限)状态即可生成无限数量的字符串,因为我们对奇数和偶数进行了分组。

这就是为什么它是常规的。

【讨论】:

【参考方案3】:

可以为任何正则语言构造有限自动机,而正则语言可以是有限集或无限集。当然,有无限的集合是常规集合。查看下面的维恩图:

备注: 1. 每个有限集都是正则集。 2. 无限集的任何 dfa 将始终包含循环(或者无限集不可能没有循环的 dfa)。 3.每一种非常规语言都是一个无限集。

有限自动机中的“有限”一词意味着在自动机中对于常规语言类存在“有限量的内存”,因此只有“有限”(或说有界)量的信息可以存储在任何实例处理一串语言的时间。

在有限自动机中,内存仅以状态的形式存在(而在另一类自动机如 Pda 中,图灵机的外部内存用于存储无限信息)。您可以将有限自动机视为没有显式内存的 CPU;只能将最近结果存储在其寄存器中。

因此,我们可以将“常规语言”定义为 — 一类语言,在处理语言字符串时,在任何时间实例中只需要存储有界(有限)信息。

进一步阅读(无限语言):

什么是正则语言:What is basically a regular language? And Why a*b* is regular? But language a<sup>n</sup>b<sup>n</sup> | n &gt; 0 is not a regular language 要了解状态如何用作内存元素,请阅读以下答案:How to write regular expression for a DFA 与自动有限和无限正则语言的区别:To make sure: Pumping lemma for infinite regular languages only?

【讨论】:

【参考方案4】:

但是(a + b)*是一个无限长的字符串

不,(a + b)* 是一种有限方式来表达有限字符串的无限集合(语言)。

【讨论】:

你是对的!不仅正则表达式,Automate 和 Grammar 也是集合(语言)+ 的有限表示。【参考方案5】:

这只是意味着存在指定语言的有限正则表达式,并且与从表达式生成的字符串无关。 对于许多正则语言,我们可以生成无限数量的字符串,这些字符串遵循该语言,但该语言是正则的,以证明我们需要一个必须是有限的正则表达式。 因此,这里的表达式 (a+b)* 是表达 0-n 个 a 或 b 或它们的组合的有限方式,但 n 可以采用任何值,从而导致无穷大。字符串。

【讨论】:

以上是关于正则语言的有限性的主要内容,如果未能解决你的问题,请参考以下文章

第十二篇:形式语言理论与有限状态自动机

给定代表字符串的有限列表的正则表达式的语法推断?

用java开发编译器之:Thompson构造,将正则表达式转换为有限状态自动机

从正则表达式(RE)到最小确定性有限状态自动机(DFA)

正则表达式之基本原理

证明正则语言集是上下文无关语言集的真子集