[算法]代码运行时间增长数量级对比 线性级别N vs 线性对数级别 NlgN
来源:互联网 发布:什么叫做js事件event 编辑:程序博客网 时间:2024/05/16 15:39
本文摘要
三段代码对比了以线性级别增长的代码(a,b)和以线性对数级别增长的代码(c)的区别;
代码结构
// 输入条件 Nfor(; ;) for(; ;) sum ++;
两层for( ; ; )
循环,@param sum记录语句执行次数,不同输入条件N,屏幕打印执行次数;
完整源码
// Java Codepublic class TestRunningTimes{ public static void RunTimes(int N){ /* 增长数量级为 线性级别 2N-1 */ int suma = 0; for(int n=N;n>0;n/=2) for(int i=0;i<n;i++) suma++; /* 增长数量级为 线性级别 N-1 */ int sumb = 0; for(int i=1;i<N;i*=2) for(int j=0;j<i;j++) sumb++; /* 增长数量级为 线性级别 NlgN(以2为底的对数) */ int sumc = 0; for(int i=1;i<N;i*=2) for(int j=0;j<N;j++) sumc++; /* 屏幕打印语句执行次数 输出排版 */ int lgN = (int)(Math.log((double)N)/Math.log((double)2)); int nlgn = lgN*N; System.out.printf("%10d %10d %10d %10d %10d %10d\n",N,suma,sumb,lgN,nlgn,sumc); } /* 测试用例 : 不同的输条件 N */ public static void main(String args[]){ System.out.println(" N a b lgN NlgN c"); for(int N=1;N<1000000;N*=2) RunTimes(N); }}
编译运行
>javac TestRunningTimes.java>java TestRunningTimes N a b lgN NlgN c 1 1 0 0 0 0 2 3 1 1 2 2 4 7 3 2 8 8 8 15 7 3 24 24 16 31 15 4 64 64 32 63 31 5 160 160 64 127 63 6 384 384 128 255 127 7 896 896 256 511 255 8 2048 2048 512 1023 511 9 4608 4608 1024 2047 1023 10 10240 10240 2048 4095 2047 11 22528 22528 4096 8191 4095 12 49152 49152 8192 16383 8191 13 106496 106496 16384 32767 16383 14 229376 229376 32768 65535 32767 15 491520 491520 65536 131071 65535 16 1048576 1048576 131072 262143 131071 17 2228224 2228224 262144 524287 262143 18 4718592 4718592 524288 1048575 524287 19 9961472 9961472
结果分析
运行结果符合预期:
a 代码段执行次数为 2N-1;
b 代码段执行次数为 N -1;
c 代码段执行次数为 NlgN(以2为底的对数);
代码心得
手感回春www
0 0
- [算法]代码运行时间增长数量级对比 线性级别N vs 线性对数级别 NlgN
- 《算法导论》线性时间O(n)排序
- 线性布局 菜鸟级别的我
- 分治算法;随机化划分函数;快速排序;线性时间选择第K小元素;快速排序平均时间复杂度nlgn;
- 排序算法-n^2级别
- 对数线性模型(Logistic回归算法)
- 算法运行时间中的对数
- 线性时间选择算法
- 线性时间选择算法
- 线性时间选择算法
- 线性时间排序算法
- 线性时间Huffman算法
- 算法-线性时间排序
- 线性时间选择算法
- 线性时间选择算法
- 算法时间数量级估计
- 编译器级别的代码优化对比
- 编译器级别的代码优化对比
- Xcode4使用技巧
- 通过简单的方法适应iOS7中的UIViewController,同时兼容iOS6
- iOS证书--开发证书(Development)的申请
- Spring单例与线程安全小结
- 杭电ACM1301——Jungle Roads~~最小生成树
- [算法]代码运行时间增长数量级对比 线性级别N vs 线性对数级别 NlgN
- 学习Python3(随机数)
- HTTP协议学习系列--深入理解HTTP协议
- MyEclipse中配置struts.xml自动提示的方法
- iPhone开发常问的十个问题(2012年3月版)
- Spring并发访问的线程安全性问题
- tableview2222
- 解决Activity启动黑屏及设置android:windowIsTranslucent不兼容activity切换动画问题
- 实现strstr函数