为什么非确定性是一个有用的概念?


23

自动机是数字计算机的抽象模型。数字计算机是完全确定的。根据输入和初始状态,可以随时预测其状态。

当我们尝试对真实系统建模时,为什么要在自动机理论中包括不确定性?


1
询问谁最初描述了NTM及其当时的目的/目标可能会有所帮助。
2014年

2
请注意,机器是确定性的事实并不总是意味着我们的代码是。完成多任务/多线程的任何人都可以证明一个事实,即从任何实际角度来讲,任务切换发生的时间通常都是不可预测的,我们必须设计显式联锁以使它们的行为具有确定性。(基本上,状态中存在隐藏的变量。)通信会引发相同的问题。老实说,我不知道NDA是否可以帮助解决这些问题-我是软件工程师,而不是计算机科学家-但在现实世界中,您的前提过于乐观。
keshlam 2014年

当你谈论的多线程,可以说,你不确定性,至少如果你认为金属和OS形成机。有趣的是,代码本身确定性的。
拉斐尔


@keshlam我在回答中添加了您的观点,@ Tanmoy阅读了更新的回答。
Grijesh Chauhan 2014年

Answers:


16

是的,您是对的,计算机是确定性的自动化。非确定性模型在理论上更有用,有时确定性解决方案对定义(或说问题陈述)不那么明显,因此很难找到解决方案。然后一种方法是,首先设计一个非确定性模型,该模型可能相对容易设计,然后尝试将其转换为确定性模型。下面,我试图通过一个例子来说明我的意思。考虑正则表达式:

(01)*01(0 + 1)*  

现在假设,如果要求您为上述RE生成的语言绘制DFA。

以我设计FA的知识,我知道(1)*正则表达式中的内容表示我需要FA中的相应循环时 (2)串联操作之类的a.b意思是:(q0)─a→(q1)─b→(q2)

因此,在我的拳头尝试下,我将绘制一个NFA,例如:

图

认为这不是确定性解决方案,而是看起来非常简单的FA,可以使用给定的正则表达式轻松进行设计。我想证明上述正则表达式与我的NFA之间有相似之处,如下:

  1. 状态q 0处的循环应为(01)*
  2. 01(之后(01)*)给出(q0)─0→(q1)─1→(q2)
  3. (0 + 1)* 在状态q 2处给出标签0、1 的自循环

根据我的类比,我认为从给定的RE提取上面的FA比较容易。幸运的是,在有限自动机类中,每个非确定性模型都可以转换为等效的确定性模型。我们有将NFA转换为DFA的算法方法。因此,我可以轻松地将上述NFA转换为DFA:

图2

不幸的是,另一部分并不总是可能将非确定性模型转换为确定性模型,例如,确定性下推自动化的类是确定性下推自动化的“ check venn diagram ” 类的子集,您不能总是转换将NPDA转换为PDA。

通常,当不可能将非确定性解决方案转换为确定性解决方案时,则借助非确定性解决方案,我们在子域(或称部分域)而非完整域中定义确定性解决方案。或者我们以其他方式(例如贪婪方式)定义解决方案,这当然可能无法为您提供最佳解决方案

有时非确定性是精确有效地描述某些复杂问题/解决方案的有效机制,例如,非确定性机器可以用作搜索和回溯算法的模型(请参阅:如何使用回溯在非确定性模型中进行字符串处理)。相反,确定性模型可以更好地表示有效,最小化和较少冗余的解决方案。

在这里,我还要引用维基百科非确定性算法的使用

在算法设计中,当由算法解决的问题固有地允许多个结果时(或当单个结果具有可发现结果的多个路径时,每个方法都同样可取),通常使用不确定性算法。至关重要的是,不确定性算法产生的每个结果都是有效的,无论该算法在运行时做出何种选择。

可以通过不确定性算法将大量问题概念化,包括计算理论中最著名的未解决问题,即P vs NP。

正如@keshlam在他的评论中也提到的那样:“非决定论”实际上指某些过程结果中的任何不可预测性。例如,并发程序表现出不确定的行为-同一程序具有相同输入的两次执行会产生不同的结果(如果未应用并发控制机制)。在“非确定性的有用性”中阅读有关此内容的更多信息

我还建议您阅读以下链接:
1 .非确定性和随机性有什么区别?
2. 9.2.2非确定性模型与概率模型:(a)。不确定性:我不知道自然会做什么。(b)。概率:我一直在观察自然并收集统计数据。
3. 非确定性编程


