我们可以说DFA比NFA更有效吗?


13

我刚刚开始阅读有关计算理论的文章。如果我们比较哪个更强大(在接受字符串中),则两者是相同的。但是效率呢?与NFA相比,DFA的速度更快,因为它只有一个传出的优势,而且不会产生歧义。但是在NFA的情况下,我们必须检查所有可能的情况,这肯定需要时间。那么我们可以说DFA比NFA更有效吗?

但是,我的另一部分大脑也认为NFA仅存在于理论上,因此我们无法将其效率与DFA进行比较。

Answers:


16

有两个答案,具体取决于您定义效率的方式。

表示的紧凑性

事半功倍:NFA效率更高。

将DFA转换为NFA很简单,并且不会增加表示的大小。

但是,对于某些常规语言,最小DFA的指数大于最小NFA的指数。一个典型的例子是为固定。 k(a|b)b(a|b)kk

计算方式

快速运行:DFA效率更高。

我们今天使用的计算机本质上是确定性的。这使他们不善于处理不确定性问题。确定性处理NFA的方法有两种,一种是在一侧进行回溯,这相当昂贵,另一种是跟踪活动状态,这意味着每次转换都将花费倍的时间(其中是NFA的大小) 。NNN


关于紧凑性,NFA并不总是效率更高!的确,有些语言的最小DFA指数比最紧凑的NFA大,但在所有语言集中,此类语言的比例是多少?
saadtaame

2
@saadtaame看起来很奇怪,但从严格意义上讲,NFA不必是不确定的。DFA是NFA的一种特殊类型,即以单例作为起始集的NFA,并且转换函数使得在任何给定时间只有一个状态处于活动状态。
Khaur 2013年

2
-1“增加其大小(可能很多)”。通过保持链接列表来模拟NFA状态集,所花费的空间最多为NFA状态数量中的。另一方面,等效的DFA可能具有状态。O 2 NO(N)O(2N)
徘徊逻辑

@WanderingLogic没错,转换不必是明确的(您仍在使用等效的DFA,只是没有广泛的形式)。但是要点仍然存在,因为与运行相同大小的DFA相比,这需要倍的计算时间。我将更正最后一段以说明这一点。O(N)
Khaur,

感谢您提供此答案,因为我在研究中认为NFA更适合评估,现在我发现要点更加微妙。总体而言,NFA绝对适合固定语言,因为在NFA是DFA的特殊情况下,任何智能NFA评估算法都可以匹配DFA评估复杂性,并且NFA可能更简洁。但是,如果选择是在生成不确定性高的NFA还是找到一种巧妙的方法来获取相同大小的DFA ,则对于某些特定应用,DFA会更好。
6005

4

就功率而言,它们与您所说的等效,并且有一种算法(子集构造)可将NFA转换为等效的DFA。正如您可能从算法名称中看出的那样,它构造了NFA状态的子集。如果您的NFA具有个状态,则该算法可能会输出具有个状态的DFA,但这是一个上限。有时,状态数根本不会改变,甚至不会减少。因此,在实践中,使用哪一个无关紧要。2 nn2n

DFA匹配在输入字符串的大小上是线性的。NFA匹配涉及回溯,因此NFA可以做更多的工作。因此,DFA效率更高。


但是我们可以说DFA更有效吗?
2013年

1
@avi我编辑了问题!顺便说一句,NFA并非仅在理论上存在:请检查:swtch.com/~rsc/regexp/regexp1.html
saadtaame

@avi这里的问题是,与NFA等效的DFA通常会更大。因此,即使您可以更快地检查DFA,通常也必须检查较大的DFA。
彼得

@ Peter,DFA较大并不重要:这仅意味着提供转换函数的数组较大。
vonbrand

1
@Khaur,是的。但是,如果你进入的是这样的问题,你有一个巨大的DFA。
vonbrand

2

只是添加到上面的答案:

从某种意义上说,NFA 可以在并行处理器上进行仿真,因此其计算效率比DFA更高。

顺便说一句:我看到有人说NFA不可能存在。我不敢苟同。具有大量处理器的计算机可以并行运行许多任务,并且可以被视为不确定的机器。可以将计算的每个分支分配给新处理器,并在其中任何一个接受时将其全部暂停。


1
实际上,DFA和NFA都不存在,它们都只是数学关系,并且都可以通过算法进行模拟。
jmite

1

ϵ


ϵ

1
ϵ

但是DFA是否不存在ϵ过渡?
2013年

@avi,是的。如果答案不清楚,请随时编辑。
vonbrand

不,我问你。我也不确定
avi

1

正如其他人指出的那样,您必须定义“效率”的含义。为了说明这一点,我给出一个具有不同答案的合理模型。

展望在自动模式(S),即特别是无视你将如何实现它们的实机,明显的效率措施是“在(最短)接受跑中所转换的数量”。

ε


1

从技术上讲,与DFA相比,NFA是一个更笼统的概念,因为不需要使用不确定性。换句话说:每个DFA都是NFA。从这个角度来看,无论您喜欢哪种效率衡量标准,每种语言都有一个NFA至少与最有效的DFA一样有效。

除此之外,我同意Raphael的观点,这在很大程度上取决于您对效率和实现的含义。


-4

众所周知,Automata即无需任何人力或无需人工直接即可执行任何动作的机器。例如:洗衣机。有限自动机意味着我们知道通过机器执行任务的状态,例如1按下ON 2按下OFF,所以只有2种状态,即有限自动机。现在进入DFA,即确定性有限自动机。从形式上说,我们可以轻松确定没有歧义的状态,非正式地,我们只需要在1个符号上进行1次转换即可。NFA:非确定性有限自动机。需要更多的时间来计算实际状态,并且存在歧义,并且非正式地表示1个符号上有多个允许的转换。在到达目的地的时间方面,NFA比DFA需要更多的时间,但是NFA可以加载比DFA更多的数据。* DFA和NFA具有相同的识别字符串的能力。谢谢.. Deepali kaushik


1
有限的自动机与洗衣机无关。
David Richerby

2
@DavidRicherby。也许“什么都没有”这个短语有点强。毕竟,我们可以说一台洗衣机具有就绪清洗漂洗旋转状态,并且在状态之间进行适当的转换。不过,更好的比喻是投币式汽水自动售货机。
瑞克·德克尔

1
@RickDecker同意,但是花时间讨论微小的相关性将是Wikipedia称之为“过 ”的一个例子。而且,无论如何,我所谈论的答案的一部分是将自动机讨论为自供电机器,而不是计算设备。
David Richerby

1
我认为这个答案对这个问题没有任何意义。特别是,您不清楚效率的度量标准,并且似乎混杂了一些问题。
拉斐尔

其他答案几乎耗尽了所有要说的内容,但不幸的是,您的答案有些混乱。
邪恶的
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.