随机(多项式时间,布尔结果)算法属于RP计算复杂度类,它是NP的子集,其中存在非确定性(多项式时间,布尔结果)算法,而P的超集存在于确定性(多项式时间,布尔结果)中算法驻留。
子集的复杂性是将一组问题减少到另一组。因此,RP⊆NP确实排除了随机算法的可能性,该算法也是不确定性的,因为从定义上说,超集包含子集。子集意味着每个RP算法(或任何RP完整算法)都可以简化为某些NP算法(或任何NP完整算法)。P是RP的子集,因为P中的每个问题都可以简化为RP中的问题,其中不受控制的熵为0。
切线地,这类似于如何通过模拟并行计算简化为P中的串行问题而将NC中的每个问题(并行计算)简化为P中的问题,但尚未证明相反的说法是正确的,即证明P中的每个问题都可以归结为NC中的问题,也不被证明不是真的,即无法证明P完全问题不能归结为NC中的问题。可能存在本质上是串行的问题,无法并行计算,但是要证明证明P≠NC似乎是不切实际的(由于切线问题,无法在此答案中进行讨论)。
更一般地(即,不限于布尔结果类型),随机算法与确定性算法的区别在于某些熵是从外部获取的。因为熵是有界的,所以随机算法与非确定性算法是有区别的,因此可以证明随机(而不是非确定性)算法总是会终止。
非确定性算法的不可预测性是由于无法枚举输入熵的所有可能排列(导致终止的不可预测性)所致。随机算法的不可预测性是由于无法控制所有的输入熵(尽管不确定的速度可以预测,但会导致不确定结果的不可预测性)。这些都不是关于问题的正确答案的不可预测性的陈述,而是不可预测性分别在终止和不确定结果的副渠道中体现。似乎许多读者将一个区域的不可预测性与正确结果的不可预测性相混淆,这是我从未写过的混淆(请参阅编辑历史记录)。
关键是要理解,非确定性总是(无论在任何科学上还是该术语的使用上)都是无法枚举普遍(即无界)熵的。而随机化是指访问可能无限制或无限制的另一种熵源(在程序中,除了但不受输入变量控制的熵)。
我在当前最流行的答案下面的另一个线程中添加了以下评论,该问题提出了类似的问题。
所有科学都使用统一的无确定性定义,统一定义为无穷大的熵。所有科学中无法预测的结果是由于无法接受算法(或系统)的所有可能输出的先验结果,因为它接受无界状态,即NP复杂度类。在其他科学中,指定一个特定的输入以观察它是否停止并注意结果是等幂的,这在其他科学中等同于在重复相同的状态变化时使其余的宇宙熵保持恒定。计算允许这种熵隔离,而自然科学则不允许。
添加一些最佳评论,以澄清我对随机和不确定性之间唯一显着区别的观点。
一旦你们都不再试图通过从操作的角度而不是从显着的熵的角度来描述它,就可以很清楚地看出这种区别。
@reinierpost每个人都在混淆随机性和不确定性之间的区别。这会使您的评论变得混乱。该算法响应输入(变量)熵及其源代码(不变)内部熵的相互作用。非确定性是无限熵。不变熵甚至可以在内部不受限制,例如扩展π的位数。随机化是某些熵未按定义与输入耦合(即可能来自系统调用/dev/random
或模拟随机性,例如NFA或PRNG)。
。
非确定性有限自动机(NFA)的@Raphael正式定义是有限输入熵(数据:5元组)。因此,每个NFA都可以在确定性图灵机上运行,即不需要不确定性的图灵完整机。因此,NFA并非属于不确定性问题。NFA中的“非确定性”概念是,它的确定性(由于每个NFA都可以转换为DFA而已明确存在)没有明确扩展-与计算的非确定性不同
。
@Raphael在NFA中声称的“非确定性”确实是随机性,这是我对随机性和非确定性之间的区别的定义。我的定义是,随机性是程序或函数输入的某些不受控制,知识(或者在NFA的情况下不是期望的非显式扩展)的熵的地方。而真正的不确定性是在任何情况下都无法知道熵,因为它是无限的。这正是随机与不确定性区别开来的原因。因此,NFA应该是前者的一个例子,而不是您所声称的后者。
。
正如我已经解释过的,@ Raphael是NFA中的非确定性概念,将不确定性与有限熵结合在一起。因此,非确定性是不将确定性扩展为压缩或便利形式的局部概念,因此我们并不是说NFA是非确定性的,而是它们对于不愿计算确定性扩展的预言家而言具有随机性。但这全是海市rage楼,因为它要求确定性地扩展,因为熵不是无限的,即有限的。
字典是工具。学习使用它们。
随机形容词
统计。选择过程的特征或特征,其中一组的每个项目被选择的可能性相等。
是集合或集合的一个元素或与之有关,每个元素具有相同的出现概率
因此,随机化仅要求某些输入熵是等概率的,因此与我的定义一致,即某些输入熵不受函数调用者的控制。请注意,随机化不需要输入熵到终止就无法确定。
在计算机科学中,确定性算法是一种算法,在给定特定输入的情况下,它将始终产生相同的输出,而底层计算机始终通过相同的状态序列。
形式上,确定性算法会计算数学函数;函数在其域中的任何输入都具有唯一的值,而算法是将这个特定值作为输出产生的过程。
可以根据状态机来定义确定性算法:状态描述了机器在特定时间瞬间所做的事情。状态机以离散方式从一种状态传递到另一种状态。输入输入后,机器就处于初始状态或启动状态。如果机器是确定性的,则意味着从这一点开始,其当前状态将确定其下一个状态。它通过状态集的过程是预先确定的。请注意,机器可以是确定性的,并且永远不会停止或完成,因此无法提供结果。
因此,这告诉我们确定性算法必须完全由函数的输入状态决定,即,我们必须能够证明函数将终止(或不终止),并且不能确定。尽管Wikipedia进行了描述不确定性的混乱尝试,但Wikipedia上面定义的唯一与确定性相对的是算法,其输入状态(熵)定义不明确。输入状态无法定义的唯一方法是无状态输入(因此无法确定性地进行预先分析)。这正是非确定性Turing机器(以及许多用通用Turing完整语言(例如C,Java,Javascript,ML等)编写的现实世界程序)与确定性TM和编程语言(例如HTML,电子表格公式, Coq,Epigram,
在计算复杂性理论中,不确定性算法是一种在每个可能的步骤上都可以允许多个连续性的算法(想象一个人沿着森林中的一条小径行走,每走一步,他就必须选择自己希望的那条叉子采取)。这些算法无法为每种可能的计算路径提供解决方案。但是,可以保证为某个路径找到正确的解决方案(即,穿过森林的人只有选择“正确”路径的某种组合才可能找到自己的小屋)。这些选择可以解释为搜索过程中的猜测。
维基百科和其他人试图将随机性与不确定性混为一谈,但是如果您不想雄辩地区分这两个概念,那有什么意义呢?
显然,确定性与确定能力有关。显然,随机化是关于使某些熵相等。
在算法状态下包含随机熵并不一定会使它不确定。例如,PRNG可以具有所需的等概率统计分布,但也可以完全确定。
智商低下的人将正交概念混为一谈。我期望比这个社区更好!