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连接MySQL数据库实例分析
May 12 Python
详谈Python基础之内置函数和递归
Jun 21 Python
Python3实现简单可学习的手写体识别(实例讲解)
Oct 21 Python
浅谈Matplotlib简介和pyplot的简单使用——文本标注和箭头
Jan 09 Python
Python实现的个人所得税计算器示例
Jun 01 Python
python应用文件读取与登录注册功能
Sep 23 Python
解决pytorch报错:AssertionError: Invalid device id的问题
Jan 10 Python
python GUI模拟实现计算器
Jun 22 Python
用python给csv里的数据排序的具体代码
Jul 17 Python
基于python爬取链家二手房信息代码示例
Oct 21 Python
Python爬虫教程之利用正则表达式匹配网页内容
Dec 08 Python
Python 中面向接口编程
May 20 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下通过伪造http头破解防盗链的代码
2010/07/03 PHP
PHP下对数组进行排序的函数
2010/08/08 PHP
PHP中$_FILES的使用方法及注意事项说明
2014/02/14 PHP
PHP实现模仿socket请求返回页面的方法
2014/11/04 PHP
php+jQuery递归调用POST循环请求示例
2016/10/14 PHP
jquery 注意事项与常用语法小结
2010/06/07 Javascript
JS 实现导航栏悬停效果(续2)
2013/09/24 Javascript
当滚动条滚动到页面底部自动加载增加内容的js代码
2014/05/13 Javascript
NodeJS学习笔记之Http模块
2015/01/13 NodeJs
同一个网页中实现多个JavaScript特效的方法
2015/02/02 Javascript
JavaScript实现邮箱地址自动匹配功能代码
2016/11/28 Javascript
jquery对所有input type=text的控件赋值实现方法
2016/12/02 Javascript
JS正则表达式学习之贪婪和非贪婪模式实例总结
2016/12/26 Javascript
JS实现隔行换色的表格排序
2017/03/27 Javascript
详细教你微信公众号正文页SVG交互开发技巧
2019/07/25 Javascript
Vue3.0 响应式系统源码逐行分析讲解
2019/10/14 Javascript
[01:07:19]2018DOTA2亚洲邀请赛 4.5 淘汰赛 Mineski vs VG 第一场
2018/04/06 DOTA
python通过加号运算符操作列表的方法
2015/07/28 Python
详解python3中socket套接字的编码问题解决
2017/07/01 Python
python实现读取excel写入mysql的小工具详解
2017/11/20 Python
Python实现的简单排列组合算法示例
2018/07/04 Python
Flask框架URL管理操作示例【基于@app.route】
2018/07/23 Python
在Python dataframe中出生日期转化为年龄的实现方法
2018/10/20 Python
python绘制散点图并标记序号的方法
2018/12/11 Python
Python mutiprocessing多线程池pool操作示例
2019/01/30 Python
Python Django 页面上展示固定的页码数实现代码
2019/08/21 Python
python通过SSH登陆linux并操作的实现
2019/10/10 Python
python实现从尾到头打印单链表操作示例
2020/02/22 Python
Docker如何部署Python项目的实现详解
2020/10/26 Python
Richards网上商店:当代时尚,遍布巴西
2019/11/03 全球购物
迪卡侬(Decathlon)加拿大官网:源自法国的运动专业超市
2020/11/22 全球购物
村干部培训班主持词
2014/03/28 职场文书
公司副总经理任命书
2014/06/05 职场文书
机动车登记业务委托书
2014/10/08 职场文书
行为习惯主题班会
2015/08/14 职场文书
mybatis3中@SelectProvider传递参数方式
2021/08/04 Java/Android