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中is和id的用法
Apr 03 Python
Python中DJANGO简单测试实例
May 11 Python
Python使用Pycrypto库进行RSA加密的方法详解
Jun 06 Python
详解django中自定义标签和过滤器
Jul 03 Python
对python-3-print重定向输出的几种方法总结
May 11 Python
python使用zip将list转为json的方法
Dec 31 Python
Python实现对特定列表进行从小到大排序操作示例
Feb 11 Python
python获取微信企业号打卡数据并生成windows计划任务
Apr 30 Python
Python实现密钥密码(加解密)实例详解
Apr 26 Python
python将下载到本地m3u8视频合成MP4的代码详解
Nov 24 Python
python Scrapy爬虫框架的使用
Jan 21 Python
python中K-means算法基础知识点
Jan 25 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内核解析:PHP中的哈希表
2014/01/30 PHP
用Greasemonkey 脚本收藏网站会员信息到本地
2009/10/26 Javascript
一个可以兼容IE FF的加为首页与加入收藏实现代码
2009/11/02 Javascript
JavaScript 编写匿名函数的几种方法
2010/02/21 Javascript
HTML DOM的nodeType值介绍
2011/03/31 Javascript
JS保存、读取、换行、转Json报错处理方法
2013/06/14 Javascript
修复bash漏洞的shell脚本分享
2014/12/31 Javascript
深入分析Javascript跨域问题
2015/04/17 Javascript
javascript拖拽效果延伸学习
2016/04/04 Javascript
jQuery实现大图轮播
2017/02/13 Javascript
vue.js动态数据绑定学习笔记
2017/05/19 Javascript
Webpack打包css后z-index被重新计算的解决方法
2017/06/18 Javascript
node.js + socket.io 实现点对点随机匹配聊天
2017/06/30 Javascript
详解微信小程序实现仿微信聊天界面(各种细节处理)
2019/02/17 Javascript
vue + typescript + 极验登录验证的实现方法
2019/06/27 Javascript
借助云开发实现小程序短信验证码的发送
2020/01/06 Javascript
Python常用正则表达式符号浅析
2014/08/13 Python
用于统计项目中代码总行数的Python脚本分享
2015/04/21 Python
浅谈Python的Django框架中的缓存控制
2015/07/24 Python
python实现控制电脑鼠标和键盘,登录QQ的方法示例
2019/07/06 Python
Python 导入文件过程图解
2019/10/15 Python
Python搭建代理IP池实现获取IP的方法
2019/10/27 Python
python双端队列原理、实现与使用方法分析
2019/11/27 Python
Tensorflow实现多GPU并行方式
2020/02/03 Python
HTML5+CSS设置浮动却没有动反而在中间且错行的问题
2020/05/26 HTML / CSS
送给他或她的礼物:FUN.com
2018/08/17 全球购物
彪马日本官网:PUMA日本
2019/01/31 全球购物
物业管理公司实习生自我鉴定
2013/09/19 职场文书
临床医学应届生求职信
2013/11/06 职场文书
档案接收函
2014/01/13 职场文书
面试后的感谢信范文
2014/02/01 职场文书
公务员党的群众路线教育实践活动学习心得体会
2014/10/30 职场文书
2014年班长个人工作总结
2014/11/14 职场文书
从事会计工作年限证明
2015/06/23 职场文书
情侣餐厅的创业计划书范本!
2019/07/26 职场文书
python 如何用terminal输入参数
2021/05/25 Python