@Grijest:非常感谢您所做的如此详尽的阐述。只有一个困惑:“相反,确定性模型更好地表示了有效,最小化和较少冗余的解决方案。”-但是我认为确定性模型的效率不如不确定性模型。(这就是NP问题的原因比P更复杂。不是吗?)
tanmoy 2014年

@tan实际上使用“有效”一词是错误的,是的,您是正确的,非确定性模型比确定性模型更有能力。确定性模型涵盖的问题类别是非确定性模型的子集。
Grijesh Chauhan 2014年

那么在哪种情况下,确定性模型要比非确定性模型“有效”(如您所述)?
tanmoy 2014年

@tan假设如果您想执行进一步的操作(例如,要将FA转换为RE,或解释有关抽引引理的证明,等等),那么确定性模型将为您提供更好的结果(所以我说很有效)。
Grijesh Chauhan 2014年

@tan你明白模棱两可的语法吗?
Grijesh Chauhan 2014年

9

反之则相反:自动机首先出现,是数学模型。而且不确定性是很自然的,您通常有数条未解决的道路。而不是采用某种混乱的方式来指定必须按照某种顺序将所有路径都遵循到底,并且可能会被无限分支所束缚,而...只是使用不确定性。

尽管不确定性编程语言并不是主流,但它们具有悠久的历史,也许始于Dijkstra的GCL。随着机器寻求越来越多的内核(独立处理器),某种形式的不确定性正在渗透到所有编程中。


我认为您的答案的第一部分实际上是错误的。您为什么认为自动机首先出现?在Turing定义TM之后10年以上,同时定义了DFA和NFA。见讨论上cstheory
阿尔乔姆Kaznatcheev

@ArtemKaznatcheev,图灵机模型是自动机,并且肯定比计算机早十年。
vonbrand 2014年

是的,但是当人们说自动机时,它们不是TM,而是有限状态自动机及其直接扩展(PDA,NPDA等)。看到我为那里的历史所链接的问题,您将看到TM和von Neumann体系结构都是独立于我们现在称为自动机理论而开发的。
Artem Kaznatcheev 2014年

4
@ ArtemKaznatcheev,DFA / NFA,PDA,LBA,TM都是自动机。传感器(带输出的FA,带输出的PDA)也是如此。
vonbrand 2014年

1
最后一段是错误的。Prolog早于GCL,甚至仍然存在并且相当主流。当然,Prolog并不是在真空中设计的,它是建立在以前的非确定性编程语言(例如PLANNER)的基础上的。功劳可能归功于1965
。–别名2014年

7

NFA可能会在实践中使用,请在stackexchange上查看此答案。可以这么说,原因是可以实时模拟电源组构造。为了在确定性计算机上模拟NFA,我们只跟踪可能发生的情况。状态的NFA可能是,通常情况下,这个数目会很小,所以模拟会很快。这比运行实际的动力装置构造要实际得多:尽管实际上很少会达到大多数动力装置,但产生的自动机可能非常大。

非确定性对于计算复杂性也很重要,在非复杂性中用于定义NP类。(NP类还具有其他等效定义,例如使用见证人。)


了解您的答案,但无法正确把握。您能否详细说明一个事实,即如何使用不确定性轻松地构建电源集?
tanmoy 2014年

“非决定论对于计算复杂性也很重要,因为它用于定义NP类。” -仅当我们假设NP是有用的概念时才支持非确定性的重要性,仅当非确定性有用时才支持非确定性。
拉斐尔

无论您对不确定性的立场如何,@ Raphael NP完整性都是一个重要的概念。
Yuval Filmus 2014年

2
@Tanmoy如果您不确定,则不需要Powerset构造,但是不幸的是,真正的计算机是确定性的。不过,直接模拟NFA而不是先将其转换为DFA可能会更容易。查看我链接到的答案以获取更多详细信息。
Yuval Filmus 2014年

4

您正确地指出自动机是模型,因此不确定性可以有两个使用部分:

  1. 用于建模实际问题。

    如果删除不确定性,例如下推自动机(CFL DCFL),并非所有自动机都具有同等的功能。因此,尽管最后我们将不得不以确定性的方式模拟NPDA,即当我们实际实现解析器时,我们需要将其作为某些语言的模型。

    此外,非确定性自动机可以提供更紧凑的语言表示形式。例如,众所周知,存在NFA,其最小等效DFA呈指数增长。

  2. 在理论上使用。

    使用非确定性可以简化证明,请参见例如将正则表达式转换为有限自动机。


