时间复杂度---我又要想起初中数学老师的脸了xxxxx
时间复杂度:
常用的时间复杂度有:常数级,对数级,线性级 线性对数级 平方级,立方级别,多项式级别,指数级别,阶乘级别
这里我们主要探讨对数级,线性级,平方级,指数级---为什么不讨论其他的?别的我也不会啊--- 囧
f(x) ε O(n*n):这里指的是f这个函数的增长速度 不会以后n*n快 这里的x指的是特定的输入
用n来估算x的范围大小
我们先写一段代码。QAQ:
def exp1(a,b):
ans =1
while(b>0):
ans *=a
b -=1
return ans
这个方法是求 a的b次方的值 ?那么如果b=10 做了多少次操作呢 3b+2 也就是32次 那么我们可以得出
f(x) ε O(3b+2) 但是2好像是不会变的,当数值变大时2就没有意思 所以f(x) ε O(3b) 当然他就是线性的 我们都写错O(n) ----这就是所谓的线性级
我们在来看看下面的代码:
def exp2(a,b):
if b == 1:
return a
else:return a*exp2(a ,b-1)
print exp2(2,3)
这里我们用的是递归,同样的我们来看看这个函数执行数跟参数的关系:
t(b) = 3+t(b-1) --->t(b) = 3+3+t(b-2) 我们找到规律就是 t(b) = 3*k+t(b-k) --这里的k 是我们添加的参数
我们知道当b-k=1 的时候就结束了 那么 k = b-1 上述方程式:结果为 3b-2 那么 f(x) ε O(3b-2)也是线性的
那么接着看下面的代码:
def exp3(a,b):
if b == 1:
return a
if (b/2)*2 ==b:
return exp3(a*a,b/2)
else:
return a*exp2(a ,b-1)
我们在这里做了小小的性能优化 ,如果我们求的是 偶数次方 我们知道 a的4次方等于 a*a的平方
t(b)= 6+t(b/2)--->6+6+t(b/2*2)--->6+6+6+t(b/2*2*2)---6*k+t(b/2的k次方) 我们知道当b/2的k次方=1的时候结束 那么k = log2 b 也就是 O(log)--这里就是对数级
接下来我们看看轻松的
def exp4(a,b):
x = 0
for i in range(a):
for i range(b):
x+=1 return x
很明显 t(b)=(a*b) 也就是O(a*b)---平方级
最后我们来看下指数级: 也许是你最不想看到的情况:
def Towers(size,fromStack,toStack,spareStack):
if size == 1:
print "Move disk from ",fromStack, "to" ,toStack
else:
Towers(size-1,fromStack,spareStack,toStack)
Towers(1,fromStack,toStack,spareStack)
Towers(size-1,spareStack,toStack,fromStack)
t(b) = 3+2*t(b-1)--->3+3*2+4*t(b-2)-->1*3+2*3+4*3+8*(b-3)
--->3(1+2+4+...2^k-1) +2^k*(b-k)---->O(2^n)
时间复杂度---我又要想起初中数学老师的脸了xxxxx的更多相关文章
- D唐纳德和他的数学老师(华师网络赛)(二分匹配,最大流)
Time limit per test: 1.0 seconds Memory limit: 256 megabytes 唐纳德是一个数学天才.有一天,他的数学老师决定为难一下他.他跟唐纳德说:「现在 ...
- 海边直播目标2017全国初中数学竞赛班课堂测试题解答-The Final
1. 设函数 $f(x) = 2^x(ax^2 + bx + c)$ 满足等式 $f(x+1) - f(x) = 2^x\cdot x^2$, 求 $f(1)$. 解答: 由 $f(x) = 2^x( ...
- 用初中数学知识撸一个canvas环形进度条
周末好,今天给大家带来一款接地气的环形进度条组件vue-awesome-progress.近日被设计小姐姐要求实现这么一个环形进度条效果,大体由四部分组成,分别是底色圆环,进度弧,环内文字,进度圆点. ...
- canvas基础[一]探究出初中数学知识
何时用SVG何时用canvas SVG 矢量图,视觉清晰,文件小 <svg viewBox="0 0 100 100"> <circle cx="50& ...
- 十分简明易懂的FFT(快速傅里叶变换)
https://blog.csdn.net/enjoy_pascal/article/details/81478582 FFT前言快速傅里叶变换 (fast Fourier transform),即利 ...
- 程序员的成长与规划 | 送签名书啦 | StuQ专访foruok
StuQ(InfoQ的朋友)对我做了一次专访,下面是原文. 福利:送一本签名版<你好哇,程序员>,参与方式在文末.
- 对于JAVA课程的期望
对于JAVA课程的期望 我对于JAVA这门课程最初的了解可能来自于学长学姐的描述,或者是选课指南上简单的课程名称,那个时候的JAVA,对我来说遥远而又陌生,显得那么高大上,但是一转眼自己马上就要结束大 ...
- [51NOD1087]1 10 100 1000(规律,二分)
题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1087 用高中的数列知识就可以推出公式,不难发现f(n)=f(n ...
- 四则运算 SPEC 20160911
本文档随时可能修改,并且没有另行通知. 请确保每一次在开始修改你的代码前,读标题中的日期,如果晚于你上次阅读, 请重读一次. 教师节你去探望初中数学老师,她感叹你当年真是个优秀学生啊,从来不报怨作 业 ...
随机推荐
- 菜鸟的IT生活4
今天主要复习了以前的内容,输入输出,数据类型,运算符,顺序语句,分支语句等等,把几个不太连贯跟没上传过的传一下,以后加深下印象,加油!
- 精通CSS version2笔记2.小知识
添加背景:background-img:url(URL)+属性; 圆角框:选择器{border-radius:单位;}创建X单位的圆角框在元素周围 投影:box-shadow:垂直和水平偏移.投影的宽 ...
- java 22 - 15 死锁的问题
同步的弊端: A:效率低 B:容易产生死锁 死锁: 两个或两个以上的线程在争夺资源的过程中,发生的一种相互等待的现象. 举例: 中国人,美国人一起吃饭. 正常情况: 中国人:筷子两支 美国人: ...
- 如何查看文件是dos格式还是unix格式的?
一.背景 由于windows和linux对换行的标识不一样,不同系统的代码传递导致代码格式的改变中可能会带来程序无法正常编译通过的问题.因此根据一些编译的错误提示,可以定位到是文件格式的问题,要对程序 ...
- UILabel顶部对齐解决方法(转载)
问题 我有一个UILabel高度最多能显示两行,如果里面内容只有一行,它是垂直居中的.怎么能让它顶端对齐呢? 回答 答案1:用sizeToFit改变UILabel的高度 nevan king,19 ...
- FSL - DualRegression
Source:http://fsl.fmrib.ox.ac.uk/fsl/fslwiki/DualRegression Research Overview A common need for anal ...
- subtable
- MYSQL游标使用
CREATE PROCEDURE `sp_UpdateData`() BEGIN ); /*修改会员卡的几个金额*/ DECLARE done INT DEFAULT FALSE; DECLARE c ...
- 微软职位内部推荐-Service Engineer II for Azure Cloud Network
微软近期Open的职位: Are you interested in helping to drive the direction of a product that defines the clou ...
- Padrino 博客开发示例
英文版出处:http://www.padrinorb.com/guides/blog-tutorial 楼主按 拿作者自己的话说:Padrino(谐音:派骓诺)是一款基于Sinatra的优雅的Web应 ...