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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

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

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

大 O 復(fù)雜度表示法

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

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))

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

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

時(shí)間復(fù)雜度分析

  • 只關(guān)注循環(huán)執(zhí)行次數(shù)最多的一段代碼
  • 大 O 這種復(fù)雜度表示方法只是表示一種變化趨勢(shì)。我們通常會(huì)忽略掉公式中的常量、低階、系數(shù),只需要記錄一 個(gè)最大階的量級(jí)就可以了。所以,我們?cè)诜治鲆粋€(gè)算法、一段代碼的時(shí)間復(fù)雜度的時(shí)候,也只關(guān)注循環(huán)執(zhí)行次數(shù) 最多的那一段代碼就可以了。這段核心代碼執(zhí)行次數(shù)的 n 的量級(jí),就是整段要分析代碼的時(shí)間復(fù)雜度。

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

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

  • 加法法則:總復(fù)雜度等于量級(jí)最大的那段代碼的復(fù)雜度
  • 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

    綜合這三段代碼的時(shí)間復(fù)雜度,我們?nèi)∑渲凶畲蟮牧考?jí)。所以,整段代碼的時(shí)間復(fù)雜度就為 O(n2)。也就是說: 總的時(shí)間復(fù)雜度就等于量級(jí)最大的那段代碼的時(shí)間復(fù)雜度

    最壞時(shí)間復(fù)雜度

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

    • 算法完成工作最少需要多少基本操作,即最優(yōu)時(shí)間復(fù)雜度
    • 算法完成工作最多需要多少基本操作,即最壞時(shí)間復(fù)雜度
    • 算法完成工作平均需要多少基本操作,即平均時(shí)間復(fù)雜度

    對(duì)于最優(yōu)時(shí)間復(fù)雜度,其價(jià)值不大,因?yàn)樗鼪]有提供什么有用信息,其反映的只是最樂觀最理想的情況,沒有參考價(jià)值。
    對(duì)于最壞時(shí)間復(fù)雜度,提供了一種保證,表明算法在此種程度的基本操作中一定能完成工作。
    對(duì)于平均時(shí)間復(fù)雜度,是對(duì)算法的一個(gè)全面評(píng)價(jià),因此它完整全面的反映了這個(gè)算法的性質(zhì)。但另一方面,這種衡量并沒有保證,不是每個(gè)計(jì)算都能在這個(gè)基本操作內(nèi)完成。而且,對(duì)于平均情況的計(jì)算,也會(huì)因?yàn)閼?yīng)用算法的 實(shí)例分布可能并不均勻而難以計(jì)算。 因此,我們主要關(guān)注算法的最壞情況,亦即最壞時(shí)間復(fù)雜度。

    常見時(shí)間復(fù)雜度

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

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

    總結(jié)

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

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。