时间复杂度---我又要想起初中数学老师的脸了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
本文档随时可能修改,并且没有另行通知. 请确保每一次在开始修改你的代码前,读标题中的日期,如果晚于你上次阅读, 请重读一次. 教师节你去探望初中数学老师,她感叹你当年真是个优秀学生啊,从来不报怨作 业 ...
随机推荐
- jsp前三章小测试:错题
/bin:存放各种平台下用于启动和停止Tomcat的脚本文件 /logs:存放Tomcat的日志文件 /webapps:web应用的发布目录 /work:Tomcat把由JSP生成的Servlet存放 ...
- file文件的操作
<?php //echo readfile('D:\\123.txt');//读取文件内容第一种方式,返回字符串,但是带有长度 echo '<br>'; //var_dump(fil ...
- curl 工具收集
注意:curl 目标地址不能使用 0.0.0.0: port, 这样会curl返回结果显示不正常: 实际上有返回,但是curl提示没有数据.
- 10 Things Every Java Programmer Should Know about String
String in Java is very special class and most frequently used class as well. There are lot many thin ...
- 在PHP中无法连接Memcached的解决办法
Memcached 已经正确安装配置, 并且防火墙也已经打开了本机对自己所有端口的访问, telnet localhost 11211也正常, 但是通过PHP访问出现 [Sat May 17 22:0 ...
- html之marquee详解
该标签不是HTML3.2的一部分,并且只支持MSIE3以后内核,所以如果你使用非IE内核浏览器(如:Netscape)可能无法看到下面一些很有意思的效果该标签是个容器标签语法: <marquee ...
- SQL使用开窗函数与CTE查询每月销售额的前几名
WITH tagTab AS( SELECT YearMonth, pm=RANK() OVER(PARTITION BY YearMonth ORDER BY amount DESC) FROM S ...
- NOI2018准备 Day10
效率低低低低低非常低!!!!!!!!!!!!!!!!!!!!!!! noi3.3 布尔表达式 做了2个晚上做不出来... 不过今晚上A了一道很水的找规律题
- “Word自动更改后的内容保存到通用文档模板上。是否加载该模板?“的解决办法
在win7系统下,Word2010出现了不能正常关闭.打开一个已有word文档,点击右上角关闭按钮后,先提示"word已停止工作,windows正在检查该问题的解决方案",随后提示 ...
- 安装mint的时候提示:Not compatible with your operating system or architecture: fsevents@1.0.11
Since fsevents is an API in OS X allows applications to register for notifications of changes to a g ...