typora-copy-images-to: Python 编程导论
文章目录
Python 编程导论 Chapter 9 —— 算法复杂度简介
- 编写高效的程序并不容易,最简单直接的方法一般都不是最有效的
- 为了以合理的方式提高程序效率,我们应该知道如何估计一个程序的计算复杂度
9.1 思考计算复杂度
def f(i):
"""假设i是个整数并且 i >= 0"""
answer = 1
while i >= 1:
answer *= i
i -= 1
return answer
-
使用上面的代码来运行并计时取决于以下几个因素:
- 运行程序的计算机性能
- python系统的效率
- 输入值
-
使用随机存取机作为计算模型,在这个模型中,步数是顺序执行的,每次执行一部,一步指一个需要固定时间量的操作,这种方式解决了输入值的问题
# 搜索算法
def linearSearch(L, x):
for e in L:
if e == x:
return True
return False
- 以上代码运行需要考虑三种情况:
- 最佳情形,输入最有利情况下,其运行时间与L的大小无关
- 最差情形,与L的输入规模成正比
- 平均情形(期望情形)
# 使用迭代实现的阶乘函数:
def fact(n):
"""假设 n 是自然数,返回n!"""
answer = 1 #步数1
while n > 1 : # 1步
answer *= n # 2步
n -= 1 # 2步
return answer #步数1
# 这个程序所需要的步数应该是2 + 5n
# 穷举法求平方根:
def squareRootExhaustive(x, epsilon):
"""假设x和epsilon都是正的浮点数,并且epsilon < 1
返回一个y,使y*y与x的差小于epsilon"""
step = epsilon**2
ans = 0.0
while abs(ans**2 - x) >= epsilon and ans*ans <= x:
ans += step
if ans*ans > x:
raise ValueError
return ans
# 二分法求平方根:
def squareRootBi(x, epsilon):