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 相关文章推荐
wxpython 学习笔记 第一天
Mar 16 Python
python实现根据月份和日期得到星座的方法
Mar 27 Python
Python中的XML库4Suite Server的介绍
Apr 14 Python
Linux下python3.6.1环境配置教程
Sep 26 Python
Python生成验证码、计算具体日期是一年中的第几天实例代码详解
Oct 16 Python
Python django搭建layui提交表单,表格,图标的实例
Nov 18 Python
pytorch 实现在一个优化器中设置多个网络参数的例子
Feb 20 Python
python3 使用traceback定位异常实例
Mar 09 Python
在python中使用nohup命令说明
Apr 16 Python
Python用类实现扑克牌发牌的示例代码
Jun 01 Python
python中判断数字是否为质数的实例讲解
Dec 06 Python
Python爬虫爬取ts碎片视频+验证码登录功能
Feb 22 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微信开发之查询城市天气
2016/06/23 PHP
JS日历 推荐
2006/12/03 Javascript
javascript Math.random()随机数函数
2009/11/04 Javascript
常见JS效果之图片减速度滚动实现代码
2011/12/08 Javascript
js正文内容高亮效果的实现方法
2013/06/30 Javascript
JS控件ASP.NET的treeview控件全选或者取消(示例代码)
2013/12/16 Javascript
js showModalDialog 弹出对话框的简单实例(子窗体)
2014/01/07 Javascript
JavaScript学习小结之被嫌弃的eval函数和with语句实例详解
2016/08/01 Javascript
深入探究angular2 UI组件之primeNG用法
2017/07/26 Javascript
微信小程序将字符串生成二维码图片的操作方法
2018/07/17 Javascript
微信小程序实现时间预约功能
2018/11/27 Javascript
el-select 下拉框多选实现全选的实现
2019/08/02 Javascript
Vue 嵌套路由使用总结(推荐)
2020/01/13 Javascript
jQuery实现简单QQ聊天框
2020/08/27 jQuery
Vue利用localStorage本地缓存使页面刷新验证码不清零功能的实现
2020/09/04 Javascript
用Python脚本生成Android SALT扰码的方法
2013/09/18 Python
Python使用numpy模块实现矩阵和列表的连接操作方法
2019/06/26 Python
学习Django知识点分享
2019/09/11 Python
Python中的引用和拷贝实例解析
2019/11/14 Python
python3的pip路径在哪
2020/06/23 Python
Python自动巡检H3C交换机实现过程解析
2020/08/14 Python
基于Django集成CAS实现流程详解
2020/11/28 Python
Django+Django-Celery+Celery的整合实战
2021/01/20 Python
css3动画效果小结(推荐)
2016/07/25 HTML / CSS
Luxplus瑞典:香水和美容护理折扣
2018/01/28 全球购物
印度尼西亚值得信赖的第一家网店:Bhinneka
2018/07/16 全球购物
澳大利亚拥有最好的家具和家居用品在线目的地:Nestz
2019/02/23 全球购物
什么是虚拟内存?虚拟内存有什么优势?
2012/02/19 面试题
生育关怀行动实施方案
2014/03/26 职场文书
优秀纪检干部材料
2014/08/27 职场文书
村创先争优活动总结
2014/08/28 职场文书
考试保密承诺书
2014/08/30 职场文书
美国旅游签证工作证明
2014/10/14 职场文书
初中体育教学随笔
2015/08/15 职场文书
导游词之云南丽江古城
2019/09/17 职场文书
Android开发EditText禁止输入监听及InputFilter字符过滤
2022/06/10 Java/Android