Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 语言(a+;)*与a*相同吗?_Algorithm_Regular Language - Fatal编程技术网

Algorithm 语言(a+;)*与a*相同吗?

Algorithm 语言(a+;)*与a*相同吗?,algorithm,regular-language,Algorithm,Regular Language,快速提问,如果a是正则表达式,那么a*=(a+)* (a+)*是有效的表达式吗?如果是,那么有人能解释为什么它与a*相同吗?很抱歉我在这里询问,但是我在谷歌上找不到任何东西。是的,(a+*是有效的,相当于a*。第一个表达式表示“至少一个a,重复0次或多次的序列”,第二个表达式表示“一个a,重复0次或多次”。很明显,两者都是等效的。否,(a+)*与a*匹配相同的字符串,但由于其原因,这是一种反模式。(a+)*本身并不有害,但是如果使用(a+)*x模式,许多正则表达式引擎可以使用“aaaaaaaaa

快速提问,如果a是正则表达式,那么a*=(a+)*

(a+)*是有效的表达式吗?如果是,那么有人能解释为什么它与a*相同吗?很抱歉我在这里询问,但是我在谷歌上找不到任何东西。

是的,
(a+*
是有效的,相当于
a*
。第一个表达式表示“至少一个
a
,重复0次或多次的序列”,第二个表达式表示“一个
a
,重复0次或多次”。很明显,两者都是等效的。

否,
(a+)*
a*
匹配相同的字符串,但由于其原因,这是一种反模式。
(a+)*
本身并不有害,但是如果使用
(a+)*x
模式,许多正则表达式引擎可以使用
“aaaaaaaaaaaaaaaaaaaaaaaaaaaab”
字符串冻结。另一个区别是,在
(a+)*

中有一个捕获组,
L(a*)=L((a+)*)
。我们可以通过显示
L(a*)
L((a+)*)
的子集来证明这一点,反之亦然

为了证明
L(a*)
L((a+)*)
的子集,我们必须证明由
a*
生成的任何内容也由
(a+)*
生成。我们只需要提供一种生成方法。正则表达式
a*
为所有整数n生成字符串e=a^0,a=a^1,aa=a^2,…,a^k。要生成其中任何一个,只需从子表达式
a+
中选择生成的子字符串
a
并替换即可,这将生成相同的表达式
a*
,并显然以相同的方式生成相同的a字符串

为了证明
L((a+)*)
L(a*)
的子集,我们只需要指出表达式
(a+)*
中唯一的字母符号是
a
,因此表达式只能生成a的字符串。因为
a*
生成了所有这样的字符串,所以
L((a+)*
是一个子集或
L(a*)
也同样清楚


因为
L(a*)
L((a+*)
是彼此的子集,所以这些集合必须相等。也就是说,te表达式生成相同的语言,因此是等价的。

所以没有区别,因为a+=a*-e,其中e是空字符串?