【问题标题】:is a* the same as (a*)*?a* 和 (a*)* 一样吗?
【发布时间】:2012-11-26 14:36:37
【问题描述】:

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

(a*)* 是一个有效的表达式吗?如果是,那么任何人都可以解释为什么它与a* 相同?很抱歉在这里提问,但我无法通过 Google 找到任何内容。

【问题讨论】:

  • 是的,它们是相同的(理论上)。
  • 我说理论上是一样的,但是regex引擎编译出来的代码可能会有所不同,在这种情况下a*比(a*)*效率更高,因为(a* )* 将引入另一个级别的回溯。
  • @nhahtdh : Lex 工具是否没有优化 (a*)* 到 a*?因为最小化应该有效?
  • @GrijeshChauhan:我不了解 Lex 工具。普通的正则表达式引擎不会做最小化。

标签: algorithm regular-language


【解决方案1】:

是的,a*=(a*)* 是一样的。两者都生成相同的语言,即字符串任何数字a,包括null。

L(a*) = {^, a, aa, aa...... } = L ((a*)*)

(a*)* 是一个有效的表达式吗?

是的,这个表达式叫做REGULAR-EXPRESSION(我看到你错过了标签)。任何正则语言(RL)都可以用正则表达式(RE)来表示。一种按字母顺序表示 RL 的方式。

为什么是一样的?

* 表示重复任意次数(包括0 次)。

a* 表示 0 a、1 a、2 a 或任意数量的 a。

(a*)* 表示a*中的所有字符串重复任意次数(包括0次)。

因为L(a*) 表示所有字符串都使用a。它的每个集合的超集由 a 的字符串组成。和L((a*)*) 是一样的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-06
    • 2023-03-15
    • 2019-03-21
    • 2019-01-12
    • 1970-01-01
    • 2012-07-02
    相关资源
    最近更新 更多