<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          趣說(shuō):如何對(duì)代碼進(jìn)行復(fù)雜度分析

          共 1078字,需瀏覽 3分鐘

           ·

          2020-02-17 23:25



          你在學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)算法的時(shí)候
          你的目的就是為了讓代碼

          運(yùn)行的速度更加
          “快”
          占用的空間更加

          “少”

          那么當(dāng)你看到一段代碼的時(shí)候
          你應(yīng)該如何去分析它的運(yùn)行效率?


          fe2d4719adfc973598c50d83d06da76f.webp

          在此之前

          我們來(lái)看看你

          不辭辛勞整理的文件夾




          f0c62fae64d8038025cedfc3c0f1a56e.webp



          如果要讓你在這個(gè)文件夾里面

          讓你找蒼井空老師的教程

          你會(huì)怎么找呢?



          一種方式是

          從第一個(gè)文件到最后一個(gè)文件

          依次一個(gè)一個(gè)的查找




          b3b6951525212bc0206ccb4a771a4a51.webp



          用代碼體現(xiàn)就是這樣



          044a8d59668170330267137ed691b29c.webp



          這樣我們找到

          第 50?個(gè)文件夾

          發(fā)現(xiàn)是蒼井空老師

          于是進(jìn)去開(kāi)始觀看了起來(lái)



          813ce9bc710270c02ba1cf4c95a75f2f.webp



          不過(guò)這種查找效率并不高

          另一種查找方式是這樣


          咱們先從中間開(kāi)始找


          如果發(fā)現(xiàn)小了

          就把左邊的都去掉

          再在剩下的文件中往中間開(kāi)始找


          以此類(lèi)推



          375bddfab48bc6b274c39fa7034da04d.webp



          用代碼體現(xiàn)就是這樣



          906d11885158fc2353ccf37dd4defb04.webp


          第一種查找方式

          我們需要 50 次才找到蒼井空



          而第二種方式

          我們只需要 4?次就找到了蒼井空



          是不是快了很多



          540a9741da8d88e150c249a9721c216a.webp



          其實(shí)第二種方式叫

          “二分查找”


          在有序列表中

          是一種常見(jiàn)的算法


          那這和我們要說(shuō)的

          代碼復(fù)雜度分析

          有什么關(guān)系嘛?

          10fbc74dc68793027ff0233565c22a51.webp



          現(xiàn)在我們來(lái)假設(shè)

          你的文件夾巨 TM 多

          比如有上千萬(wàn)個(gè)文件夾



          c3e84709bf428694eccd5d52e338389b.webp



          如果你按第一種方式去

          找蒼老師的話

          你需要找?10000050?次

          才能找到她



          e27d0821c6d4fed55a103b31e878ccb1.webp



          而你通過(guò)第二種方式去

          找蒼老師的話

          你只需要 23

          就能找到它


          因?yàn)槎植檎沂且恢闭郯氩樵?/span>

          所以是 2 的對(duì)數(shù)

          也就是 log10000060



          到這里我們就會(huì)發(fā)現(xiàn)

          隨著數(shù)據(jù)規(guī)模的增加

          代碼的執(zhí)行時(shí)間會(huì)跟著變化




          b6e3dcbaf9308172d15c4a31e9455c20.webp




          那么如何去表示

          不同算法之間的

          時(shí)間復(fù)雜度呢?



          可以使用


          “大胸表示法”




          b930cdd9ace0842b31b2c61184c0ff10.webp



          不好意思

          說(shuō)錯(cuò)了



          “大O表示法”


          假設(shè)我們的文件夾

          有 n 個(gè)這么多


          那么第一種查找方式

          用大 O 表示時(shí)間復(fù)雜度

          就是這樣



          658636a1c408d61d5f43b935501825c5.webp



          而第二種查找方式

          用大 O 表示時(shí)間復(fù)雜度

          就是這樣



          1f6d58478b2dffb53d740437ceae4e13.webp



          可以看到

          執(zhí)行時(shí)間的增速

          和操作的次數(shù)成正比


          以下這些是較為常見(jiàn)的

          代碼時(shí)間復(fù)雜度表示




          d5250e6b54689f7c65dbfe0441563c84.webp



          具體來(lái)說(shuō)

          復(fù)雜度排序是這樣的




          92d287e740bf44fd00512c9a0bba4511.webp




          當(dāng)你在分析一段代碼的復(fù)雜度時(shí)


          一般情況下

          你只要往復(fù)雜的身上整就行了


          比如



          45c8f9e8ba266dfde9d857651f4feade.webp



          所以這段代碼的復(fù)雜度

          就是 O(logn)




          279f1bc6cd66f7aa5a885eef4d828141.webp




          最后你可能會(huì)問(wèn)了


          不對(duì)啊

          如果蒼井空老師的文件夾

          在第一個(gè)位置


          那使用第一種方式去查找

          不就 1 次就能找著了




          d16f1f5a1dc2665f7376d1c8ffd812cd.webp




          這時(shí)候效率

          不就比二分查找快很多?


          這就涉及到不同情況問(wèn)題了

          最好的情況就是蒼老師在第 1 個(gè)位置

          那么它的復(fù)雜度是 O(1)


          最壞的情況就是蒼老師在第 n 個(gè)位置

          那么它的復(fù)雜度是 O(n)


          這都是在極端情況下的分析

          一般我們用一開(kāi)始那樣分析就行了


          其它的在特定的情況下

          差異比較大才需要考慮

          最好最壞以及平均復(fù)雜度相關(guān)的


          到時(shí)再具體情況具體分析好了



          ok,以上就是

          小帥b今天給你帶來(lái)的分享


          希望對(duì)你有幫助

          那么我們下回再見(jiàn)

          peace


          推薦閱讀

          趣說(shuō):什么是數(shù)據(jù)結(jié)構(gòu)和算法

          _、_xx、xx_、__xx、__xx__


          4c4f5fdaea79df0fb6d1b8729880d535.webp

          掃一掃

          學(xué)習(xí) Python 沒(méi)煩惱




          點(diǎn)個(gè)在看

          給點(diǎn)動(dòng)力

          瀏覽 52
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  色婷在线视频 | 亚洲精品久久久日产欧美蜜桃 | 操美眉影院 | 操逼男人的天堂 | 亚洲精品人妻无码 |