什么是规律性?

时间:2010-01-09 01:50:31

标签: computer-science regular-language

这更像是计算机科学问题,而不是编程问题,但我认为这是所有相关网站中最好的问题。

当我发现正则表达式并查找该术语时,我认为这种“规律性”属性指的是表达式语言具有可定义的结构模式。然而,在阅读有关主题及其背后的理论时,我了解到有些语言不规则,但从定义它们的方式来看,很清楚模式可以与它们匹配。一种这样的语言是(a ^ n)(b ^ n)。显然这是一种模式,但这不是一种常规语言。所以现在我想知道常规语言是什么使它们成为常规语言,这种语言不是吗?

5 个答案:

答案 0 :(得分:11)

直观地解释计算机科学是......棘手的。我会试一试,但请记住,其中一些将“足够接近”,但理论上并不严谨。

常规语言是可以由计算机等同于有限自动机(DFA / NDFA)的机器决定的语言。有限自动机可以被认为是纯粹在状态下运行的机器,没有存储。所以你可以看到 n b n 不能是常规的,因为它需要一台可以计算a和b的数量的机器(因此必须具有无限的*存储容量)为了比较它们。

为了进行比较,(abc) n 是常规的,因为重复次数无关紧要。

要获得更严格(并且相应更密集的视图),请检查wikipedia article和关联页面。

*这里的无限无所谓,但我提到它是完整的。可能更容易将其视为“幸运,总是足够”的存储。

答案 1 :(得分:4)

该名称的词源来自Kleene 20世纪50年代使用他为此目的创建的数学符号描述常规集的作品。请参阅this

答案 2 :(得分:1)

也许关于regular languages的维基百科文章可以比我们更好地解释它。但是,我会试一试。

从理论角度来看,常规语言(字符串集)是可以使用finite state automaton生成的语言。在程序员方面,这相当于说它可以使用regular expressions生成。因此,所有有限语言(字符串集)都是规则的,但是有一些无限的语言,例如 n b n (na的所有字符串的语言)其次是n b's),使用FSA或正则表达式无法识别。有更强大的计算设备(例如现代计算机,使用Turing Machines建模),可以识别这些语言。

在字符串搜索的编程中使用正则表达式的原因是它们可以识别对我们程序员很重要的绝大多数字符串,同时可以实现搜索非常快速使用有限状态自动机。

答案 3 :(得分:0)

regular中的单词regular expression指的是常规的数学概念,而不是英语概念。就像数学中prime这个词与 prime 牛肉没什么关系一样。

它由CS(这是数学的一个分支)继承,以引用更具体的概念:http://en.wikipedia.org/wiki/Regular_language

答案 4 :(得分:0)

正则表达式不是很规则,名称是词源。