time-complexity - 快速排序时间复杂度分析(递归方程分析)
问题描述
快速排序的递推方程为
T(n) = T(n/2) + T(n/2) + theta(n)
如果 pivot 总是将原始数组分成两个相同大小的子数组。
所以整体时间复杂度为 O(nlogn)
但是如果两个子列表的比例总是1:99呢?
等式肯定是T(n) = T(n/100) + T(99n/100) + theta(n)
但是我怎样才能从上面的等式中推导出时间复杂度呢?
我读过其他答案,其中描述了我们可以忽略 T(n/100),因为 T(99n/100) 将主导整个时间复杂度。
但我完全不能完全理解。
任何意见,将不胜感激!
解决方案
插头T(n) = n log(n) + Θ(n)
,你得到
n log(n) + Θ(n) = n/100 log(n/100) + 99n/100 log(99n/100) + Θ(n/100) + Θ(99n/100) + Θ(n)
= n log(n)/100 + 99n log(n)/100 - n/100 log(100) - 99n/100 log(99/100) + Θ(n)
= n log(n) + Θ(n)
事实上,任何分数都可以:
T(n) = T(pn) + T((1-p)n) + Θ(n)
由 解决O(n log(n))
。
推荐阅读
- javascript - 带有 php-mysql 的 Ajax 帖子无法正常工作
- server - 有没有办法将latency分解成不同的hops,只想知道latency时间的破坏
- python-3.x - 无法将 df.columns 的函数写入因式分解()
- reactjs - React Native 中的可点击平面列表项
- android - 如何使用 react native 识别 android 底部导航?
- asp.net-mvc - ASP.NET MVC SignalR 客户端方法未在单独的项目中调用
- android - Android:如何在单击不可见按钮时调用函数?
- module - Phalcon 4多模块后端未加载
- python - xlrd 提取行的范围
- boolean - 如果我们有三个逻辑输入 A、B、C 生成:(A'B+AC)和(AB+A'C),有什么方法可以从两个输出生成 A?