arrays - 保证分区后恒定差异时快速排序的最坏情况运行时
问题描述
我们想用标准的快速排序进行排序,我们保证,在调用分区方法之后,两个部分的大小差异最多是一个常数因子a。该算法的最坏情况运行时间是多少?
解决方案
由于分区之间的大小差异有限,快速排序是最坏情况 O(n log(n))
本质上,快速排序每次进行拆分时都会遍历整个数组。因此,我们只需要考虑最坏情况的分区,以及需要多少次拆分才能将其缩小到大小 1(或 2)。
现在,如果我们保证两个部分中较大的部分最多是另一个部分的 1 倍,那么最坏的情况是,较大的部分确实总是1倍大。
在这种情况下,快速排序中“层”的数量将等于我们必须将数组的原始大小除以 (1+a)/a 得到 1 的次数。这等于以 ( 1+a)/a 的输入大小。因为a是常数,所以 (1+a)/a 也是常数,因此分裂的数量是 O(log(n)),这意味着算法在 O(n log(n)) 最坏情况下运行。
推荐阅读
- excel - AddItem 不填充组合框中的选项
- objective-c - Xcode NSUserDefaults 在几个屏幕后变为 NULL/nil
- ios - React Native iOS Build - 找不到选项的目录
- python - 带有列表的字典:TypeError:不可散列的类型:'list'
- vba - 从另一个 Access VBA 程序调用一个 Access VBA 程序中的函数
- python - 带有多个国家/地区名称的返回列表
- mysql - MySQL - SELECT 中的函数 SELECT
- acumatica - 通过 Acumatica 中的 PXformula 属性计算字段值
- python - import CatBoostClassifier 对于 apache 请求来说花费的时间太长
- php - 如何在 Centos8 本地安装 no_NO.utf8