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处理cookie详解
Feb 07 Python
python检测远程udp端口是否打开的方法
Mar 14 Python
Python字符串处理函数简明总结
Apr 13 Python
在MAC上搭建python数据分析开发环境
Jan 26 Python
Python使用一行代码获取上个月是几月
Aug 30 Python
一行python实现树形结构的方法
Aug 09 Python
python pygame实现球球大作战
Nov 25 Python
Python semaphore evevt生产者消费者模型原理解析
Mar 18 Python
Python3.7将普通图片(png)转换为SVG图片格式(网站logo图标)动起来
Apr 21 Python
python使用for...else跳出双层嵌套循环的方法实例
May 17 Python
Python tempfile模块生成临时文件和临时目录
Sep 30 Python
Python排序函数的使用方法详解
Dec 11 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
德劲1104的电路分析与改良
2021/03/01 无线电
discuz程序的PHP加密函数原理分析
2011/08/05 PHP
PHP字符串中特殊符号的过滤方法介绍
2014/02/18 PHP
变量在 PHP7 内部的实现(一)
2015/12/21 PHP
php版微信发红包接口用法示例
2016/09/23 PHP
JS类中定义原型方法的两种实现的区别
2007/03/08 Javascript
25个好玩的JavaScript小游戏分享
2011/04/22 Javascript
js 自制滚动条的小例子
2013/03/16 Javascript
jquery获取颜色在ie和ff下的区别示例介绍
2014/03/28 Javascript
JavaScript静态类型检查工具FLOW简介
2015/01/06 Javascript
Javascript中的作用域和上下文深入理解
2015/07/03 Javascript
jQuery 选择同时包含两个class的元素的实现方法
2016/06/01 Javascript
基于jQuery实现数字滚动效果
2017/01/16 Javascript
Vue.js实现多条件筛选、搜索、排序及分页的表格功能
2020/11/24 Javascript
微信小程序 滚动到某个位置添加class效果实现代码
2017/04/19 Javascript
JS库之Highlight.js的用法详解
2017/09/13 Javascript
nodejs实现OAuth2.0授权服务认证
2017/12/27 NodeJs
vue+webpack模拟后台数据的示例代码
2018/07/26 Javascript
24个ES6方法解决JS实际开发问题(小结)
2020/05/31 Javascript
bootstrap实现tab选项卡切换
2020/08/09 Javascript
[02:44]2014DOTA2 国际邀请赛中国区预选赛 大神红毯秀
2014/05/25 DOTA
使用Python获取Linux系统的各种信息
2014/07/10 Python
python爬取51job中hr的邮箱
2016/05/14 Python
Python中enumerate函数代码解析
2017/10/31 Python
彻彻底底地理解Python中的编码问题
2018/10/15 Python
Python实现分段线性插值
2018/12/17 Python
pywinauto自动化操作记事本
2019/08/26 Python
PyCharm汉化安装及永久激活详细教程(靠谱)
2020/01/16 Python
SQL Server笔试题
2012/01/10 面试题
优秀女职工事迹材料
2014/02/06 职场文书
论文指导教师评语
2014/04/28 职场文书
音乐之声观后感
2015/06/04 职场文书
创业计划书之溜冰场
2019/10/25 职场文书
Golang的继承模拟实例
2021/06/30 Golang
Python Matplotlib绘制条形图的全过程
2021/10/24 Python
使用Python拟合函数曲线
2022/04/14 Python