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的文件类型
May 30 Python
python生成随机图形验证码详解
Nov 08 Python
python虚拟环境迁移方法
Jan 03 Python
详解如何用TensorFlow训练和识别/分类自定义图片
Aug 05 Python
Python Django 前后端分离 API的方法
Aug 28 Python
Pytorch修改ResNet模型全连接层进行直接训练实例
Sep 10 Python
Pytorch转keras的有效方法,以FlowNet为例讲解
May 26 Python
Python3内置函数chr和ord实现进制转换
Jun 05 Python
python判断一个变量是否已经设置的方法
Aug 13 Python
Python实现自动签到脚本功能
Aug 20 Python
python语音识别指南终极版(有这一篇足矣)
Sep 09 Python
Python字典实现伪切片功能
Oct 28 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
2020最新CPU的性能排名
2020/04/02 数码科技
php木马攻击防御之道
2008/03/24 PHP
基于php和mysql的简单的dao类实现crud操作功能
2014/01/27 PHP
ThinkPHP实现将本地文件打包成zip下载
2014/06/26 PHP
ThinkPHP中Common/common.php文件常用函数功能分析
2016/05/20 PHP
php生成无限栏目树
2017/03/16 PHP
JavaScript下申明对象的几种方法小结
2008/10/02 Javascript
JS 控件事件小结
2012/10/31 Javascript
jquery实现每个数字上都带进度条的幻灯片
2013/02/20 Javascript
JS继承--原型链继承和类式继承
2013/04/08 Javascript
Checbox的操作含已选、未选及判断代码
2013/11/07 Javascript
javascript阻止scroll事件多次执行的思路及实现
2013/11/08 Javascript
jquery实现当滑动到一定位置时固定效果
2014/06/17 Javascript
js父页面与子页面不同时显示的方法
2014/10/16 Javascript
如何使用AngularJs打造权限管理系统【简易型】
2016/05/09 Javascript
Javascript 引擎工作机制详解
2016/11/30 Javascript
基于jQuery实现照片墙自动播放特效
2017/01/12 Javascript
jQuery使用正则验证15/18身份证的方法示例
2017/04/27 jQuery
基于zepto.js实现手机相册功能
2017/07/11 Javascript
利用three.js画一个3D立体的正方体示例代码
2017/11/19 Javascript
详解nodejs http请求相关总结
2019/03/31 NodeJs
150行代码带你实现微信小程序中的数据侦听
2019/05/17 Javascript
vue vantUI实现文件(图片、文档、视频、音频)上传(多文件)
2019/10/15 Javascript
在Vue中使用Viser说明(基于AntV-G2可视化引擎)
2020/10/28 Javascript
mapboxgl实现带箭头轨迹线的代码
2021/01/04 Javascript
python3之微信文章爬虫实例讲解
2017/07/12 Python
Python datetime和unix时间戳之间相互转换的讲解
2019/04/01 Python
Python3.5文件修改操作实例分析
2019/05/01 Python
python实现知乎高颜值图片爬取
2019/08/12 Python
python GUI库图形界面开发之PyQt5复选框控件QCheckBox详细使用方法与实例
2020/02/28 Python
Subside Sports德国:足球球衣和球迷商品
2019/06/08 全球购物
大课间活动制度
2014/01/18 职场文书
高中课前三分钟演讲稿
2014/08/18 职场文书
一份教室追逐打闹的检讨书
2014/09/27 职场文书
电气工程师岗位职责
2015/02/12 职场文书
周一给客户的问候语
2015/11/10 职场文书