Python 编程导论 Chapter 9 —— 算法复杂度简介

本文介绍了Python编程中算法复杂度的概念,包括计算复杂度的影响因素、渐进表示法和不同复杂度级别的特点,如常数复杂度、对数复杂度、线性复杂度、对数线性复杂度、多项式复杂度以及指数复杂度,并强调了它们在程序效率中的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


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):     
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值