English 中文(简体)
当大饥荒失败时?
原标题:
  • 时间:2009-06-02 18:57:21
  •  标签:

有哪些实例表明,Big-O公证......在实践中失败?

这就是说:算法的操作时间何时会预测算法。 速度要快于算法B,但在实践中,算法B在运行时会更快?

范围很广:对算法业绩的理论预测何时观察到运行时间? 非Big-O的预测可能基于搜索树中平均/预期的轮换数,或作为要素数倍的对等算法的比较数。

www.un.org/Depts/DGACM/index_spanish.htm

尽管有些答复说,“Big-O notation is指的是预测算法业绩。 尽管如此,它拥有一个lawed工具:它只是谈到症状的表现,它模糊了不变的因素。 这样做是因为以下原因:它旨在预测算法的性能,而独立计算法则由你执行算法。

我想知道的是:这一工具的缺陷何时显现? 我发现Big-O公证相当有用,但远非完美。 哪些陷阱、edge、 go?

I m 寻找的一个实例是:将Dijkstra带最短的路算法与Fibonacci的蒸气相比,而不是双双双向的蒸气,你获得O(m + n)时间与O(m+n)的 log和 m。 您预计,菲博托克谢(Fibonacci)的速率会较快或更晚,但他说,速度在我的实验中从未增加。

