《编程导论》9.3.5 算法复杂度_多项式复杂度(辅助学习的笔记~)

这篇笔记探讨了算法复杂度中的多项式复杂度,特别是通过Python代码示例解释了如何理解第二个函数中增加的“*len(result)”导致的循环效果,与简单条件语句的区别。旨在帮助读者在疫情期间深化学习。
摘要由CSDN通过智能技术生成

这是最近一篇的关于多项式复杂度的笔记嘞~大家也在疫情期间加油学习!!!

#9.3.5 Multinomial fitness complexity(多项式复杂度)
#subset,子集;intersect,相交

def isSubset(L1, L2):
    """ 假定L1和L2是列表
        如果L1的每个元素都出现在L2中返回True,否则返回False"""
    for e1 in L1:
        matched = False
        for e2 in L2:
            if e1 == e2:
                matched = True
                break
        if not matched:
            return False
    return True
    #第一个循环会被执行O(len(L1))次,第二个O(len(L2))次
    #因此函数复杂度是O(len(L1)*len(L2))

def intersect(L1, L2):
    """ 假定L1和L2是列表
        返回一个列表,包含共同元素"""
    tmp = []
    for e1 in L1:
        for e2 in L2:
            if e1 == e2:
                tmp.append(e1)
    #去掉重复的元素
    result = []
    for e in tmp:
        if e not in result:
            result.append(e)
    return result
    #后半部分有坑点,并不是单纯的线性复杂度O(len(tmp))
    #因为if语句其实是对result跟e进行校对,所以应该是O(len(tmp)*len(result))
    #而后半部分是根据L1和L2中较短的部分来决定的,所以增长速度没有前半部分快
    #因此函数复杂度是O(len(L1)*len(L2))

(里面有英语生词的记录别介意哈hhh[手动狗头])
各位第二个函数不理解的可以对比一下前后两个函数,之所以后面多了个“*len(result)”正是因为它实质是在列表result中遍历e,对比result中是否有e,这就相当于是个循环了,而第一个函数则只是纯粹的运行一次的条件语句,高下立断了~
希望我的奇葩解析大家能看懂[笑cry]嘻

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值