美文网首页统计分析与数据挖掘
算法学习-基本操作执行次数

算法学习-基本操作执行次数

作者: Zhigang_Han | 来源:发表于2020-04-17 12:34 被阅读0次
    1、场景1 给小灰1个长度为10cm的面包,小灰每3分钟吃掉1cm,那么吃掉整个面包需要多久?

    解读:
    3 min/cm,那 10 cm 呢?----310即30分钟
    如果 n cm 呢?----3
    n即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),那是否就可以分析和比较代码的运行时间了呢?
    其实,还是有些复杂,这就要考虑到渐进时间复杂度的问题。

    相关文章

      网友评论

        本文标题:算法学习-基本操作执行次数

        本文链接:https://www.haomeiwen.com/subject/dlxevhtx.html