(没有证据的确凿证据表明,以统一随机对冲权进行操作的双轨制片占用了O(1)时间,而不是O(log n)时间;该试验有一个大的 go。 另一个需要计算奇数的是,预计的降临凯。

*** 确实是“notation <>/em> > 失败的,但concepts the notation is for,也是预测算法业绩的理论方法。 提炼;

www.un.org/Depts/DGACM/index_spanish.htm 关于已接受的答复:

我接受回答,强调我所希望的那种答案。 有许多同样好的答案: 我对答案的看法是,它提出了一条一般性规则,规定“大口径终端”何时(当海滩主宰执行时间时)也可能加深理解(从某种意义上讲,我并不肯定如何最好地表达自动取款机)。

最佳回答

A. Big地区 O故障是记忆存取模式。 页: 1 仅对需要开展的业务进行计数,如果算法导致更多的海滩或需要从磁盘上页的数据,则可以跟踪。 对于小的N来说,这些影响通常会占主导地位。 例如,通过100个蓄水层进行细线搜索,可能由于记忆存取而通过100个ger树进行搜索,尽管双平树很可能需要较少的操作。 每一树苗都会造成海滩错乱,而线搜查则主要打上每一座的海滩。

问题回答

它完全没有: 当人们试图用它来做某些事情时,它就没有意义。

它告诉你算法比额表如何。 它没有告诉你它的速度。

Big-O notation don t 告诉你,在任何特定情况下,算法会更快。 它只告诉你,如果投入足够大,就会更快。

当N小时,恒定因素占主导地位。 在五种项目中研究一个项目可能比在一张黑板桌上研究该项目要快。

简短回答: 无。 当你只有三个目的地时,便能迅速解决旅行销售商的问题(不过,在数万个要素清单中找到最小数目可以持续,尽管这是O(n)。 iii

can的例子就是Quicksort,最糟糕的是O(n^2),而Heapsort s则是O(nlogn)。 然而,在实际中,Quicksort通常在更快的时候。 为什么? 两个原因:

  • Quicksort的每一个频率都比Heapsort要简单得多。 更糟糕的是,它很容易通过简单的切身战略优化。

  • 最糟糕的情况非常难以打击。

但是,IMHO,这并不意味着大O以任何方式失败。 第一个因素(时间)很容易纳入你的估算。 毕竟,这一几乎不变的事实应当使大的O数倍多。

如果你获得摊销数字,那么第二个因素就会消失。 更难以估计,但更完整地说明情况。

Big-O描述了算法的效率/复杂性,不一定是实施特定编码系统的运行时间。 这并不意味着Big-O失败。 这只是说它无意预测时间。

查询。 问题大体定义

  1. 大多数算法都有“平均案件”和“最坏案件”。 如果你的数据通常属于“最坏情况”的情况,那么另一种算法虽然理论上对平均情况效率较低,但可能证明对你的数据更为有效。

  2. 有些算法还拥有最佳案例,可以利用你的数据。 例如,某些分类法具有很强的理论效率,但如果已经对数据进行分类(或几乎如此),则实际上非常快。 另一种算法虽然从理论上说在一般情况下较快,但可能无法利用数据已经分类,实际上更糟。

  3. 对于非常小的数据集,有时由于“k”价值大,理论效率较好的算法实际上可能效率较低。

一个例子(我不是一位专家)是,线性方案拟订的简单算法在任意投入方面有着极其复杂的情况,尽管它们在实践中表现良好。 令人感兴趣的解决办法是考虑“变迁的复杂性”,这种复杂性通过研究任意投入的小规模随机扰动,打破了最坏的情况和平均情况。

http://vis.kfupm.edu.sa/content/s/m/smoothed_analysis_of_algorithms_why_the_110204.pdf”rel=“nofollow noreferer”>,Spielman和Teng(2004)能够表明,影子-vertex简单的x算法具有全面的复杂性。

Big O do not, e.g. 算法 运行速度快于算法B。 它可以说算法所用的时间或空间 投入增加时,以比算法B不同的速度增长。 然而,对于任何具体投入规模而言,大面积的公证对一个算法相对于另一个算法的性能没有任何影响。

例如,A的运行速度可能较慢,但比B的操作量要好,B的操作效果更小,但如果数据规模增加,A的切入点就会更快。 Big- O本身并不说这一截断点在哪里。

一般答案是,Big-O通过掩盖经常因素,使你能够真正 s。 如上所述,使用Fibonacci Heaps就是一例。 Fibonacci Heaps do >有很强的症状,但在实践中,恒定因素过于庞大,无法用于实际生活中遇到的成套数据。

Fibonacci 由于与图表有关的算法的症状复杂性,因此往往使用斜坡法来证明这种约束性低。

另一个类似的例子是Coppercraft-Winograd。 目前,计算法是矩阵倍增最最最快的、最著名的症状操作时间,O(n2.376)。 然而,其经常因素太大,无法在实践中发挥作用。 如同Fibonacci Heaps一样,它经常被用作其他算法的一个组成部分,以证明理论上的时间界限。

这在一定程度上取决于大专组织的衡量标准——当它处理最坏的情况时,它通常会“失败”,因为运行时间的表现将比大O所建议的要好得多。 如果情况平均,情况可能更糟。

如果对算法的投入数据事先有某些信息,则大系数的数值通常为“fails”。 通常,Big-O节提及最坏的案件复杂性,如果数据完全是随机的,或者完全是非任意的,就会发生这种情况。

举例来说,如果你把数据输入一个图表显示的算法,而主线则以随机数据为基础,但你的数据结构非常明确,其结果可能比预期要快得多。 同样,如果你重新衡量平均复杂性,如果你提供大量随机抽取的数据,那么算法可能比预期的要差得多。

  1. Small N - And for todays computers, 100 is likely too small to worry.
  2. Hidden Multipliers - IE merge vs quick sort.
  3. Pathological Cases - Again, merge vs quick

Big-Oh的否决的一个广泛领域是,数据量超过可动用的RAM。

举例来说,计算所需时间并不以比较或交换次数(在最佳情况下,有O(nlog n)和O(n)的比较或互换数字为主。 时间数以磁盘操作次数为主:栏目书写和栏目如下。

为了更好地分析处理超出现有援助团数据的数据的算法,I/O-model诞生,你将磁盘的数量计算在内。 在这方面,你考虑三个参数:

  • The number of elements, N;
  • The amount of memory (RAM), M (the number of elements that can be in memory); and
  • The size of a disk block, B (the number of elements per block).

不可否认的是,磁盘空间的数量是有限的。 典型的额外假设是M > B2

举例来说,你通常赞成在I/O一案中合并:将要素分成小数的θ(M)并把它们记为记忆(即快速)。 之后,通过阅读从每个科室到记忆中的第一个组群,将其中的θ(M/B)合并起来,把所有要素都 st为一粒,并多次抽取最小的元素,直到你拿走B组。 这一新的僵局已经消失,并且仍在继续。 如果你忘掉了你记忆中的一个栏目,就把这个栏块放在同一个栏目上,并把它 into入。

(所有措辞都应改为大体字节)。 您组成N/M类chu,然后合并。 页: 1

您可以分析中间分类算法(适当修改以包括编印本和编印本),并且发现其效力远远低于合并的I ve。

这一知识是我I/O-algorithms课程的礼貌,由Arge和Buldal(); 我也进行了验证理论的实验:一俟你超过记忆,便需要“几乎无限”的时间。 快速度变得令人难以忍受的缓慢,合并速度极慢,I/O-高效的合并表现良好(最好的是bu)。

我看到了一些情况,即随着数据集的增长,算法的复杂性比记忆存取模式变得不那么重要。 在某些情形下,采用智能算法的大型数据结构可能会造成更多的页码故障或海滩沉积,而不是一种更糟的大型-O的算法。

对于小 n,两种算法可以比较。 随着零增长, algorithm法算法超值。 但是,在某个时候,N的成长程度大大超过系统承受了记忆压力,在这种情况下,“湿度”算法实际上可能较好,因为常数基本上重新出现。

这一点特别令人感兴趣。 在你到达这一转换点时,这两种算法的运行通常都是不可接受的,你必须找到一种新的算法,它具有更友善的记忆存取模式,而且更加复杂。

这个问题就像问,“一个人在实际上失败了吗?” 很显然,高分辨率并不意味着你在生活中取得成功,低分辨率并不意味着你 per。 然而,我们把IQ作为评估潜力的手段,即使它不是绝对的。

在算法中,Big-Oh分法给你算法的计算法。 这必然意味着算法对你的特殊情况能发挥最佳作用,但有些数学依据说,这一算法具有一些良好潜力。 如果“大白”的 not光足以衡量业绩,那么你会看到其中很多,而且时间较少。

想大 Oh是一个范围,而不是一个衡量更好或更湿的具体措施。 案件情况最佳,情况最差,情况最糟,在两种情况之间出现大量的情况。 选择比奥赫幅度范围内的算法,但并不依赖标语作为衡量业绩的绝对值。

当您的数据不符合模型时,大O符号仍然有效,但您将会看到最好情况和最坏情况之间的重叠。

此外, 一些操作也根据线性数据检索与随机数据检索进行了调整,因此,如果要求改变设计的方法,则一种算法虽然在周期上比较优,但可能滞后。 同样,如果算法产生网页/Cache misses,那么,由于能够查阅记忆,Big-O是准确估计运行过程的成本。

显然,正如我被遗忘的那样,当N为小型时,还有:

简短答案:在你开始使用大量记忆时,总是在现代硬件上。 教科书假定记忆存取是统一的,已经不复存在。 当然,你可以为不统一准入模式做大比奥分析,但这种分析较为复杂。

小 n案件是显而易见的,但并不令人感兴趣:快得足够快。

实际上,在Delphi、Java、C#和小塔克使用标准收集方法时,我有问题。 而且,如果主要因素证明是散射功能或比较功能,则比较较小。

页: 1 O及其兄弟用来比较乙状数学功能增长。 我想强调数学部分。 其完全在于能够把问题降低到投入规模不断扩大的职能中。 它给你一个冰块,你的投入(轴心)与所开展行动的数量有关。 这完全基于数学功能,因此,要求我们准确将所用的算法模拟为一种多功能。 然后是假设扩大规模。

页: 1 如果数据是固定的、固定的和不变的,O立即失去其相关性。 因此,几乎所有嵌入式方案的人甚至连大的O. 数学,这总是出现在O(1),但我们知道,我们需要优化我们的空间法典和Mhz的时间安排预算,使之达到大O干 t的工作水平。 如果每个构成部分由于直接业绩依赖于该系统而需要处理,这种优化是按同一顺序进行的。

页: 1 O的其他失败是假设硬件差异无关紧要。 一个拥有MAC、MMU和(或)低纬度数学业务的CPU将完成一些可能被错误地认定为症状较高的顺序的任务。 这是因为模型本身受到限制。

另一共同案例 在现实中,解决办法实际上是国家机器时,O变得绝对无关紧要。 整个算法制度往往忽视了有限的国家机器问题。 这是因为,国家机器的复杂性根据国家数量而不是大多数情况下不变的投入或数据的数量而增长。

这里的另一个方面是记忆存取,这是与硬件和执行环境脱节问题的延伸。 记忆优化使业绩优化,反之亦然。 它们不一定相互排斥。 这些关系不能轻易地变成简单的多米。 从理论角度来说,如果应用得分的数据(记忆区而不是算法的飞跃),则算法通常会优于从理论角度对数据进行分立的算法。 这是因为,记忆存取和储存效率有时间和空间的复杂性,在大多数情况下不是数学模型的一部分,即使试图将模型作为可能产生严重影响的低秩序术语经常被忽视。 这是因为,如果模式忽视的低秩序条件足够多,这些条件将显示出一系列长期低秩序条件,从而产生更大的影响。

Imagine n3 +86n2 +106n <>2+109

很显然,具有高度多面的下级定级词可能会比大O模式倾向于忽视的最高定级更为重要。 它会忽视除N3

大多数科学论文一般是数学功能的描述,用于模拟。 它们是工具。 因此,该工具的效用受到限制,仅与模型本身一样好。 如果该模式不能描述或不适合眼前的问题,那么该模式根本就没有达到目的。 当需要使用不同的模式时,当这项工作不奏效时,直接做法可能很好地服务于你的目的。

此外,许多最初的算法是具有完全不同工作机制的提炼机模型,如今所有计算都是RPA模型。 在你进入大O或任何其它模式之前,首先要问这个问题:“我选择了手头任务的适当模式,我是否拥有最实际的数学功能? 如果答案不是,那么,那么就看你的经验、直觉和忽视了ancy。





相关问题