algorithm - 深度快速排序的复杂性

标签 algorithm time-complexity quicksort partition logarithm

<分区>

所以我正在考试,这次考试的很大一部分将是快速排序算法。众所周知,该算法的最佳情况和实际平均情况是:O(nlogn)。最坏的情况是 O(n^2)

至于最坏的情况,我知道如何解释:它发生在选定的主元是数组中的最小值或最大值时,然后我们将有 n quicksort 调用,这可能占用 n 时间(我的意思是分区操作)。我说得对吗?

现在是最佳/平均情况。我读过 Cormens 的书,得益于那本书,我了解了很多东西,但至于快速排序算法,他专注于如何解释 O(nlogn) 复杂性的数学公式。我只是想知道为什么是 O(nlogn),而不是进行一些数学证明。现在我只看到一些维基百科的解释,如果我们选择一个将数组每次划分为 n/2, n/2+1 部分的枢轴,那么我们将有一个调用树depth logn,但我不知道这是不是真的,即使是这样,那为什么是 logn

我知道网上有很多关于快速排序的资料,但它们只涉及实现,或者只是告诉我复杂性,而不是解释它。

最佳答案

Am I right?

是的。

we would have a call tree of depth logn but I don't know if that is true

是的。

why is it logn?

因为我们在每一步都将数组分成两半,导致调用图的深度为 logn。从这个Intro :

enter image description here

查看树及其深度,它是 logn。想象一下,BST 中的搜索成本为 logn,或者为什么在排序数组中的二进制搜索中搜索也需要 logn


PS:数学讲真话,努力理解它们,您将成为更好的计算机科学家! =)

关于algorithm - 深度快速排序的复杂性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44609852/

相关文章:

algorithm - 如何注意到异常的新闻事件

python - Python中的子集和(动态规划)-复杂性问题

python - 从列表中删除重复项的时间和空间复杂度

java - 使用 >>> 1 如何在将两个数字相加而不是除以 2 时防止溢出?

c++ - MIPS速溶

algorithm - 并行化线性时间算法

algorithm - 与本地数据缓存配合使用的智能分页算法

Python 间隔三角形

c++ - 时间复杂度 - 大 O - 显示不在文件中的间隔中的数字

python - 为什么插入排序和快速排序相结合会得到更糟糕的结果?