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正则表达式match和search用法实例
Mar 26 Python
深入学习python的yield和generator
Mar 10 Python
Python实现ssh批量登录并执行命令
Oct 25 Python
python实现超简单的视频对象提取功能
Jun 04 Python
Django框架模板介绍
Jan 15 Python
用python实现刷点击率的示例代码
Feb 21 Python
Python爬取视频(其实是一篇福利)过程解析
Aug 01 Python
在python中做正态性检验示例
Dec 09 Python
Django-imagekit的使用详解
Jul 06 Python
简单了解如何封装自己的Python包
Jul 08 Python
如何基于python把文字图片写入word文档
Jul 31 Python
python利用appium实现手机APP自动化的示例
Jan 26 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
教你如何把一篇文章按要求分段
2006/10/09 PHP
杏林同学录(四)
2006/10/09 PHP
php导入大量数据到mysql性能优化技巧
2014/12/29 PHP
PHP SPL标准库之数据结构堆(SplHeap)简单使用实例
2015/05/12 PHP
PHP实现微信发红包程序
2015/08/24 PHP
用PHP写的一个冒泡排序法的函数简单实例
2016/05/26 PHP
Linux系统中为php添加pcntl扩展
2016/08/28 PHP
Zend Framework校验器Zend_Validate用法详解
2016/12/09 PHP
转换json格式的日期为Javascript对象的函数
2010/07/13 Javascript
根据json字符串生成Html的一种方式
2013/01/09 Javascript
jquery ready(fn)事件使用介绍
2013/08/21 Javascript
JS鼠标滑过图片时切换图片实现思路
2013/09/12 Javascript
jquery滚动条插件jScrollPane的使用介绍
2013/11/08 Javascript
JavaScript中的undefined学习总结
2013/11/30 Javascript
JavaScript中constructor()方法的使用简介
2015/06/05 Javascript
用jQuery的AJax实现异步访问、异步加载
2016/11/02 Javascript
Bootstrap table两种分页示例
2016/12/23 Javascript
Vue.js仿微信聊天窗口展示组件功能
2017/08/11 Javascript
jquery点击回车键实现登录效果并默认焦点的方法
2018/03/09 jQuery
webpack之引入图片的实现及问题
2018/10/08 Javascript
vue+vant使用图片预览功能ImagePreview的问题解决
2020/04/10 Javascript
vue制作抓娃娃机的示例代码
2020/04/17 Javascript
在Python中的Django框架中进行字符串翻译
2015/07/27 Python
Python实现删除时保留特定文件夹和文件的示例
2018/04/27 Python
搞定这套Python爬虫面试题(面试会so easy)
2019/04/03 Python
Python 利用高德地图api实现经纬度与地址的批量转换
2019/08/14 Python
浅析Python语言自带的数据结构有哪些
2019/08/27 Python
卸载tensorflow-cpu重装tensorflow-gpu操作
2020/06/23 Python
Python Selenium破解滑块验证码最新版(GEETEST95%以上通过率)
2021/01/29 Python
世界上最好的精品店:Shoptiques
2018/02/05 全球购物
化验室技术员岗位职责
2013/12/24 职场文书
领导班子“四风问题”“整改方案
2014/10/02 职场文书
财务稽核岗位职责
2015/04/13 职场文书
大学生实习证明
2015/06/16 职场文书
2019行政前台转正申请书范文3篇
2019/08/15 职场文书
MySql 缓存查询原理与缓存监控和索引监控介绍
2021/07/02 MySQL