算法运行的快慢(时间复杂度)

本文介绍了如何通过O记法估算算法的时间复杂度,解释了不同级别的复杂度如O(1),O(n),O(n²)等的含义,并通过示例说明了在处理循环和递归时如何分析复杂度。还提到了对数级别的时间复杂度O(logn)以及不常见的复杂度如O(n!)和O(2^n)。
摘要由CSDN通过智能技术生成

(1)通过公式的形式大概估算出一个算法耗费的时间
        print("HelloWorld")   O(1)   这个O是数学中表示一个界限的上界,也可以理解为是最大值,封顶,也可以说是大约是这个括号中的值。
        
        for i in range(n):
            print("HelloWorld")     O(n)
            
        for i in range(n):
            for j in range(n):
                print("HelloWorld")    O(n²)
                
        for i in range(n):
            for j in range(n):
                for k in range(n):
                    print("HelloWorld")   O(n³)
    时间复杂度在很多时候,O()括号中的那个数字或者字母更多像是一种算法中的特殊计量单位,而在一个低级单位遇见相同单位时通常就融合成一个低级单位,例如下(1);而在一个低级单位遇见了另一个量级相对更高的单位时,通常忽略低级单位带来的细微的事件复杂影响,如下(2):
    print("HelloWorld")
    print("Algorithm")
    print("Python")       (1) 
    时间复杂度为O(1)而不是O(3),如上面所解释的,多个同级单位在一起,取一个单位的时间复杂度作为整体的时间复杂度;
    for i in range(n):
        print("Algorithm")
        for j in range(n):
            print("Algorithm")    (2)
    这一段的时间复杂度就为O(n²)而不是看见的那样O(n+n²),就如上讲所说的,低级遇高级,高级为主,所以是O(n²)。
    n = 128
    while n > 1:
        print(n)
        n = n // 2    (1)
    
    while n > 1:
        print(n)
        n = n - 2     (2)
    
    while n > 1:
        print(n)
        n = n // 3     (3)
    如(1)所示情况,这个时候的时间复杂度为O(log[2]n),不是可能第一眼看过去想到的O(n/2),很明显在n=128的时候,这个程序的n值会输出128,64,3,16,8,4,2,执行了7次,而不是像我第一眼看过去所认为的64次,这是对数级的时间复杂度,像(1)也可以略写成O(logn)(一般在程序出现折半的,也就是一次砍去一半的情况,时间复杂度就是O(log[2]n));
    而(2)所示的,这时候的情况就是O(n/2),通常我们不写O(n/2),而是写成O(n);
    像(3)所示的这种情况就该写成O(log[3]n),而这个就没有像(1)所示的缩写的情况。
    一般情况下,按照效率,或者简单来讲,按照运行速度来说,
    O(1)<O(logn)<O(n)<O(nlogn)<O(n²)<O(n²logn)<O(n³);
    而在一些比较难的算法题中,可能会出现一些不太常见的时间复杂度,如下:
        O(n!)   O(2{n次方})    O(n{n次方})
    

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值