当前位置: 首页 > 知识库问答 >
问题:

有没有任何情况下,你会更喜欢一个较高的big-O时间复杂度算法而不是较低的?

石正信
2023-03-14

是否存在更喜欢 时间复杂度而不是 时间复杂度的情况?还是

你有什么例子吗?

共有3个答案

韦睿
2023-03-14

我很惊讶还没有人提到记忆限制应用程序。

可能存在由于其复杂性(即O(1)

我所说的“内存受限”是指您经常访问的数据经常处于缓存外。为了获取这些数据,您必须将实际内存空间中的内存拉到缓存中,然后才能对其执行操作。这个获取步骤通常相当缓慢--比您的操作本身慢得多。

因此,如果您的算法需要更多的操作(然而这些操作是在已经在缓存中的数据上执行的[因此不需要fetch]),就实际的Wall-time而言,它仍然会比您的算法执行的操作更少(这些操作必须在缓存外的数据上执行[因此需要fetch])。

赫连法
2023-03-14

始终存在隐藏常数,在O(logn)算法中,该常数可以更低。因此在实际应用中,它可以更快地处理真实数据。

还有空间方面的顾虑(例如在烤面包机上运行)。

还有开发人员的时间问题-O(logn)可能更容易实现和验证1000×。

章光华
2023-03-14

可能有很多理由让我们更喜欢大O时间复杂度较高的算法,而不是较低的算法:

  • 大多数时候,较低的big-O复杂度很难实现,需要熟练的实现,大量的知识和大量的测试。/li> 中执行的算法比 (codeO(1)/code>vs ,第一种算法的执行效果更好。例如,矩阵乘法的最佳复杂度是 ,但据我所知,该常数太高,以至于没有计算库使用它。/li> 还是 algorithm./li>并不重要 查找项的时间复杂度,但也有一个二叉树,它在 中查找相同的项。即使对于大量的 ,差异也是微不足道的。/li> 中并需要 内存的算法。当n不大时,它可能比 时间和 空间更可取。问题是,你可以等待很长时间,但高度怀疑你是否能找到一个足够大的RAM来与你的算法一起使用它/li> 数据结构tango树,它给出了
  • <罢工> 在某些地方(安全性),复杂性可能是一个需求。没有人想要一个哈希算法能够快速的哈希(因为这样其他人就可以强迫你更快)
  • 虽然这与复杂度的切换无关,但是一些安全函数应该以防止定时攻击的方式编写。它们大多停留在相同的复杂性类中,但被修改的方式总是需要更坏的情况来做某事。一个例子是比较字符串是否相等。在大多数应用程序中,如果第一个字节不同,那么快速中断是有意义的,但是在安全性方面,您仍然要等到最后才告诉坏消息。/li>
  • 有人申请了低复杂度算法的专利,对于一家公司来说,使用更高的复杂度比付钱更经济。/li> 一些算法能很好地适应特定的情况。例如,插入排序的平均时间复杂度为 ,比quicksort或mergesort差,但作为一种在线算法,它可以在接收到值(作为用户输入)时高效地对值列表进行排序,而大多数其他算法只能高效地对完整的值列表进行操作。/LI>
 类似资料:
  • 线性搜索所需时间的最坏情况是,该项位于列表/数组的末尾,或者不存在。在这种情况下,算法需要执行比较,以查看每个元素是否为所需值,假设是数组/列表的长度。 根据我对big-O表示法的理解,可以说这个算法的时间复杂度是O(n),因为最坏的情况可能发生,当我们想要保守估计“最坏的情况”时,可以使用big-O。 从堆栈溢出的许多帖子和答案来看,这种想法似乎是有缺陷的,像Big-O符号这样的说法与最坏情况分

  • 我有一个使用递归打印斐波那契级数的程序。有更好的方法,但我被要求使用递归,所以我不得不这样做。 这是程序: 我知道这对于斐波那契级数来说真的是一种糟糕的方法,从上面可以清楚地看出,当项超过35时,程序需要很多时间才能完成。 我看了这个答案,不明白他们是怎么解决的,但看起来 fibo(int n)的时间复杂度为O(2^n) 我可能完全错了,但我只想: 这个完整程序的时间复杂度是多少,简要解释一下您是

  • 我想澄清一下O(N)函数。我正在使用SICP。 考虑书中生成伪代码递归过程的阶乘函数: 我不知道如何测量步数。也就是说,我不知道“步骤”是如何定义的,所以我使用书中的语句来定义步骤: 因此,我们可以计算n!通过计算(n-1)!将结果乘以n。 我想这就是他们所说的一步。对于一个具体的例子,如果我们跟踪(阶乘5), 阶乘(1)=1=1步(基本情况-恒定时间) 阶乘(2)=2*阶乘(1)=2步 阶乘(3

  • 问题内容: 如何在Java中比较没有时间的日期? 此代码比较时间和日期! 问题答案: 尝试比较将时间更改为00:00:00的日期(使用此功能):

  • 查找p的伪码算法为: 假设我有一个int值的数组H[1到m],其中“p”是峰值元素,如果: 基本上,如果H【p】大于或等于其相邻元素,则H【p】为峰值。 假设数组H在开始和结束时都大于1个元素,数组为H[0到m 1],其中H[0]=H[m 1]=无穷大。因此,H[0]和H[m 1]是哨兵。然后是元素p,其中1≤ p≤ n、 是一个峰值,如果H【p-1】≤ H【p】≥ H【p 1】。 我认为渐近时间

  • 做O(h)算法的时间复杂度是多少?当h是节点的高度,以BST n倍为单位(树中的元素数),我相信是O(n),而不是O(n*h),但我不知道如何证明它。 在O(h)中工作的特定算法是在BST中查找元素的顺序前体。

  • 就像谷歌地图一样,给定一百万个经纬度坐标列表,你将如何打印距离给定位置最近的k个城市? 我在一次面试中问了这个问题。面试官说这可以在O(n)中通过使用插入排序到k来完成,而不是对整个列表进行排序,即NlogN。我在网上找到了其他答案,大多数人都说NLogN...他[面试官]正确吗?