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 相关文章推荐
pyqt4教程之实现半透明的天气预报界面示例
Mar 02 Python
在Python中使用模块的教程
Apr 27 Python
Python写入CSV文件的方法
Jul 08 Python
python中os模块详解
Oct 14 Python
python字符串中的单双引
Feb 16 Python
Python实现Windows和Linux之间互相传输文件(文件夹)的方法
May 08 Python
一百多行python代码实现抢票助手
Sep 25 Python
python 找出list中最大或者最小几个数的索引方法
Oct 30 Python
tensorflow中tf.slice和tf.gather切片函数的使用
Jan 19 Python
Python 生成VOC格式的标签实例
Mar 10 Python
python 用Matplotlib作图中有多个Y轴
Nov 28 Python
Python如何使用循环结构和分支结构
Apr 13 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+MYSQL开发工具及资源收藏
2007/01/02 PHP
jquery 防止表单重复提交代码
2010/01/21 Javascript
JQuery 文本框使用小结
2010/05/22 Javascript
in.js 一个轻量级的JavaScript颗粒化模块加载和依赖关系管理解决方案
2011/07/26 Javascript
JavaScript高级程序设计(第3版)学习笔记8 js函数(中)
2012/10/11 Javascript
jQuery固定浮动侧边栏实现思路及代码
2014/09/28 Javascript
Javascript原型链和原型的一个误区
2014/10/22 Javascript
JavaScript中遍历对象的property的3种方法介绍
2014/12/30 Javascript
JavaScript DOM基础
2015/04/13 Javascript
使用nodejs开发cli项目实例
2015/06/03 NodeJs
jquery.gridrotator实现响应式图片展示画廊效果
2015/06/23 Javascript
基于jQuery和hwSlider实现内容左右滑动切换效果附源码下载(一)
2016/06/22 Javascript
js实现手机发送验证码功能
2017/03/13 Javascript
vue 路由页面之间实现用手指进行滑动的方法
2018/02/23 Javascript
jQuery+ajax读取json数据并按照价格排序示例
2018/03/28 jQuery
自定义vue组件发布到npm的方法
2018/05/09 Javascript
JS伪继承prototype实现方法示例
2018/06/20 Javascript
小程序实现悬浮搜索框
2019/07/12 Javascript
VUE页面中通过双击实现复制表格中内容的示例代码
2020/06/11 Javascript
js实现点击烟花特效
2020/10/14 Javascript
[01:03:51]2018DOTA2亚洲邀请赛 4.7 淘汰赛 VP vs LGD 第三场
2018/04/09 DOTA
[06:43]2018DOTA2国际邀请赛寻真——VGJ.Thunder
2018/08/11 DOTA
[57:55]EG vs Fnatic 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
Python3实现生成随机密码的方法
2014/08/23 Python
Python标准库之sqlite3使用实例
2014/11/25 Python
python通过imaplib模块读取gmail里邮件的方法
2015/05/08 Python
python 实时得到cpu和内存的使用情况方法
2018/06/11 Python
Python WEB应用部署的实现方法
2019/01/02 Python
三个python爬虫项目实例代码
2019/12/28 Python
Python爬虫之Selenium实现窗口截图
2020/12/04 Python
利用python如何实现猫捉老鼠小游戏
2020/12/04 Python
利用CSS3实现文字折纸效果实例代码
2018/07/10 HTML / CSS
捷克建筑材料网上商店:DEK.cz
2021/03/06 全球购物
人力资源经理的岗位职责范本
2014/02/28 职场文书
经典演讲稿汇总
2014/05/19 职场文书
2015年青年志愿者协会工作总结
2015/04/27 职场文书