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多线程抓取天涯帖子内容示例
Apr 03 Python
Python脚本实现代码行数统计代码分享
Mar 10 Python
python删除列表内容
Aug 04 Python
Python 探针的实现原理
Apr 23 Python
python中如何使用朴素贝叶斯算法
Apr 06 Python
Python3+django2.0+apache2+ubuntu14部署网站上线的方法
Jul 07 Python
对Python中DataFrame选择某列值为XX的行实例详解
Jan 29 Python
python读取并定位excel数据坐标系详解
Jun 26 Python
在pytorch中查看可训练参数的例子
Aug 18 Python
Python实现打印实心和空心菱形
Nov 23 Python
解析PyCharm Python运行权限问题
Jan 08 Python
2021年值得向Python开发者推荐的VS Code扩展插件
Jan 25 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写的小东西
2006/12/06 PHP
使用PHPMyAdmin修复论坛数据库的图文方法
2012/01/09 PHP
Laravel框架学习笔记(二)项目实战之模型(Models)
2014/10/15 PHP
php数组操作之键名比较与差集、交集赋值的方法
2014/11/10 PHP
PHP curl CURLOPT_RETURNTRANSFER参数的作用使用实例
2015/02/07 PHP
PHP yii实现model添加默认值的方法(两种方法)
2016/11/10 PHP
一个无限级XML绑定跨框架菜单(For IE)
2007/01/27 Javascript
extjs 04_grid 单击事件新发现
2012/11/27 Javascript
jquery取消选择select下拉框示例代码
2014/02/22 Javascript
jQuery+easyui中的combobox实现下拉框特效
2015/02/27 Javascript
在JavaScript中使用对数Math.log()方法的教程
2015/06/15 Javascript
Node.js的Web模板引擎ejs的入门使用教程
2016/06/06 Javascript
JS获取checkbox的个数简单实例
2016/08/19 Javascript
利用jquery正则表达式在页面验证url网址输入是否正确
2017/04/04 jQuery
AngularJS之ionic 框架下实现 Localstorage本地存储
2017/04/22 Javascript
jquery实现回车键触发事件(实例讲解)
2017/11/21 jQuery
react 应用多入口配置及实践总结
2018/10/17 Javascript
新手简单了解vue
2019/05/29 Javascript
vue路由传参三种基本方式详解
2019/12/09 Javascript
JavaScript链式调用原理与实现方法详解
2020/05/16 Javascript
JavaScript事件循环及宏任务微任务原理解析
2020/09/02 Javascript
Nuxt.js的路由跳转操作(页面跳转nuxt-link)
2020/11/06 Javascript
Python数据分析中Groupby用法之通过字典或Series进行分组的实例
2017/12/08 Python
python实现邮件发送功能
2019/08/10 Python
python可视化text()函数使用详解
2020/02/11 Python
python实现将列表中各个值快速赋值给多个变量
2020/04/02 Python
小结Python的反射机制
2020/09/28 Python
一篇文章带你搞定Ubuntu中打开Pycharm总是卡顿崩溃
2020/11/02 Python
实例讲解使用CSS实现多边框和透明边框的方法
2015/09/08 HTML / CSS
html5开发之viewport使用
2013/10/17 HTML / CSS
医生实习工作总结的自我评价
2013/09/27 职场文书
让世界充满爱演讲稿
2014/05/24 职场文书
党的群众路线教育实践活动个人对照检查剖析材料
2014/09/23 职场文书
2014年文秘工作总结
2014/11/25 职场文书
干部外出学习心得体会
2016/01/18 职场文书
动作冒险《Hell Is Us》将采用虚幻5 消灭怪物探索王国
2022/04/13 其他游戏