4

(这是其他一些答案的改写,但我还是会贴出来:)

您写道:自动机是数字计算机的抽象模型。

我不同意!自动机可以模拟人类如何指定计算,而不仅仅是计算机如何执行计算。不确定性恰恰是区别。我们的规格通常是不确定的。

例如,采用merge sort。合并排序是通过将要排序的项目分成大小大致相等的两半进行排序,然后使用合并排序对每一半进行排序,然后合并排序的结果。这完全指定了合并排序的概念,但不是确定性的:它没有指定对两半进行排序的顺序(就我们而言,我们可以同时进行),也没有指定确切的方法确定拆分。这些细节将需要填写,以便确定确定的顺序版本的合并排序,该排序可以由单线程计算机程序实现,但是我想说它们是进行合并排序的一种特定方式的一部分,而不是合并排序本身的想法。

总体而言,算法也是如此-例如食谱。有人算法定义为确定性的,在这种情况下,这种更笼统的方法,我认为更自然的“算法”概念需要一个不同的名称。

使用非确定性规范的想法是由Dijkstra的编程方法形式化的,该方法以仅给出程序要满足的前提条件和后置条件的规范开始,并从中系统地开发确定性的命令性程序。迪克斯特拉可能会说:排序是问题,我们要建立的前提条件和后置条件之间的关系;合并排序是一种在问题说明和确定性解决方案之间的中间位置进行此操作的方法;一种特定的确定性合并排序算法是一种具体的确定性解决方案。但是,可以使用相同的通用方法来开发并发程序,其中最终程序仍然是不确定的。这样的程序可以例如在分布式计算环境中运行。


2

没错,我们无法构建不确定的机器。因此,目标不是使用该概念来制造更好的机器。相反,当试图理解计算时,不确定性是一个有用的概念。例如,我们现在知道,从可计算性的角度来看,非确定性并不比确定性更强大,这意味着我们可以通过使用确定性机器来模拟非确定性机器。但是,从复杂性的角度来看,不确定性使我们能够推理和尝试理解找到问题的有效解决方案的难度与验证解决方案的难度之间的关系(著名的P对NP问题) 。等等。因此,研究不确定性的主要原因是理论上的。


上下文无关与确定性上下文无关?
中音2014年

@alto呢?
2014年

@babou我试图指出“非确定性并不比确定性更强大”,这是一个错误的说法。NPDA比PDA更强大。
中音2014年

1
@alto:不,您误解了该声明。从可计算性的角度来看,它们是完全等效的,因为您可以独立地解决需要多少计算资源的问题(或语言)。实际上,您可以使用确定性机器模拟一台不确定性机器。同样,在可计算性上下文中,所需的时间和空间并不重要。
Massimo Cafaro 2014年

1
从理论上说,@ MassimoCafaro无法同意。在实践中,我似乎更喜欢争论语义。
中音2014年

2

图灵机的发明是图灵于1936年发明的。FSM样模型通过引入麦卡洛克和皮茨两个神经生理学家,为神经生物学活动在1943年从斯坦福CS模型的历史页面

有限自动机如何成为计算机科学分支的激动人心的历史说明了其广泛的应用。最早考虑有限状态机概念的人包括生物学家,心理学家,数学家,工程师和一些第一批计算机科学家。他们都有共同的兴趣:模拟人类的思维过程,无论是在大脑中还是在计算机中。两位神经生理学家沃伦·麦卡洛克(Warren McCulloch)和沃尔特·皮茨(Walter Pitts)在1943年率先提出了有限自动机的描述。他们的论文《神经活动中固有的逻辑演算》为神经网络理论,神经网络理论的研究做出了重要贡献。自动机,计算理论和控制论。后来,两名计算机科学家GH Mealy和EF Moore,在1955-56年发表的单独论文中,将该理论推广到了功能更强大的机器上。命名有限状态机,Mealy机和Moore机是为了表彰其工作。

