python算法表示概念扫盲教程


Posted in Python onApril 13, 2017

本文为大家讲解了python算法表示概念,供大家参考,具体内容如下

常数阶O(1)

常数又称定数,是指一个数值不变的常量,与之相反的是变量

为什么下面算法的时间复杂度不是O(3),而是O(1)。

int sum = 0,n = 100; /*执行一次*/ 
sum = (1+n)*n/2; /*执行一次*/ 
printf("%d", sum); /*行次*/

这个算法的运行次数函数是f(n)=3。根据我们推导大O阶的方法,第一步就是把常数项3改为1。在保留最高阶项时发现,它根本没有最高阶项,所以这个算法的时间复杂度为O(1)。

另外,我们试想一下,如果这个算法当中的语句sum=(1+n)*n/2有10句,即:

int sum = 0, n = 100; /*执行1次*/ 
sum = (1+n)*n/2; /*执行第1次*/ 
sum = (1+n)*n/2; /*执行第2次*/ 
sum = (1+n)*n/2; /*执行第3次*/ 
sum = (1+n)*n/2; /*执行第4次*/ 
sum = (1+n)*n/2; /*执行第5次*/ 
sum = (1+n)*n/2; /*执行第6次*/ 
sum = (1+n)*n/2; /*执行第7次*/ 
sum = (1+n)*n/2; /*执行第8次*/ 
sum = (1+n)*n/2; /*执行第9次*/ 
sum = (1+n)*n/2; /*执行第10次*/ 
printf("%d",sum); /*执行1次*/

事实上无论n为多少,上面的两段代码就是3次和12次执行的差异。这种与问题的大小无关(n的多少),执行时间恒定的算法,我们称之为具有O(1)的时间复杂度,又叫常数阶。

注意:不管这个常数是多少,我们都记作O(1),而不能是O(3)、O(12)等其他任何数字,这是初学者常常犯的错误。 

推导大O阶方法

1.用常数1取代运行时间中的所有加法常数

2.在修改后的运行次数函数中,只保留最高阶项

3.如果最高阶项存在且不是1,则去除与这个项相乘的常数

对数阶O(log2n) 

对数

如果a的x次方等于N(a>0,且a不等于1),那么数x叫做以a为底N的对数(logarithm),记作x=logaN, 。其中,a叫做对数的底数,N叫做真数。
5^2 = 25 , 记作 2= log5 25
对数是一种运算,与指数是互逆的运算。例如

① 3^2=9 <==> 2=log<3>9;

② 4^(3/2)=8 <==> 3/2=log<4>8;

③ 10^n=35 <==> n=lg35。为了使用方便,人们逐渐把以10为底的常用对数记作lgN

对数阶

int count = 1; 
while (count < n) 
{  
count = count * 2; /* 时间复杂度为O(1)的程序步骤序列 */ 
}

由于每次count乘以2之后,就距离n更近了一分。

也就是说,有多少个2相乘后大于n,则会退出循环。

由2^x=n得到x=log2n。所以这个循环的时间复杂度为O(logn)。 

线性阶O(n)  

执行时间随问题规模增长呈正比例增长

data = [ 8,3,67,77,78,22,6,3,88,21,2]
find_num = 22
for i in data:
  if i == 22:
    print("find",find_num,i )

线性对数阶O(nlog2n)

平方阶O(n^2)

for i in range(100):
 
  for k in range(100):
    print(i,k)

立方阶O(n^3)
k次方阶O(n^k),
指数阶O(2^n)。

随着问题规模n的不断增大,上述时间复杂度不断增大,算法的执行效率越低。

 python算法表示概念扫盲教程

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python访问sqlserver示例
Feb 10 Python
python daemon守护进程实现
Aug 27 Python
Python3.遍历某文件夹提取特定文件名的实例
Apr 26 Python
python随机数分布random测试
Aug 27 Python
浅谈django rest jwt vue 跨域问题
Oct 26 Python
django模板结构优化的方法
Feb 28 Python
谈谈Python中的while循环语句
Mar 10 Python
python实现PCA降维的示例详解
Feb 24 Python
Django 解决开发自定义抛出异常的问题
May 21 Python
python中关于数据类型的学习笔记
Jul 19 Python
python实现无边框进度条的实例代码
Dec 30 Python
用Python爬取某乎手机APP数据
Jun 15 Python
Python常用算法学习基础教程
Apr 13 #Python
视觉直观感受若干常用排序算法
Apr 13 #Python
python常见排序算法基础教程
Apr 13 #Python
python编程实现希尔排序
Apr 13 #Python
python实现解数独程序代码
Apr 12 #Python
python访问抓取网页常用命令总结
Apr 11 #Python
Python 登录网站详解及实例
Apr 11 #Python
You might like
几个php应用技巧
2008/03/27 PHP
php 上传功能实例代码
2010/04/13 PHP
PHP中使用BigMap实例
2015/03/30 PHP
PHP 9 大缓存技术总结
2015/09/17 PHP
php实现阳历阴历互转的方法
2015/10/28 PHP
jQuery 可以拖动的div实现代码 脚本之家修正版
2009/06/26 Javascript
JavaScript高级程序设计 读书笔记之十一 内置对象Global
2012/03/07 Javascript
javaScript(JS)替换节点实现思路介绍
2013/04/17 Javascript
js计算任意值之间随机数的方法
2015/01/16 Javascript
跟我学习javascript的for循环和for...in循环
2015/11/18 Javascript
node.js cookie-parser 中间件介绍
2016/06/06 Javascript
JavaScript每天必学之基础知识
2016/09/17 Javascript
JS禁止查看网页源代码的实现方法
2016/10/12 Javascript
Sortable.js拖拽排序使用方法解析
2016/11/04 Javascript
jQuery实现获取h1-h6标题元素值的方法
2017/03/06 Javascript
Vue实现双向数据绑定
2017/05/03 Javascript
angularjs中$http异步上传Excel文件方法
2018/02/23 Javascript
Vue编程式跳转的实例代码详解
2019/07/10 Javascript
layui表格内容溢出的解决方法
2019/09/06 Javascript
vux-scroller实现移动端上拉加载功能过程解析
2019/10/08 Javascript
高性能js数组去重(12种方法,史上最全)
2019/12/21 Javascript
[44:22]完美世界DOTA2联赛循环赛 FTD vs PXG BO2第一场 11.01
2020/11/02 DOTA
python使用urllib2实现发送带cookie的请求
2015/04/28 Python
python print输出延时,让其立刻输出的方法
2019/01/07 Python
python 写一个文件分发小程序
2020/12/05 Python
python 基于opencv 实现一个鼠标绘图小程序
2020/12/11 Python
CSS3 animation实现逐帧动画效果
2016/06/02 HTML / CSS
英国领先的高级美容和在线皮肤诊所:Face the Future
2020/06/17 全球购物
启动一个线程是用run()还是start()
2016/12/25 面试题
临床医学应届生求职信
2013/11/06 职场文书
大学生职业生涯设计书
2014/01/02 职场文书
小学生手册家长评语
2014/04/16 职场文书
员工教育培训协议书
2014/09/27 职场文书
2015年学校财务工作总结
2015/05/19 职场文书
JS 4个超级实用的小技巧 提升开发效率
2021/10/05 Javascript
python周期任务调度工具Schedule使用详解
2021/11/23 Python