日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

算法的时间复杂度表示法(大O表示法)

發布時間:2023/12/8 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 算法的时间复杂度表示法(大O表示法) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

大 O 復雜度表示法

算法的執行效率,粗略地講,就是算法代碼執行的時間。但是,如何在不運行代碼的情況下,用“肉眼”得到一 段代碼的執行時間呢?

for a in range(0, 1001):for b in range(0, 1001): for c in range(0, 1001): if a**2 + b**2 == c**2 and a+b+c == 1000:print("a, b, c: %d, %d, %d" % (a, b, c))

通過這段代碼執行時間的推導過程,我們可以得到一個非常重要的規律,那就是,所有代碼的執行時間 T(n) 與每 行代碼的執行次數 n 成正比。

其中,T(n)表示代碼執行的時間;n 表示數據規模的大小;f(n) 表示每行代碼執行的次數總 和。因為這是一個公式,所以用 f(n) 來表示。公式中的 O,表示代碼的執行時間 T(n) 與 f(n) 表達式成正比。
T(n) = O(n^3*2) 這就是大 O 時間復雜度表示法,大 O 時間復雜度實際上并不具體表示代碼真正的執行時 間,而是表示代碼執行時間隨數據規模增長的變化趨勢,所以,也叫作漸進時間復雜度(asymptotic time complexity),簡稱時間復雜度。 當n很大時,你可以把它想象成 10000、100000。而公式中的低階、常量、系數三部分并不左右增長趨勢,所以 都可以忽略。我們只需要記錄一個最大量級就可以了

時間復雜度分析

  • 只關注循環執行次數最多的一段代碼
  • 大 O 這種復雜度表示方法只是表示一種變化趨勢。我們通常會忽略掉公式中的常量、低階、系數,只需要記錄一 個最大階的量級就可以了。所以,我們在分析一個算法、一段代碼的時間復雜度的時候,也只關注循環執行次數 最多的那一段代碼就可以了。這段核心代碼執行次數的 n 的量級,就是整段要分析代碼的時間復雜度。

    def cal(n): sum = 0 i = 1for i in rang(n+1): sum += i i+=1 return sum

    其中第 2、3 行代碼都是常量級的執行時間,與 n 的大小無關,所以對于復雜度并沒有影響。循環執行次數最多 的是第 4、5 行代碼,所以這塊代碼要重點分析。前面我們也講過,這兩行代碼被執行了 n 次,所以總的時間復 雜度就是 O(n)。

  • 加法法則:總復雜度等于量級最大的那段代碼的復雜度
  • def cal(n): sum = 0i = 1 for in range(100): sum += i for i in rang(n+1): sum += i i+=1 for i in range(n+1): for j in range(n+1): pass

    綜合這三段代碼的時間復雜度,我們取其中最大的量級。所以,整段代碼的時間復雜度就為 O(n2)。也就是說: 總的時間復雜度就等于量級最大的那段代碼的時間復雜度

    最壞時間復雜度

    分析算法時,存在幾種可能的考慮:

    • 算法完成工作最少需要多少基本操作,即最優時間復雜度
    • 算法完成工作最多需要多少基本操作,即最壞時間復雜度
    • 算法完成工作平均需要多少基本操作,即平均時間復雜度

    對于最優時間復雜度,其價值不大,因為它沒有提供什么有用信息,其反映的只是最樂觀最理想的情況,沒有參考價值。
    對于最壞時間復雜度,提供了一種保證,表明算法在此種程度的基本操作中一定能完成工作。
    對于平均時間復雜度,是對算法的一個全面評價,因此它完整全面的反映了這個算法的性質。但另一方面,這種衡量并沒有保證,不是每個計算都能在這個基本操作內完成。而且,對于平均情況的計算,也會因為應用算法的 實例分布可能并不均勻而難以計算。 因此,我們主要關注算法的最壞情況,亦即最壞時間復雜度。

    常見時間復雜度

    常見的復雜度并不多,從低階到高階有:O(1)、O(logn)、O(n)、O(nlogn)、O(n2)。

    執行次數函數舉例階非正式術語
    12O(1)常數階
    2n + 3O(n)線性階
    3n^2 + 3n + 1O(n^2)平方階
    log2n + 20O(logn)對數階
    2n+3nlog2n+19O(nlogn)nlogn階
    2^nO(2^n)指數階

    總結

    以上是生活随笔為你收集整理的算法的时间复杂度表示法(大O表示法)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。