zoukankan
html css js c++ java
快速排序的最优时间复杂度是 O(nlogn)
T(n)=2T(n/2)+n
设n=2^k
T(n/2)=2T(n/2^2)+n/2
T(n/2^2)=2T(n/2^3)+n/2^2
T(n)=2T(n/2)+n=2^2T(n/2^2)+2*n/2+n=2^3T(n/2^3)+2^2*n/2^2+2*n/2+n
=2^kT(1)+kn=nT(1)+kn=n(logn+T(1))=o(nlogn)
注:T(1)=0
快速排序的最优时间复杂度是 (O(nlogn)),最差时间复杂度是 $O(n^2)$,期望时间复杂度是 $O(nlogn)$。
这里我们证明一下快排的期望时间复杂度。
设$T(n)$为对长度为$n$的序列进行快速排序所需要的期望时间。我们有:
$$T(0) = 0$$
以及:
$$T(n) = n + frac{1}{n}sum_{i=0}^{n-1}(T(i) + T(n - i - 1))$$
我们可以通过放缩来获得对 $T(n)$上界的一个估计。
$$T(n) = n + frac{1}{n}sum_{i=0}^{n-1}(T(i) + T(n - i - 1))$$
$$= n + frac{2}{n}sum_{i=frac{2}{n}}^{n-1}(T(i) + T(n - i - 1))$$
$$= n + frac{2}{n}sum_{i=frac{2}{n}}^{frac{3n}{4}}(T(i) + T(n - i - 1)) + frac{2}{n}sum_{i=frac{3n}{4}}^{n-1}(T(i) + T(n - i - 1))$$
因为 $T(n) >= n$ , 所以对于 $frac{n}{2} <= i <= j$,我们显然有:
$$T(i) + T(n - i) <= T(j) + T(n - j)$$
所以:
$$T(n) <= n + frac{2}{n}sum_{i=frac{2}{n}}^{frac{3n}{4}}(T(frac{3n}{4}) + T(frac{n}{4})) + frac{2}{n}sum_{i=frac{3n}{4}}^{n-1}(T(n - 1) + T(0))$$
$$<= n + frac{1}{2}(T(frac{3n}{4}) + T(frac{n}{4})) + frac{1}{2}T(n-1)$$
我们要证明 $T(n) = O(nlogn)$, 这需要证明存在常数 $c$ 满足 $T(n) <= cnlogn$。
我们考虑用数学归纳法证明。$n = 0$时定理显然成立。现在假设对于 $m <= n$ 定理皆成立。那么:
$$T(n) <= n + frac{1}{2}(T(frac{3n}{4}) + T(frac{n}{4})) + frac{1}{2}T(n-1)$$
$$<= n +frac{1}{2}(c(frac{3n}{4})log(frac{3n}{4}) + c(frac{n}{4})log(frac{n}{4})) + frac{1}{2}c(n-1)log(n-1)$$
$$<= n +c(frac{3n}{8}log(n) - frac{3n}{8}log(frac{4}{3}) + frac{n}{8}log(n) - frac{n}{8}log(4) + frac{n}{2}log(n))$$
$$= cnlogn + n(1 - frac{3c}{8}log(frac{4}{3}) - frac{c}{4})$$
当 $1 - frac{3c}{8}log(frac{4}{3}) - frac{c}{4} <= 0$时,也即约$c >= frac{5}{2}$,我们有:
$$T(n) <= cnlogn$$.
归纳成立,$T(n) = O(nlogn)$
查看全文
相关阅读:
ORA-06530: 引用未初始化的组合 ;
oracle 简单的sysTimeStamp类型转date 类型
Luogu P3388 【模板】割点(割顶)
Luogu P2048 [NOI2010]超级钢琴
Luogu P2657 [SCOI2009]windy数
QZEZ第一届“饭吉圆”杯程序设计竞赛
Luogu P2286 [HNOI2004]宠物收养场
在平衡树的海洋中畅游(一)——Treap
Luogu P1129 [ZJOI2007]矩阵游戏
LOJ #559. 「LibreOJ Round #9」ZQC 的迷宫
原文地址:https://www.cnblogs.com/xfcao/p/12551686.html
最新文章
操作Oracle数据库,插入数据时显示:ORA-00984列在此处不允许错误
ORA-01861: 文字与格式字符串不匹配---解决办法
Oracle to_char()函数相关详解
centos8平台redis cluster集群搭建(redis5.0.7)
centos8平台使用wkhtmltopdf实现html网页转pdf
centos8平台使用rz/sz上传下载文件
centos8平台使用blkid查看分区信息
centos8平台使用dnf/yum管理软件包
centos8平台使用rpm管理软件包
centos8使用systemd/systemctl管理系统/服务
热门文章
centos8使用systemctl管理运行级别
centos8平台使用strace跟踪系统调用
Excel作为数据源TesTNG做数据驱动完整代码
eclipse+IDEA快捷键记录
dbms_sqltune.report_sql_monitor 自动调优
sqlplus将查询结果重定向到文件,不输出到屏幕
dbms_stats包更新、导出、导入、锁定统计信息
Oracle索引碎片检查及定期重建常用表的索引
Oracle几个基础配置问题:ORA-12154: TNS: 无法解析指定的连接标识符、ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务、ORA-12516 TNS监听程序找不到符合协议堆栈要求的可用处理程序
07月份相关代码
Copyright © 2011-2022 走看看