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 性能提升的几种方法
Jul 15 Python
Python算法应用实战之栈详解
Feb 04 Python
python实现简单中文词频统计示例
Nov 08 Python
Python实现朴素贝叶斯分类器的方法详解
Jul 04 Python
Python中函数参数调用方式分析
Aug 09 Python
Python 脚本获取ES 存储容量的实例
Dec 27 Python
Python设计模式之享元模式原理与用法实例分析
Jan 11 Python
利用python脚本如何简化jar操作命令
Feb 24 Python
Python如何通过百度翻译API实现翻译功能
Apr 02 Python
基于Python的Jenkins的二次开发操作
May 12 Python
python 使用多线程创建一个Buffer缓存器的实现思路
Jul 02 Python
Python使用海龟绘图实现贪吃蛇游戏
Jun 18 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按行读取、处理较大CSV文件的代码实例
2014/04/09 PHP
PHP合并静态文件详解
2014/11/14 PHP
PHP实现返回JSON和XML的类分享
2015/01/28 PHP
PHP如何防止XSS攻击与XSS攻击原理的讲解
2019/03/22 PHP
php设计模式之原型模式分析【星际争霸游戏案例】
2020/03/23 PHP
javascript 播放器 控制
2007/01/22 Javascript
xheditor与validate插件冲突的解决方案
2010/04/15 Javascript
JS解析json数据并将json字符串转化为数组的实现方法
2012/12/25 Javascript
鼠标移到图片上变大显示而不是放大镜效果
2014/06/15 Javascript
微信小程序 常见问题总结(4058,40013)及解决办法
2017/01/11 Javascript
浅谈AngularJs 双向绑定原理(数据绑定机制)
2017/12/07 Javascript
javaScript字符串工具类StringUtils详解
2017/12/08 Javascript
浅析Visual Studio Code断点调试Vue
2018/02/27 Javascript
基于node搭建服务器,写接口,调接口,跨域的实例
2018/05/13 Javascript
详解webpack4.x之搭建前端开发环境
2019/03/28 Javascript
js模拟实现百度搜索
2020/06/28 Javascript
javascript实现支付宝滑块验证码效果
2020/07/24 Javascript
AngularJs的$http发送POST请求,php无法接收Post的数据问题及解决方案
2020/08/13 Javascript
JS跨浏览器解析XML应用过程详解
2020/10/16 Javascript
vue-amap根据地址回显地图并mark的操作
2020/11/03 Javascript
详解python的webrtc库实现语音端点检测
2017/05/31 Python
Python实现Linux的find命令实例分享
2017/06/04 Python
Python之re操作方法(详解)
2017/06/14 Python
Django中数据库的数据关系:一对一,一对多,多对多
2018/10/21 Python
Python3多线程基础知识点
2019/02/19 Python
使用pytorch搭建AlexNet操作(微调预训练模型及手动搭建)
2020/01/18 Python
土木工程专业大学毕业生求职信
2013/10/13 职场文书
无传销社区工作方案
2014/05/13 职场文书
中文专业求职信
2014/06/20 职场文书
2014小学语文教学工作总结
2014/12/17 职场文书
领导欢迎词范文
2015/01/26 职场文书
仰望星空观后感
2015/06/10 职场文书
三十年同学聚会致辞
2015/07/28 职场文书
2016年社会管理综治宣传月活动总结
2016/03/16 职场文书
2019已经过半,你知道年中工作总结该怎么写吗?
2019/07/03 职场文书
《天使的翅膀》读后感3篇
2019/12/20 职场文书