[算法]代码运行时间增长数量级对比 线性级别N vs 线性对数级别 NlgN
本文摘要
三段代码对比了以线性级别增长的代码(a,b)和以线性对数级别增长的代码(c)的区别;
代码结构
// 输入条件 N
for(; ;)for(; ;)sum ++;
两层for( ; ; )
循环,@param sum记录语句执行次数,不同输入条件N,屏幕打印执行次数;
完整源码
// Java Code
public 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 TestRunningTimesN a b lgN NlgN c1 1 0 0 0 02 3 1 1 2 24 7 3 2 8 88 15 7 3 24 2416 31 15 4 64 6432 63 31 5 160 16064 127 63 6 384 384128 255 127 7 896 896256 511 255 8 2048 2048512 1023 511 9 4608 46081024 2047 1023 10 10240 102402048 4095 2047 11 22528 225284096 8191 4095 12 49152 491528192 16383 8191 13 106496 10649616384 32767 16383 14 229376 22937632768 65535 32767 15 491520 49152065536 131071 65535 16 1048576 1048576131072 262143 131071 17 2228224 2228224262144 524287 262143 18 4718592 4718592524288 1048575 524287 19 9961472 9961472
结果分析
运行结果符合预期:
a 代码段执行次数为 2N-1;
b 代码段执行次数为 N -1;
c 代码段执行次数为 NlgN(以2为底的对数);
代码心得
手感回春www
[算法]代码运行时间增长数量级对比 线性级别N vs 线性对数级别 NlgN相关推荐
- 算法分析(1)-增长数量级分类总结
算法分析(1) 1.总结,后面的解释其实可以不看 2 常见数量级的补充解释 (1)常数级别 (2)对数级别 (3)线性级别和线性对数级别 (4)平方级以及立方级别 (5)指数级别 3 综述 1.总结, ...
- c语言实现线性表的算法,数据结构算法代码实现——线性表的定义(一)
线性表的定义 线性表:是最常用且最简单的一种数据结构,它是一种线性数据结构,是由类型相同的n个(n≥0)数据元素组成的有序序列. 线性表的特点:有且只有一个被称作"第一个"的数据元 ...
- “泰迪杯”挑战赛 - 基于用户协同过滤算法的电影推荐系统(附算法代码)
目录 第 1 章 绪论 1.1.研究背景 1.2.国际发展形势第 2 章 基于用户协同过滤推荐技术 第 2 章 基于用户协同过滤推荐技术 2.1 电子商务推荐系统概述 2.2 协同过滤推荐技术 第 3 ...
- 算法代码_Python进化算法之多目标优化与代码实战
前言 自从上三篇博客详细讲解了Python遗传和进化算法工具箱及其在带约束的单目标函数值优化中的应用.利用遗传算法求解有向图的最短路径.利用进化算法优化SVM参数之后,这篇不再局限于单一的进化算法工具 ...
- LDPC译码算法代码概述
程序说明 V0.0 2015/1/24 LDPC译码算法代码概述 概述 本文介绍了包括LDPC_Simulation.m, ldpcdecoderbp1.m,ldpcdecoderminsum.m, ...
- 【算法】快速排序与归并排序对比
算法 系列博客 [算法]刷题范围建议 和 代码规范 [算法]复杂度理论 ( 时间复杂度 ) [字符串]最长回文子串 ( 蛮力算法 ) [字符串]最长回文子串 ( 中心线枚举算法 ) [字符串]最长回文 ...
- 【机器学习基础】数学推导+纯Python实现机器学习算法8-9:线性可分支持向量机和线性支持向量机...
Python机器学习算法实现 Author:louwill 前面两讲我们对感知机和神经网络进行了介绍.感知机作为一种线性分类模型,很难处理非线性问题.为了处理非线性的情况,在感知机模型的基础上有了两个 ...
- 算法代码[置顶] 机器学习实战之KNN算法详解
改章节笔者在深圳喝咖啡的时候突然想到的...之前就有想写几篇关于算法代码的文章,所以回家到以后就奋笔疾书的写出来发表了 前一段时间介绍了Kmeans聚类,而KNN这个算法刚好是聚类以后经常使用 ...
- adaboost算法java代码_04-04 AdaBoost算法代码(鸢尾花分类)
[TOC] 更新.更全的<机器学习>的更新网站,更有python.go.数据结构与算法.爬虫.人工智能教学等着你:https://www.cnblogs.com/nickchen121/p ...
- 单片机测量代码运行时间方法-STM32
在实际程序的编写中,我们经常会对程序进行一个整体的复盘.优化,或者对算法的运行时间进行测量等等,那么怎么精确的测量我们程序的运行时间呢? 下面我们给出几种方法: 1 使用Keil Debug功能 2 ...
最新文章
- LeetCode简单题之猜数字大小
- php数据库html文本,关于php,mysql,html的数字分页和文本_php
- 基于Java的疫情防控管理系统
- python fromfile_python之numpy文件操作
- 苹果怎么换行打字_停课不停学!推荐苹果电脑学习类软件,丰富您的假期生活...
- Pytorch的tensor数据类型
- kubeadm安装K8S单master双节点集群
- java ajax jquery分页插件_jquery ajax分页插件的简单实现
- laravel简单的laragon环境搭建不需要composer一键集成
- 全新的移动界面设计素材
- 剑指offer题目系列一
- UC、火绒联合发布专杀工具 清除 2345 锁首木马
- 2021年中国道路交通事故情况分析(附机动车保有量、交通事故发生数量、死亡人数、受伤人数、直接经济损失)[图]
- CNN各模块介绍(一)
- BZOJ 3097: Hash Killer I【构造题,思维题】
- 创建服务器站点的步骤,如何自己建立网站 基本步骤和流程有哪些
- PHPoffice PHPword添加水印
- 餐饮企业如何在疫情考题中渡过难关?
- 什么是僵死进程(Zombies)
- 网络信息安全攻防实验室 第三关