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使用email模块对邮件进行编码和解码的实例教程
Jul 01 Python
Python中字符串格式化str.format的详细介绍
Feb 17 Python
python绘制铅球的运行轨迹代码分享
Nov 14 Python
python3 破解 geetest(极验)的滑块验证码功能
Feb 24 Python
python 实现敏感词过滤的方法
Jan 21 Python
python自动化测试之DDT数据驱动的实现代码
Jul 23 Python
python如何保证输入键入数字的方法
Aug 23 Python
python为QT程序添加图标的方法详解
Mar 09 Python
Django model.py表单设置默认值允许为空的操作
May 19 Python
Django实现后台上传并显示图片功能
May 29 Python
在前女友婚礼上,用Python破解了现场的WIFI还把名称改成了
May 28 Python
使用python+pygame开发消消乐游戏附完整源码
Jun 10 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 数码科技
CodeIgniter输出中文乱码的两种解决办法
2014/06/12 PHP
php数组合并array_merge()函数使用注意事项
2014/06/19 PHP
PHP7 mongoDB扩展使用的方法分享
2019/05/02 PHP
基于jQuery的星级评分插件
2011/08/12 Javascript
Jquery 动态生成表格示例代码
2013/12/24 Javascript
JS+CSS实现的竖向简洁折叠菜单效果代码
2015/10/22 Javascript
关注jquery技巧提高jquery技能(前端开发必学)
2015/11/02 Javascript
javascript数组常用方法汇总
2016/09/10 Javascript
微信小程序scroll-view实现滚动穿透和阻止滚动的方法
2018/08/20 Javascript
对VUE中的对象添加属性
2018/09/18 Javascript
通过layer实现可输入的模态框的例子
2019/09/27 Javascript
vue-element-admin 菜单标签失效的解决方式
2019/11/12 Javascript
微信小程序8种数据通信的方式小结
2020/02/03 Javascript
Vue 使用typescript如何优雅的调用swagger API
2020/09/01 Javascript
vscode自定义vue模板的实现
2021/01/27 Vue.js
Python遍历zip文件输出名称时出现乱码问题的解决方法
2015/04/08 Python
CentOS中使用virtualenv搭建python3环境
2015/06/08 Python
Python函数式编程指南(三):迭代器详解
2015/06/24 Python
Python实现抢购IPhone手机
2018/02/07 Python
Python实现二维数组输出为图片
2018/04/03 Python
python基于http下载视频或音频
2018/06/20 Python
Python 列表去重去除空字符的例子
2019/07/20 Python
Flask框架学习笔记之消息提示与异常处理操作详解
2019/08/15 Python
tensorflow 获取checkpoint中的变量列表实例
2020/02/11 Python
中国综合网上购物商城:苏宁易购
2016/08/09 全球购物
Liu Jo西班牙官网:意大利服装品牌
2019/09/11 全球购物
东南亚冒险旅行与活动:Adventoro
2019/10/16 全球购物
生产车间班组长岗位职责
2014/01/06 职场文书
《雪地里的小画家》教学反思
2014/02/22 职场文书
大学生求职计划书
2014/04/30 职场文书
安全保证书怎么写
2015/02/28 职场文书
音乐会主持人开场白
2015/05/28 职场文书
公司处罚决定书
2015/06/24 职场文书
2016年党建工作简报
2015/11/26 职场文书
2016年小学六一儿童节活动总结
2016/04/06 职场文书