查找常规语言的最大因式分解


13

让语言为常规。LΣ

因式分解是单词集的最大对,其中X Y L(X,Y)

  • XYL
  • XY

其中 | 。X X ÿ ÿ }XY={xyxX,yY}

(X,Y)如果每个对与都是或Y \就是最大不是\ subseteq Y'(X,Y)(X,Y)XYLXXYY

是否有一个简单的步骤来找出最大对?

例:

L=ΣabΣ。计算集合F={u,v,w}

  • u=(Σ,ΣabΣ)

  • v=(ΣaΣ,ΣbΣ)

  • w=(ΣabΣ,Σ)

其中Σ={a,b}

另一个例子:

Σ={a,b}L=ΣaΣ 因式分解设置F={q,r,s,t}

  • q=(Σ,L)

  • r=(Σa,Σ+L)

  • s=(Σaa,ϵ+Σ+L)

  • t=(L,ϵ+L)


4
我建议阅读Jacques Sakarovitch 撰写
Cornelius Brand

1
我想知道您是否想更具体地说明问题,即问题的最后一句话?是否给定了,我们想测试是否最大?我们的任务是枚举最大的所有吗?如果是后者,是否清楚此列表是有限大小还是多项式大小?如果有成倍的可能性,要求一种算法来枚举所有可能性可能没有任何意义。另外,您是否要指定在显示给我们时的语言表示方式,以及的表示方式?(例如DFA,NFA,regexp)X,Y(X,Y)(X,Y)LX,Y
DW

2
我不明白你的例子。是应该是所有的最大的对?似乎无效...u,v,wv
拉斐尔

1
该示例摘自上述论文。应该是最大对。我也不了解是如何计算的,因为它似乎不一定位于。我将发布另一个示例。u,v,wvL
劳拉

1
@Raphael,在我看来是有效的。让,,是一个因式分解,因为(考虑任何字符串包含,然后是和/或的任何序列,最后是:该字符串必须在第一个出现的位置具有一点,因此该点包含)。我没有证明它是最大的,但是我找不到作为分解的更大集合。v Ŷ = Σ * b Σ *X ÿ X Ŷ = 大号一个一个b b b 一个b X 'ÿ ' 大号X=ΣaΣY=ΣbΣ(X,Y)XY=LaabbbabX,YL
DW

Answers:


8

正如对该问题的评论中所建议的那样,我将尝试给出该​​问题的(不幸的是部分的)答案,至少是在我本人已理解该问题的程度上(这意味着您很可能会发现错误,如果发现了)一种更简短或清楚地解释以下要点之一的方法,请随时相应地编辑答案):

首先,应该注意的是,如果我们要计算语言的因式分解,则实际上不必计算语言的通用自动机。

在我的评论中提到的纸 ¹,有一个正规的语言,那就是左,右因素之间的一一对应关系,考虑到语言的左因素,相应的权系数是唯一确定的,反之亦然。更准确地说,我们有以下内容:

令为的因式分解。那么 也就是说,任何左因子都是右商的交集,并且任何右因子是左商的交集。相反地,左商数任何交集是的右侧因子,以及右商数任何交集是的左因子。大号Ŷ = X X X - 1大号X = ý ý大号ÿ - 1大号大号大号大号(X,Y)L

Y=xXx1L,X=yYLy1,
LLLL

请注意,对于常规语言,只有有限的左右商集,因此问题可以减少到计算语言的左右商,然后计算它们的 -stable闭包,即在交点下闭合的商的最小超集。这些恰好是右因子和左因子,因此通常很容易看出哪些对是子集。大号L

为了说明以上几点,请考虑问题中的第一个示例(在本文中我也认为这是不正确的):

令。现在,左商是集合为,即,这些词在可与前缀,即。什么时候对于不同的?当且仅当和可以增加到单词时才是这种情况L=ΣabΣLx1LxΣuΣxxuLy1L=x1Lx,yxyL具有完全相同的后缀。这意味着,用更熟悉的术语来说,它们与Nerode等效,并且在Nerode类中附加到单词所需的后缀恰好是各自的左商。

对于,我们看到我们的Nerode等价类是L

  • N1,不包含作为因子并且以结尾的组单词, aba
  • N2,以结尾但不包含作为因子的一组单词,以及 bab
  • N3,包含作为因子的一组单词,即abN3=L

可以使用以下集合扩充它们(即,这些是相应类中单词的左商):

  • S1=x1L为在包括所有词语的(任何字可以与含有字来扩充作为因子,从而成为在一个字)和,即是xN1LabLbΣS1=LbΣ
  • S2=x1L为在是语言本身,即,和xN2S2=L
  • S3=x1L为在显然。也就是说,我们找到了三个正确因素。作为,它们的闭包是,因此恰好是正确的因素。xN3ΣLS2S1S3S1,S2,S3

因此,我们的分解集的形式为。FL(P1,S1),(P2,S2),(P3,S3)

现在,对于左因子,我们使用该答案开头的方程式:Pi

Pi=xSiLx1

对于,这个收益率,为我们得到和,我们得到。您可以通过检查(懒得陈述正式证明的最流行借口)或显式计算右商(这与计算左商相当,尽管不完全相似)来看到这一点。因此,我们的分解为,其中P1LΣaP2ΣP3LFL=u,v,w

  • u=(P1,S1)=(ΣabΣΣa,ΣabΣbΣ)
  • v=(P2,S2)=(Σ,ΣabΣ)
  • w=(P3,S3)=(ΣabΣ,Σ)

摘要

总结一下(当您要求一个简单的过程时):

  • 用于计算语言的因式分解,首先计算的左侧商。LL
  • 可以这样做,在纸张的语言,通过构建一个最小DFA用于,然后对于每个状态在(对应,作为Nerode-等价类,到左商)计算的将来在,从而获得每种状态的语言的一个左商。ALqAqA
  • 以这种方式获得的左商的集合通常产生右因子的子集。SR
  • 然后计算的闭包,实际上可以通过形成的任何子集的并将以这种方式获得的任何子集添加到来。SRSRSR
  • 集合与上一步的所有交点一起就是的右因子集合。SRL
  • 为了获得左因子,我们可以计算的右商。L
  • 这些都是集的形式的,用于。现在,这些又仅是有限的,对于,当且仅当对于所有,,我们有,也就是说,可以在语言中以完全相同的一组字符串为单词加上前缀。 Ÿ Σ * X ý 大号Ŷ - 1 = 大号X - 1 ü Σ * Ü X 大号Ü ÿ 大号Ly1yΣxyLy1=Lx1uΣuxLuyL
  • 要计算,请考虑那些状态,使包含在的未来中。这些国家的过去的结合构成了一个右商。查找所有这些商。 q A x qLx1qAxq
  • 您会发现找到左因素和右因素一样多时,就完成了。
  • 寻找那些对左,右因素的,使得。这是。X Ÿ 大号˚F大号X,YXYLFL

  1. 伦巴第(Lombardy)和萨卡罗维奇(Sakarovitch)的《通用自动机》(《逻辑与游戏》,第2卷:逻辑与自动机:历史与观点,2007年)

3
真好!让我们注意,对于常规语言,是可确定的,并且由于闭包属性,这些因素,最终是常规的。因此,我们不仅可以有效地计算摘要中的最后一个项目符号,还可以过滤出最大对。X ÿABXY
拉斐尔
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.