Performance 什么时候O(n*n)比O(logn)快?

Performance 什么时候O(n*n)比O(logn)快?,performance,big-o,Performance,Big O,我在一次实践测试中遇到了这个问题,我不确定什么时候代码在O(n*n)上比O(logn)上运行得更快。记住Big-O是上界。很可能是因为常数在较小的输入大小下,O(n^2)算法的运行速度比O(logn)快。在大多数情况下,n^2也可能运行得更快,而该算法恰好在n^2中运行,这只是因为某些输入集导致它必须做大量工作。请记住,大O是上界。很可能是因为常数在较小的输入大小下,O(n^2)算法的运行速度比O(logn)快。在大多数情况下,n^2也可以运行得更快,并且该算法碰巧在n^2中运行,这是因为某些输

我在一次实践测试中遇到了这个问题,我不确定什么时候代码在O(n*n)上比O(logn)上运行得更快。

记住Big-O是上界。很可能是因为常数在较小的输入大小下,O(n^2)算法的运行速度比O(logn)快。在大多数情况下,n^2也可能运行得更快,而该算法恰好在n^2中运行,这只是因为某些输入集导致它必须做大量工作。

请记住,大O是上界。很可能是因为常数在较小的输入大小下,O(n^2)算法的运行速度比O(logn)快。在大多数情况下,n^2也可以运行得更快,并且该算法碰巧在n^2中运行,这是因为某些输入集导致它必须做大量工作。

大oh表示法给出了上限。不多了

如果算法A是
O(n^2)
,它可能需要精确的
n^2
步骤

如果算法B是
O(logn)
,它可能需要精确的
10000*logn
步骤


对于较小的
n

大oh符号给出的上界,算法A比算法B快得多。不多了

如果算法A是
O(n^2)
,它可能需要精确的
n^2
步骤

如果算法B是
O(logn)
,它可能需要精确的
10000*logn
步骤


对于较小的
n

算法A比算法B快得多,我收回了以前的答案,因为从技术上讲,A
O(n*n)
算法可能比A
O(logn)
算法快,尽管可能性很小。更多细节请参见我与耶稣的讨论。下图显示时间复杂度恰好为
logn
的算法总是比时间复杂度正好为
n*n
的算法快


我收回了我以前的答案“从不”,因为从技术上讲,
O(n*n)
算法可能比
O(logn)
算法更快,尽管可能性很小。更多细节请参见我与耶稣的讨论。下图显示时间复杂度恰好为
logn
的算法总是比时间复杂度正好为
n*n
的算法快



我不确定他们是不是指log2n。log10n不是吗?在讨论算法的时间复杂度时,我们总是指以2为基数,而不是以10为基数。这是不正确的,因为大O从前导项中删除了所有常数和因子,这意味着它是完全可能的。@JesusRamos在你的答案下看到了我的评论。我不确定它们是否指log2n。log10n不是吗?在讨论算法的时间复杂度时,我们总是使用基数2,而不是基数10。这是不正确的,因为大O从前导项中删除了所有常数和因子,这意味着它完全可能。@JesusRamos在你的答案下看到我的评论。不包括各种算法的细节,如果
n*n
小于
log n
,则不存在输入。请看图表。是的,这是可能的,因为大O删除了所有常量,所以它可能是100000000*logn+一些大常量和一个基本的n^2算法。N^2也是上界,在平均情况下,算法可以在logn时间或类似的时间内执行。我关注的是输入大小,而不是算法的细节(您提到的约束)。如果有两种算法,一种算法的运行时间正好是
n*n
,另一种算法的运行时间正好是
logn
,则不存在
n
值,其中
n*n
可能比
logn
@typoknig快,表示大O符号是,你正在消除对问题的限制,提出一个完全不同的问题。它意味着上限,这意味着你需要考虑细节。这也是唯一的高N行为,这意味着对于小N,它不一定成立。公平地说,你是正确的,这是可能的,但极不可能的,即使是最小的
N
值。
logn
算法必须以非常低效的方式实现其约束,才能比最高效的
n*n
算法慢。事实上,我认为一个人实际上必须尝试使
logn
算法效率低下,这样才有可能做到这一点。我想请您向我展示比
logn
排序算法更快的插入排序的任何实现,但由于没有
logn
排序算法存在,这有点没有实际意义:)排除各种算法的细节,在
n*n
小于
logn
的地方不存在输入。请看图表。是的,这是可能的,因为大O删除了所有常量,所以它可能是100000000*logn+一些大常量和一个基本的n^2算法。N^2也是上界,在平均情况下,算法可以在logn时间或类似的时间内执行。我关注的是输入大小,而不是算法的细节(您提到的约束)。如果有两种算法,一种算法的运行时间正好是
n*n
,另一种算法的运行时间正好是
logn
,则不存在
n
值,其中
n*n
可能比
logn
@typoknig快,表示大O符号是,你正在消除对问题的限制,提出一个完全不同的问题。它意味着上限,这意味着你需要考虑细节。这也是唯一的高N行为,这意味着对于小N,它不一定成立。公平地说,你是正确的,这是可能的,但极不可能的,即使是最小的
N