Algorithm O(n logn)与O(logn)有何不同?

Algorithm O(n logn)与O(logn)有何不同?,algorithm,time,big-o,Algorithm,Time,Big O,通过研究大O符号,我理解了O(logn)作为二进制搜索和O(nlogn)作为快速排序的概念 有人能用外行的话解释一下这两者在运行时的主要区别吗?为什么会这样 从直觉上看,它们似乎有着相似的联系基本上是:一个N的因子。 二进制搜索只涉及少量元素。如果有10亿个元素,二进制搜索只涉及其中约30个元素。 快速排序只涉及每个元素少量的次数。如果有10亿个元素,快速排序会涉及到所有元素,大约30倍:总共约300亿个元素。从简单的术语和可视化的角度来看,它们在排序算法上是相同的,但是快速排序作为O(n lo

通过研究大O符号,我理解了O(logn)作为二进制搜索和O(nlogn)作为快速排序的概念

有人能用外行的话解释一下这两者在运行时的主要区别吗?为什么会这样


从直觉上看,它们似乎有着相似的联系

基本上是:一个N的因子。
二进制搜索只涉及少量元素。如果有10亿个元素,二进制搜索只涉及其中约30个元素。

快速排序只涉及每个元素少量的次数。如果有10亿个元素,快速排序会涉及到所有元素,大约30倍:总共约300亿个元素。

从简单的术语和可视化的角度来看,它们在排序算法上是相同的,但是快速排序作为O(n log n)在某些情况下有缺陷,快速排序大多数情况下是log n,但是在特殊情况下是,这就是为什么nlogn之前。因此,对于少量排序来说,快速排序是非常好的,但对于数百万/数十亿的排序来说,它不是,最好使用合并排序进行此类排序。


查看
Log(n)
是如何平坦的(与其他函数相比,不是字面上而是象征性的),而
nLog(n)
的n=100的值超过了600。这就是它们的不同之处。

它们完全不同:既然
nlogn
是一个不同于
logn
的函数,一个增长更快的函数,为什么它们应该是相同的呢?这与
n
有很大的区别:如果
log
是base 2并且
n=1000
n log n
9965.8
,但是
log n
只是
9.97
。如果有评论,为什么会有人投反对票?我不知道反对票的情况。与过去相比,许多栈上溢出似乎没有那么大的耐心。这个问题肯定不会太广泛。这是一个有具体答案的具体问题。这个问题的结束是不公平的。二进制搜索的用例是否必须对输入进行排序,而快速排序是随机输入的最佳情况?二进制搜索在有序列表中查找值。快速排序是对列表进行排序的一种方法。好吧,我明白你的意思了……我想我需要知道的是,二进制搜索必须有顺序输入,只是一个小小的吹毛求疵:它是20,不是30@NiklasB.:哎呀。切换到“十亿”,其中30仍然是准确的。或者,由于快速排序比合并排序快得多,请改用,它通常与快速排序一样快,但不会转到n^2。“快速排序大多数情况下是日志n,但在特殊情况下是n²,这就是为什么日志n之前的n”没有什么意义。你真的想这么说吗?快速排序从来都不是
logn
,没有一个通用的定理表明,如果一个算法是
O(n^2)
最坏的情况,那么平均复杂度就是
O(nlogn)
——这是快速排序的一个非常特殊的属性。看起来你混淆了顺序。对数N阶只是N的一小部分(通常是一小部分,因为如果递归地将N除以一半,对数的底是2)。如果不至少检查数组的所有N个元素,就无法执行排序,因此N是最低阶限制。
Log(N)
不是很平坦。我的观点是答案说它是平坦的。这里需要一个限定符。所有日志都是成比例的,所以在big-O中,基并不重要。然而,在分析分治算法时会弹出base 2,因此在图中使用base 2可以更好地粗略了解较小示例的相对运行时间。我认为它是一个有用的图。