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 crontab设置linux定时任务
Dec 08 Python
Python中的函数作用域
May 07 Python
python高阶爬虫实战分析
Jul 29 Python
Python实现的读取文件内容并写入其他文件操作示例
Apr 09 Python
如何通过50行Python代码获取公众号全部文章
Jul 12 Python
python实现简单成绩录入系统
Sep 19 Python
详解python中*号的用法
Oct 21 Python
django实现web接口 python3模拟Post请求方式
Nov 19 Python
浅谈pytorch、cuda、python的版本对齐问题
Jan 15 Python
python判断链表是否有环的实例代码
Jan 31 Python
python开发入门——列表生成式
Sep 03 Python
PyCharm2020.3.2安装超详细教程
Feb 08 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
抓取YAHOO股票报价的类
2009/05/15 PHP
PHP 动态生成静态HTML页面示例代码
2014/01/15 PHP
php中单个数据库字段多列显示(单字段分页、横向输出)
2014/07/28 PHP
php处理多图上传压缩代码功能
2018/06/13 PHP
Laravel 队列使用的实现
2019/01/08 PHP
PHP使用PDO创建MySQL数据库、表及插入多条数据操作示例
2019/05/30 PHP
PHP与Web页面的交互示例详解二
2020/08/04 PHP
菜鸟javascript基础整理1
2010/12/06 Javascript
JavaScript 匿名函数(anonymous function)与闭包(closure)
2011/10/04 Javascript
javascript 事件处理程序介绍
2012/06/27 Javascript
JQuery AJAX 中文乱码问题解决
2013/06/05 Javascript
js处理php输出时间戳对不上号的解决方法
2014/06/20 Javascript
jquery bind(click)传参让列表中每行绑定一个事件
2014/08/06 Javascript
jQuery使用slideUp方法实现控制元素缓慢收起
2015/03/27 Javascript
BootStrap的alert提示框的关闭后再显示怎么解决
2016/05/17 Javascript
jQuery插件FusionCharts绘制的2D双柱状图效果示例【附demo源码】
2017/05/13 jQuery
手把手教你搭建ES6的开发运行环境
2017/07/11 Javascript
基于node.js之调试器详解
2017/08/22 Javascript
详解webpack之scss和postcss-loader的配置
2018/01/09 Javascript
vue-cli webpack2项目打包优化分享
2018/02/07 Javascript
Element Table的row-class-name无效与动态高亮显示选中行背景色
2018/11/30 Javascript
Vue基于iview实现登录密码的显示与隐藏功能
2020/03/06 Javascript
python正则中最短匹配实现代码
2018/01/16 Python
python爬虫获取多页天涯帖子
2018/02/23 Python
Python实现合并两个有序链表的方法示例
2019/01/31 Python
北京SQL新华信咨询
2016/09/30 面试题
应届护士求职信范文
2014/01/26 职场文书
幼儿园校园小喇叭广播稿
2014/10/17 职场文书
信访稳定工作汇报
2014/10/27 职场文书
师德承诺书
2015/01/20 职场文书
开国大典观后感
2015/06/04 职场文书
少年雷锋观后感
2015/06/10 职场文书
2016党校学习心得体会范文
2016/01/07 职场文书
Spring Cloud Gateway去掉url前缀
2021/07/15 Java/Android
python基础之//、/与%的区别详解
2022/06/10 Python
ECharts transform数据转换和dataZoom在项目中使用
2022/12/24 Javascript