📜  正则表达式和正则语言的星高

📅  最后修改于: 2022-05-13 02:24:08.447000             🧑  作者: Mango

正则表达式和正则语言的星高

星高与计算理论(TOC)领域有关。它用于表示正则表达式和正则语言的结构复杂性。这里的复杂性与正则表达式中存在的 Kleene 星的最大嵌套深度有关。
在此可以注意到,正则语言可以由不唯一但等价的正则表达式表示。这些正则表达式可能具有不同的星高,具体取决于它们的结构复杂性(即嵌套)。但是正则语言的星高是唯一的数字,它等于表示该语言的任何正则表达式的最小星高。在这种情况下,广义星高是一个合适的术语,它定义了 Kleene 星的最小嵌套深度,以通过广义正则表达式来描述语言。例如:

可以使用正则表达式生成字母集合 {a, b} 上的语言“aba”,

(a + b)* ...... (1) Star height = 1
(a* b*)* ...... (2) Star height = 2

但是我们考虑最小的星高。因此正则语言“aba”的星高为1。

星高也为正则表达式定义为出现在该表达式中的 Kleene 星的最大嵌套深度。为了正式表示星高,正则表达式的“h”可以写成,

H( \phi ) = 0,其中\phi是空集
H( \epsilon ) = 0,其中\epsilon是空字符串
h(t) = 0,其中 t 可以是字母集的任何终端符号
h(EF) = max(h(E), h(F)),其中 E, F 表示正则表达式
h(E*) = h(E) + 1

一些例子是:

  • h(a*(ba*)*) = 2
  • h((ab*) + (a* ab*)*b)*) = 3
  • h(a) = 0

Eggan 教授试图给出接受语言 L 的自动机的循环复杂度与语言的星高 L 之间的关系。
一种语言的星高,L 等于接受 L 的自动机的最小循环复杂度。也可以说,一个既可访问的自动机的循环复杂度(即通过删除所有不可访问的状态构建的自动机)以及任何与它们之间的转换)可共访问(即,如果存在将我们从 q 带到标记状态的字符串s,则称自动机的状态 q 是可共访问的)是星高的最小值通过状态消除方法(或 BMC 算法)的不同可能执行获得的正则表达式。

很明显,星高为零的常规语言只能表示有限数量的常规语言。广义星高认为对正则表达式进行补码不会导致星高的增加。这种考虑产生了有趣的结果。

例如 – 考虑一组字母 {x, y}。正则语言“所有以x开头和结尾的字符串”的正则表达式的星高,即

h(x(x + y)*x+x) = 1, since only one level of Kleene nesting exists

但是同样的语言也可以用正则表达式 x 来表示\phi ^cx + x,因为\phi ^c 表示输入字母表上所有字符串的集合。

现在,h(x \phi ^cx + x) = 0,因为不存在 Kleene 嵌套

因此,该语言的广义星高为 0,即使其星高为 1。