算法复杂度O(nlogn)详解
来源:互联网 发布:python __iter__ 编辑:程序博客网 时间:2024/06/10 10:39
首先看以下程序段:
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j+=i)
{
..... //复杂度为O(1);
}
}
求该程序段的时间复杂度。
可以看出:(1)当i=1时,需要执行n次;
(2)当i=2时,需要执行n/2次;
(3)当i=3时,需要执行n/3次;
.............
(4)当i=n-1时,需要执行n/n-1次;
(5)当i=n时,需要执行n/n次;
每次的时间复杂度为O(1),则总共的时间复杂度为n(1 +1/2+1/3 +1/4 + 1/5+ 1/6+1/7+1/8 +...1/n)。
1 +1/2+1/3 +1/4 + 1/5+ 1/6+1/7+1/8 +...1/n是一个调和级数。很早就有数学家研究,比如中世纪后期的数学家Oresme在1360年就证明了这个级数是发散的。Euler(欧拉)在1734年,利用Newton的成果,首先获得了这个调和级数有限多项和的值。
1+1/2+1/3+1/4+...+1/n= ln(n+1)+r(r为常量)
则总共的时间复杂度为:
n(1 +1/2+1/3 +1/4 + 1/5+ 1/6+1/7+1/8 +...1/n)
=n(ln(n+1) + r)
=nln(n+1)+rn
因此该程序段的时间复杂度为O(nlogn).
- 算法复杂度O(nlogn)详解
- poj1330 LCA在线算法 复杂度O(nlogn)
- 算法时间复杂度的表示法O(n²)、O(n)、O(1)、O(nlogn)
- LCS时间复杂度O(NlogN)
- LIS-O(NlogN)算法
- 快速排序算法的时间复杂度为什么是O(NlogN),还有O(N^2)
- HDU1257--最少拦截系统 (LIS时间复杂度O(n^2)与O(nlogn)两种算法)
- 算法时间复杂度的表示法O(n²)、O(n)、O(1)、O(nlogn)等是什么意思?
- O(nlogn)时间复杂度 链表排序
- hdu3183 RMQ模板 复杂度O(nlogn)
- 快速排序[平均时间复杂度O(NlogN)]
- 关于O(nlogn)复杂度的体验
- 关于快速排序和插入排序最坏时间复杂度为O(nlogn)的算法
- 删除数组中相同的元素 算法复杂度 O(nlogn)
- Python习题:Python 判断是不是等差数列,要求算法时间复杂度为O(NlogN)
- 实现时间复杂度为O(nlogn)的链表排序算法
- LIS的O(nLogN)算法
- O(nlogn)排序算法--QuickRank
- RetroScope工具:执行流程分析
- SpringMVC(二五) JSTL View
- 线程入口地址 类封装
- B族维生素大全及控糖作用
- Struts2配置文件及filer运行原理探析
- 算法复杂度O(nlogn)详解
- MYSQL 语句--GROUP
- DB主从一致性架构优化4种方法
- js中的new运算符
- [编程题] 奇数位上都是奇数或者偶数位上都是偶数
- android 版本对应源码
- xhprof在windows上的安装
- 参数传递二维数组
- HAOI 2016 食物链 -(记忆化搜索)