不是CS历史学家,而是怀疑McCulloch-Pitts模型不包含不确定性,而Mealy - Moore模型却包含了形式/理论概念的自然概括/抽象。请注意,DFA和NFA具有相同的表示能力,因此,如果希望对真实系统建模,则可以选择其中一种。一个基本的区别是NFA可能比等效的DFA 小得多(例如,存在数据/信息压缩的自然因素)。在NFA研究中,并行性也有自然的方面/类似物。


3
嘿,我看到了您的个人资料,看起来好像有人在故意低估您的答案(每个地方只有两次低票)...这个答案没有错,答案添加了有用的信息。+1
Grijesh Chauhan 2014年

0

首先,我要感谢所有回答此问题的人。所有答案都很重要并添加了一些有用的信息。但是由于这对于初学者来说是一个棘手的问题,需要足够的时间来很好地理解它,会尝试总结我从所有答案和一些书中学到的东西:

实际上,我对不确定性模型的机制感到困惑。我一直想知道非确定性机器,因为它是在现实世界中不存在的非机械机器。我总是将Automata与当今的完全确定性的计算机进行比较。实际上,我并没有正确地理解不确定性模型。现在,我认为我已经很好地理解了非名词性模型:非确定性机器是始终遵循执行路径并导致接受字符串的机器(无回溯),但是在现实生活中怎么可能呢?:当今的计算机绝对不可能如此智能地预测未来。那么为什么非确定性呢?这个问题的答案很棘手,我得出的结论是:当计算机不存在时,自动机理论确实存在(先是理论,然后是实用的)。它纯粹是理论性的主题,非确定性的概念是凭直觉产生的。“自动机理论”主题的动机不是要处理实际的计算机。但是,当实际上计算机出现时,然后可以使用自动机理论来精确定义实用计算机:当今计算机的局限性是什么?算法问题对计算机来说非常复杂,因此不切实际(在这里,非derderminism的作用非常关键,因此我们可以区分两个复杂度类别P和NP。这些不切实际的问题的解决方案是什么,它可以比较快地执行。这就是不确定性的用处。它纯粹是理论性的主题,非确定性的概念是凭直觉产生的。“自动机理论”主题的动机不是要处理实际的计算机。但是,当实际上计算机出现时,然后可以使用自动机理论来精确定义实用计算机:当今计算机的局限性是什么?算法问题对计算机来说非常复杂,因此不切实际(在这里,非derderminism的作用非常关键,因此我们可以区分两个复杂度类别P和NP。这些不切实际的问题的解决方案是什么,它可以比较快地执行。这就是不确定性的用处。它纯粹是理论性的主题,非确定性的概念是凭直觉产生的。“自动机理论”主题的动机不是要处理实际的计算机。但是,当实际上计算机出现时,然后可以使用自动机理论来精确定义实用计算机:当今计算机的局限性是什么?算法问题对计算机来说非常复杂,因此不切实际(在这里,非derderminism的作用非常关键,因此我们可以区分两个复杂度类别P和NP。这些不切实际的问题的解决方案是什么,它可以比较快地执行。这就是不确定性的用处。但是,当实际上计算机出现时,然后可以使用自动机理论来精确定义实用计算机:当今计算机的局限性是什么?算法问题对计算机来说非常复杂,因此不切实际(在这里,非derderminism的作用非常关键,因此我们可以区分两个复杂度类别P和NP。这些不切实际的问题的解决方案是什么,它可以比较快地执行。这就是不确定性的用处。但是,当实际上计算机出现时,然后可以使用自动机理论来精确定义实用计算机:当今计算机的局限性是什么?算法问题对计算机来说非常复杂,因此不切实际(在这里,非derderminism的作用非常关键,因此我们可以区分两个复杂度类别P和NP。这些不切实际的问题的解决方案是什么,它可以比较快地执行。这就是不确定性的用处。这些不切实际的问题的解决方案是什么,它可以相对更快地执行。这就是不确定性的用处。这些不切实际的问题的解决方案是什么,它可以相对更快地执行。这就是不确定性的用处。

如果有任何问题,请纠正我。


不能肯定地说,不确定机器是始终遵循执行路径并导致接受字符串的机器。它不会那样做!非确定性机器是这样一种机器,其操作允许在执行过程中做出某些未预先确定的(=非确定性)选择。这样的机器没有什么不现实的,例如,他们可以要求环境做出这些选择。然后,将这些机器应用于某些选择将产生接受状态的任务。
reinierpost 2014年

@reinierpost:所以你说的是在现实生活中确实存在非确定性机器。
tanmoy 2014年

是。这是一个示例:假设您正在开车,并且对行驶路线没有任何决定。例如,您可能漫无目的地行驶,或者可能是从人类导航仪或导航设备上获取路线的。汽车和您是驾驶场所的不确定系统。您在交通中移动,不断遇到选择哪个方向。对于您和您的汽车,这些选择是不确定的:您不是在决定要走的方向,但是在做出决定之后,您将遵循它。
reinierpost 2014年

@reinierpost:是否存在任何不确定的计算机?我的答案是不。因为如果存在,那么NP问题将具有多项式时间复杂性。是不是
tanmoy 2014年

计算机是确定性的还是不确定性的,取决于您如何看待它们。当计算机停止运行并等待用户执行某项操作时,计算机的下一步操作将取决于用户执行的操作,可以说这是不确定的选择。不,这并不意味着P = NP。
reinierpost

0

非确定性很有用,因为它可以帮助您了解确定性,但反之则无济于事。您可以说不确定性是更大的主意。确定性的图腾机是非确定性的图腾机的一种特殊情况。-非确定性可以帮助我们理解为什么在当今平台上很难解决一些问题。许多计算问题在确定性计算平台上没有有效的解决方案,但是我们知道,在非确定性计算平台上可以有有效的解决方案。...状态,编码,不确定性都链接在一起http://people.cs.umass.edu/~rsnbrg/teach-eatcs.pdf

在确定性的图灵机中,规则集最多规定 对于任何给定情况要执行的一个动作。相反,非确定性图灵机(NTM)可能具有一组规则,该规则规定了给定情况下的多个动作。 http://en.wikipedia.org/wiki/Non-deterministic_Turing_machine 如果您可以构建一个软件盒,可以很好地管理状态转换,使其可以处理多个动作,那么您可以获得超越确定性机器的性能。


我不确定所谓的与现实的联系是否会有所帮助。很显然,我们无法(至少在今天)无法构建非确定性的机器,因此它完全是一种理论构造。
拉斐尔

我们可以通过使不确定性决策由机器外部的某些事物来构建不确定性机器。
reinierpost 2014年

@ reinierpost,更重要的是,我们可以将非确定性机器构建为确定性机器,而不会产生指数级开销。参见萨维奇定理。en.wikipedia.org/wiki/Savitch's_theorem
汤姆(Tom)

@ Raphael,对现实世界的一些参考很重要。为什么缓存有效?因为现实世界中的事件(最终是所有数据的来源)碰巧遵循正态分布。看时间局部性:durablescope.blogspot.co.at/2009/11/...
汤姆

@ reinierpost,而图灵称为oracle机器就是外部的东西。我想您可以考虑一下,这是因为数据是从缓存中出来的,还是像多磁带机之类的东西,甚至是进入随机存取存储器的东西。
汤姆(Tom)

0

为什么非确定性概念很有用?

确定性很容易破坏对称性。对于顺序确定性来说,这种趋势甚至更强,但是无环有向图的概念和这种图的拓扑顺序允许忽略确定性和顺序确定性之间的差异。非确定性是确定性的超集,它可以保留更多的对称性。在设计问题的解决方案时,从不确定性解决方案开始可以保留有用的对称性,从而使解决方案的描述小而紧凑。然后可以将对称性的破坏委派给实施过程中的下一个阶段,同时将非确定性解决方案转换为确定性解决方案。

通常,非确定性意味着将部分功能的概念替换为关系的概念。在那种情况下,非确定性机器可以在时间上向前和向后运行,而对于确定性机器通常是不可能的。如果我们使用确定性的总函数和非确定性的多值总函数,对称性不再那么好,但仍然可以使它起作用。


你能举一个具体的例子吗?我发现很难在这里理解“对称”的含义。
拉斐尔

@Raphael怎样将(01)* 01(0 + 1)*反转为(0 +1)* 10(10)*,以便识别反转的输入字符串,并通过反转全部将这种对称性应用于非确定性机器箭头并交换开始和结束状态?我不确定对于有限状态机是否还有很多有趣的例子,但是我可以尝试为PDA提出一个有趣的例子。
Thomas Klimpel,2015年

我在有关二元关系,亚随机矩阵和偏函数的可逆性的博客文章中写了我对类似问题的回答。
托马斯·克里姆佩尔
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.