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合并文本文件示例
Feb 07 Python
Python的Bottle框架的一些使用技巧介绍
Apr 08 Python
八大排序算法的Python实现
Jan 28 Python
浅谈Python 中整型对象的存储问题
May 16 Python
详谈pandas中agg函数和apply函数的区别
Apr 20 Python
使用python画个小猪佩奇的示例代码
Jun 06 Python
Sanic框架蓝图用法实例分析
Jul 17 Python
python 读取竖线分隔符的文本方法
Dec 20 Python
Python3模拟curl发送post请求操作示例
May 03 Python
keras 获取某层输出 获取复用层的多次输出实例
May 23 Python
Python爬虫爬取微博热搜保存为 Markdown 文件的源码
Feb 22 Python
Python max函数中key的用法及原理解析
Jun 26 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
mysql limit查询优化分析
2008/11/12 PHP
微信公众号点击菜单即可打开并登录微站的实现方法
2014/11/14 PHP
thinkphp如何获取客户端IP
2015/11/03 PHP
支付宝服务窗API接口开发php版本
2016/07/20 PHP
PHP实现对数组分页处理实例详解
2017/02/07 PHP
PHP使用SMTP邮件服务器发送邮件示例
2018/08/28 PHP
laravel-admin 后台表格筛选设置默认的查询日期方法
2019/10/03 PHP
jQuery 图像裁剪插件Jcrop的简单使用
2009/05/22 Javascript
日期处理的js库(迷你版)--自建js库总结
2011/11/21 Javascript
Jquery实现点击按钮,连续地向textarea中添加值的实例代码
2014/03/08 Javascript
JavaScript跨域方法汇总
2014/10/16 Javascript
45个JavaScript编程注意事项、技巧大全
2015/02/11 Javascript
浅谈JavaScript的内置对象和浏览器对象
2016/06/03 Javascript
JS模拟实现方法重载示例
2016/08/03 Javascript
最实用的jQuery分页插件
2016/10/09 Javascript
jQuery基于ajax操作json数据简单示例
2017/01/05 Javascript
使用AngularJS2中的指令实现按钮的切换效果
2017/03/27 Javascript
使用OPENLAYERS3实现点选的方法
2020/09/24 Javascript
ionic使用angularjs表单验证(模板验证)
2018/12/12 Javascript
理理Vue细节(推荐)
2019/04/16 Javascript
了解javascript中的Dom操作
2019/05/27 Javascript
JS如何实现手机端输入验证码效果
2020/05/13 Javascript
浅谈Ant Design Pro 菜单自定义 icon
2020/11/17 Javascript
vue 使用class创建和清除水印的示例代码
2020/12/25 Vue.js
[03:58]2014DOTA2国际邀请赛 龙宝赛后解密DK获胜之道
2014/07/14 DOTA
Python 12306抢火车票脚本 Python京东抢手机脚本
2018/02/06 Python
python 通过SSHTunnelForwarder隧道连接redis的方法
2019/02/19 Python
Python matplotlib绘制饼状图功能示例
2019/09/10 Python
Python Celery多队列配置代码实例
2019/11/22 Python
Python requests.post方法中data与json参数区别详解
2020/04/30 Python
爱尔兰电子产品购物网站:Komplett.ie
2018/04/04 全球购物
Marc O’Polo俄罗斯官方在线商店:德国高端时尚品牌
2019/12/26 全球购物
伊莱克斯(Electrolux)俄罗斯网上商店:瑞典家用电器品牌
2021/01/23 全球购物
《九寨沟》教学反思
2014/04/08 职场文书
付款证明格式范文
2015/06/19 职场文书
Java8 Stream API 提供了一种高效且易于使用的处理数据的方式
2022/04/13 Java/Android