算法学习-基本操作执行次数
2020-04-17 本文已影响0人
Zhigang_Han
1、场景1 给小灰1个长度为10cm的面包,小灰每3分钟吃掉1cm,那么吃掉整个面包需要多久?
解读:
3 min/cm,那 10 cm 呢?----310即30分钟
如果 n cm 呢?----3n即3n分钟
如果用一个函数来表示:T(n)= 3n, n 为面包的长度。(线性)
def eat1(n):
for i in range(n):
print("等待1min")
print("等待1min")
print("吃1cm面包")
eat1(10)
out:
等待1min
等待1min
吃1cm面包
等待1min
等待1min
吃1cm面包
等待1min
等待1min
吃1cm面包
等待1min
等待1min
吃1cm面包
等待1min
等待1min
吃1cm面包
2、场景2 给小灰1个长度为16cm的面包,小灰每5分钟吃掉面包剩余长度的一半,即第5分钟吃掉8cm,第10分钟吃掉4cm,第15分钟吃掉2cm……那么小灰把面包吃得只剩1cm,需要多久呢?
解读:
这个问题的数学表达就是,16不断地除以2,多少次之后为1呢?
即以2为底16的对数,log16。这个次数是4,4次以后就是1cm。数学公式T(n)=logn。(对数)
因此,把面包吃得只有1cm,需要5次,即5*4=20min
def eat2(n):
while n > 1:
print("等待1min")
print("等待1min")
print("等待1min")
print("等待1min")
print("吃一半面包")
n /= 2
eat2(16)
out:
等待1min
等待1min
等待1min
等待1min
吃一半面包
等待1min
等待1min
等待1min
等待1min
吃一半面包
等待1min
等待1min
等待1min
等待1min
吃一半面包
等待1min
等待1min
等待1min
等待1min
吃一半面包
3、给小灰1个长度为10cm的面包和1个鸡腿,小灰每2分钟吃掉1个鸡腿。那么小灰吃掉整个鸡腿需要多久呢?
解析:
如果面包的长度是n cm呢?
这个很简答,需要2min,无论任何时候,吃n个面包,一个鸡腿花的时间都为2min。即T(n)=2(常量)
def eat3(n):
print("等待1min")
print("吃一个鸡腿")
###吃多个鸡腿
def eat3(n):
while n >= 1:
print("1min")
print("一个鸡腿")
n -= 1
eat3(5)
out:
1min
1min
1min
1min
1min
1min
1min
1min
1min
1min
4、给小灰1个长度为10cm的面包,小灰吃掉第1个1cm需要1分钟时间,吃掉第2个1cm需要2分钟时间,吃掉第3个1cm需要3分钟时间……每吃1cm所花的时间就比吃上一个1cm多用1分钟。那么小灰吃掉整个面包需要多久呢?
解析:
答案是从1累加到10的总和,也就是55分钟。(高斯先生的童年等差数列求和)
def eat4(n):
for i in range(n):
for j in range(i):
print("等待1min")
print("吃1cm面包")
eat4(5)
#这里吃1cm面包,代表一分钟。
out:
吃1cm面包
等待1min
吃1cm面包
等待1min
等待1min
吃1cm面包
等待1min
等待1min
等待1min
吃1cm面包
等待1min
等待1min
等待1min
等待1min
吃1cm面包
通过以上可以看出计算机的执行次数T(n),那是否就可以分析和比较代码的运行时间了呢?
其实,还是有些复杂,这就要考虑到渐进时间复杂度的问题。