左右联想乘积相同的词


9

我已经开始使用Hopcroft和Ullman的书研究非确定性自动机。我陷入了一个非常有趣的问题:

给出一个不确定的有限自动机,该自动机接受根据下表乘以从左到右从右到左从左到右求值的所有具有相同值的字符串:

×abcaaacbcabcbca

因此,如果我们有字符串, 则从左至右的乘积为a × b × c = a × c = c, 而从右至左的乘积为a × b × c = a × b = 一个abc
(a×b)×c=a×c=c
a×(b×c)=a×b=a

因此,对于自动机应该是不可接受的。对我来说,它的明显,任何字符串一个一个*b b *C ^ C ^ *是一个aceptable字符串(对相同部分列左右评估工作)。提供一个描述从左到右评估的NFA很容易,但是问题是,如果机器尝试计算从右到左评估,我认为它需要知道字符串的长度(因此需要无限的存储空间)。abcaabbcc

那么如何将不确定性自动机从右到左进行评估,以便与从左到右进行评估?

Answers:


6

这里的第一个技巧是将乘法表视为自动机的转换表,每个状态都代表乘法表中的一个字母,但还不必担心接受。因此,表格左侧和正文中的字母实际上是状态—将它们写为q aq bq c会更准确,但我不会。顶部的字母是输入。Aqa,qb,qc

然后通过转置A来构造自动机(用于转置的“ T ”)用于反向乘法ATTA

ATabcaacbbaacccba

所以把你带到状态Ç,同样一个牛逼c ^ b 移动到国家一个牛逼,你注意。A(abc)cAT(cba)aAT

但是,假设您要从右往左走,而我们仍然想从左往右走。因此,第二个技巧是通过反转所有箭头来反转自动机(而不是乘法,这将使我们重新开始),这将导致下面的转换表给出不确定的自动机A T R,通过串接字母表示的子集,以保持鸡刮了下来,所以一个ç真是{ ç }。(希望我没事-似乎有效)。ATATRac{a,c}

ATRabcaabbcbcaccabababbcacbccacabcacabcabbcabcabcabcabc

您可以将其解释为仅在该行上方三行的非确定性自动机,或者将其解释为全部8行的确定性自动机。

最后,解决问题的机器是原始A T R的叉积自动机,即执行两个自动机的相交行为的A × A T R(我们不再需要A T了) 。 × Ť ř具有是对等状态一个一个Ç 。转换函数独立运行AA T R。一个单一的启动状态1 1 AATRA×ATRATA×ATRa,acAATR1,1进入下输入一个b b 下输入ba,aab,bb

在非确定性版本接受状态被等在确定性版本,接受状态是对在该第一成分是第二部件组,如一个一个b b ç a,aa,ab,bc

增强和确定化如图具有 25 = 3 8 + 1的状态,所以原谅我不写出来的细节。但非确定性版本仅具有 10 = 3 3 + 1的状态。A×ATR25=38+110=33+1


谢谢,它确实帮助了您理解非确定性和自动机的“反向”概念的答案。我在使用霍普克罗夫特(Hopcroft)的书来理解这个概念时遇到了困难,现在我在使用Sipser的《计算理论概论》(Instroduction to the Theory of Computation)确实有好处。
Ariel先生2012年

考虑输入1 1 移动到b b 输入之后b,然后到Ç 下输入一个,所以b 一个不被接受的,但应该是什么?ba1,1b,bbc,aba

8

如果 L是常规语言,则 L R(由 L中所有单词的序组成的语言)也是常规语言。以此为练习。()LLRL

这如何帮助我们解决问题?令为由从左至右求值时所有求值为a b c的字符串组成的语言。语言你感兴趣的是 大号大号[R 大号b大号[R b大号ç大号[R Ç 这表明如果您知道如何证明La,Lb,Lca,b,c

(LaLaR)(LbLbR)(LcLcR).
,然后可以为所讨论的语言构造NFA。()

实际上,如果您使用证明的思想,那么您可能可以继续构建自动机。因此,让我们考虑一下。特别是,让我们尝试为L R a构造一个NFA,即从右到左求值时所有求值为a的字符串的语言。()LaRa

bbbx=ax=bcaab

这个提示应该给您足够的思考空间,并有望解决问题。


用公式证明这一点的好方法-支持这一点。至于另类的“非确定性猜测和验证”想法,通常可以作为证明,但根据问题的要求,实际执行起来非常棘手。我认为这里有很多遗漏的细节,例如如何跟踪后端的字符串。
大卫·刘易斯

@David,故意遗漏了细节。
Yuval Filmus 2012年

@Yuval-他没有说这是作业-我们信任这里的人,对吗?我还认为,这种存在证明将导致相当大的机器,可能比所需的机器大很多。
大卫·刘易斯

@DavidLewis:Gilles给出了一个更完整的答案,这表明NFA确实不是太大。不确定性会为您做到这一点。不过,相应的DFA可能很大。
拉斐尔

@MohamedAbbas也许,我不打算检查。
Yuval Filmus 2015年

6

可爱。

xyzxy=z{a,b,c}11xxxxx

现在,让我们建立一个自动机,从右到左计算乘积。这将是不确定的。我们该怎么做?很简单……要朝另一个方向前进,只需扭转一切:箭头和产品的方向。

xyxyxyxyxyyx

1

(x1,x2)y(z1,z2)x1yz1x2yz2(1,x)(x,x)x


xyyx导致有限状态集?IAC,这不仅像“反转所有内容”一样简单,因为您仍然必须从左到右进行消耗,而是从右到左进行累加,而且我不确定您是否做到了。
大卫·刘易斯

{overleftarrowa,b,b,1}

5

看来您的主要问题是利用不确定性,因此让我详细说明一下。

其他人利用的基本思想是不确定的机器可以猜测最终结果。

abc

  • aabcab
    • abb
      • bc
    • bbc
      • cc
  • ba
  • cabcc
    • cba
      • ac

如您所见,NFA能够自底向上猜测和检查所有可能的计算。因为接受的语言被定义为至少一个运行接受的一组字符串,所以将忽略输入上所有不接受的运行;NFA“总是猜对了”。

现在,这个NFA可以轻松记住它的首选,直到最后。如果接受,它可以将记住的符号与并行获得的lr乘积(确定性地)进行比较(Ullman / Hopcroft和任何其他基本教科书肯定涵盖了语言交集与NFA的关系)。


猜字符串的想法对我来说很奇怪,但是我一直在阅读Sipser的书,我认为这对像我这样的新手来说是一个更好的计算理论。
Ariel先生2012年

将猜测视为假设输入的分叉。但是需要谨慎使用猜测策略-确保所有分支线程的猜测所需存储空间是统一限制的,否则您将不再有有限状态自动机。另外,还需要对活动的分支线程数进行统一限制。我认为Raphael在这里的描述是可行的,但至少需要提及。
大卫·路易斯
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.