对快速排序时间复杂度的证明
取一个随机数x,把数据分割成集合U,V,其中U都小与x,V都大于x --------这一步操作进行了n次计算,n是数据总数
再继续对U,V做相同的操作,知道分割成总数为1的集合 ----------所以第二层递归树进行了nU+nV次计算
n个数据中随机取一个,这个数可能是第一小数,第二小……第k小。情况等可能。
故 共有n个数的计算次数的期望En=((E0+En-1)+(E1+En-2)……+(En-1+E0))/n
重复的子结构,递归!
demon如下。
注意输出的结果是 res=计算次数/数据总数n
res为因变量,数据数n是自变量,拟合曲线为y=a+blogx,即logn,那么时间复杂度就是nlogn
ps:我输入了一半数据结果,曲线拟合恰好拟合覆盖了我没输入的另一半,足以证明该曲线就是logn
#include<iostream>
using namespace std;
int n;//数据总数
double expect[10000]={0},result=0;
double calculate(int low,int high){
if(low>=high)return 1;
if(expect[high-low+1]!=0)return expect[high-low+1];
expect[high-low+1]+=high-low+1;
for(int i=low;i<=high;i++){
expect[high-low+1]+=(calculate(low,i-1)+calculate(i+1,high))/(high-low+1);
}
return expect[high-low+1];
}
int main(){
for(int i=1000;i<=9050;i+=500){
n=i;
result=calculate(1,n);
printf("%d %.2f\n",i,result/i);
result=0;
}
return 0;
}
对快速排序时间复杂度的证明相关推荐
- 快速排序时间复杂度为O(n×log(n))的证明
快速排序时间复杂度为O(n×log(n))的证明 2014年05月22日 11:17:52 oohaha_123 阅读数:2789 标签: 快速排序算法导论复杂度证明 更多 个人分类: 资料收集整理数 ...
- 网络流重制版:最大流Dinic,以及EK、Dinic时间复杂度的证明(含坑)
文章目录 前言 关于最大流 神奇的术语 EK算法 Dinic 时间复杂度 EK Dinic 细节与一些神奇的性质 反向弧的作用以及代码边中的c 合法的f对应流 st有入边,ed有出边 双向边的两种处理 ...
- [OO] JML系列 优化及时间复杂度可行性证明
JML系列 优化及时间复杂度可行性证明 符号定义 符号 意义 上限 p p p 网络中Person数量 800 r r r 网络中关系数量 3000 q s q_s qs 查询queryStrong ...
- 快速排序时间复杂度 简明分析(平均/最坏/with high probabilty)
最近研究随机算法,发现快速排序作为一种入门算法,分析其时间复杂度还是很有趣的. 首先,证明其最坏时间复杂度为 是很容易的.证明其平均时间复杂度的期望是也有很多不同方式.这里介绍两种简单的方式. 需要说 ...
- 20140725 快速排序时间复杂度 sTL入门
1.快速排序的时间复杂度(平均时间复杂度为) 数组本身就有序时,效果很差为O(n^2) 2.STl入门 (1) C++内联函数(inline)和C中宏(#define)区别 内联函数有类型检查,宏定义 ...
- 构建二叉堆时间复杂度的证明
http://blog.csdn.net/linuxtiger/article/details/7172258 如果仅从代码上直观观察,会得出构造二叉堆的时间复杂度为O(n㏒n)的结果,这个结果是错的 ...
- 【算法/数论】埃拉托斯特尼筛法时间复杂度的证明
文章目录 一.埃拉托斯特尼筛法简介 二.黎曼 ζ \zeta ζ函数与欧拉乘积公式 三.问题求解 一.埃拉托斯特尼筛法简介 埃拉托斯特尼筛法(Sieve of Eratosthenes)是一种能快速求 ...
- 归并排序 快速排序 时间复杂度分析 (基本递归时间复杂度分析)
归并排序 归并排序:利用分治的思想,先排左边一半,再排右边一半,最后再将两边有序的合并起来. 时间复杂度: 用T(n)T(n)T(n)表示排大小为nnn的数组的时间:T(n)=2T(n/2)+nT(1 ...
- 如何用递归树求快速排序时间复杂度
其实也就是点看算法导论的心得,感觉算法导论写的有点不详细的补充 快速排序 我的理解就是利用分治法 ,递归排序最后合并的排序,因为快速排序的最坏时间复杂度比较低所以快速被叫做快速排序如图 对于求快速排序 ...
最新文章
- 如何在您的笔记本上搭建View 演示环境 -5.配置View Connection Server
- [diary]一下子更新了这么多
- Halcon初学者知识【19】带paint_的系列算子
- java练气期(2)----java高级(File类与IO流)
- word2vec原理_深入理解Word2Vec底层原理
- 3_7 MementoMode 备忘录模式
- RabbitMQ 集群搭建_02_rpm版本(linux环境)
- 01.Elasticsearch安装
- CentOS7更改时区两步解决
- asp.net网站后台退出后,点后退按钮仍能进,如何安全退出
- ios 自动缩小字体_iOS WKWebview字体自动放大的问题
- t470键盘拆解_张大妈 ThinkPad T470p 首篇 开箱拆机晒物
- 记录一次win10美化之路
- 通过搜狐号引流靠谱吗?
- javascript检测5到10位数的QQ号
- Android对现有的apk进行修改(汉化,修改QQ尾巴)
- 解决电脑右键点击文件转圈,然后卡死刷新的问题
- 计算机连不了无线网络,如何解决电脑连接不上家里路由器的无线网
- 微信小程序开发之页面布局
- 控制器模式_前控制器模式简介,第1部分
热门文章
- 彻底理解 Raft 共识算法及 etcd/raft 源码解析
- DataGridView详解(详细)
- 知物由学 | 内容安全小技巧:如何辨认人工智能生成的虚假头像
- 畅想chatGPT在工业场景中的应用场景
- speedoffice表格如何制作斜线表头?
- WebView中拍照或从相册上传图片
- CString的GetBuffer与ReleaseBuffer
- antd 手机号码验证
- 腐烂国度2巨霸版计算机学知识,腐烂国度2巨霸版V25.0版本更新内容 新增要素一览[多图]...
- mysql实现字符串分割