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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

数据结构:复杂度分析以及数据结构整体概览

發(fā)布時(shí)間:2025/6/15 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构:复杂度分析以及数据结构整体概览 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

? 復(fù)雜度無非是空間,時(shí)間復(fù)雜度。 掌握了時(shí)間,空間復(fù)雜度的分析,基本算掌握了數(shù)據(jù)結(jié)構(gòu)與算法的一半內(nèi)容。

? ?之所以引入這幾個(gè)復(fù)雜度概念,是因?yàn)?#xff0c;同一段代碼,在不同輸入的情況下,復(fù)雜度量級(jí)有可能是不一樣的。

? 分析一段代碼的時(shí)間,空間復(fù)雜度時(shí)候,最需要關(guān)注的是循環(huán)次數(shù)最多的代碼

? ?時(shí)間復(fù)雜度的全稱是漸進(jìn)時(shí)間復(fù)雜度,表示算法的執(zhí)行時(shí)間與數(shù)據(jù)規(guī)模之間的增長(zhǎng)關(guān)系。

? ?類比一下,空間復(fù)雜度全稱就是漸進(jìn)空間復(fù)雜度(asymptotic space complexity),表示算法的存儲(chǔ)空間與數(shù)據(jù)規(guī)模之間的增長(zhǎng)關(guān)系。

?

如何分析一段代碼的時(shí)間復(fù)雜度?

?1.? 只關(guān)注循環(huán)執(zhí)行次數(shù)最多的一段代碼

?2. 加法法則,總復(fù)雜度等于量級(jí)最大的那段代碼的復(fù)雜度。

?3. 乘法法則,嵌套代碼的復(fù)雜度等于嵌套內(nèi)外代碼復(fù)雜度的乘積。

?

對(duì)于上面羅列的復(fù)雜度量級(jí),我們可以粗略地分為兩類,多項(xiàng)式量級(jí)非多項(xiàng)式量級(jí)。其中,非多項(xiàng)式量級(jí)只有兩個(gè):。

我們把時(shí)間復(fù)雜度為非多項(xiàng)式量級(jí)的算法問題叫作 NP(Non-Deterministic Polynomial,非確定多項(xiàng)式)問題。

  • O(1)
  • 首先你必須明確一個(gè)概念,O(1) 只是常量級(jí)時(shí)間復(fù)雜度的一種表示方法,并不是指只執(zhí)行了一行代碼。比如這段代碼,即便有 3 行,它的時(shí)間復(fù)雜度也是 O(1),而不是 O(3)。

    ? ? 我稍微總結(jié)一下,只要代碼的執(zhí)行時(shí)間不隨 n 的增大而增長(zhǎng),這樣代碼的時(shí)間復(fù)雜度我們都記作 O(1)。或者說,一般情況下,只要算法中不存在循環(huán)語句、遞歸語句,即使有成千上萬行的代碼,其時(shí)間復(fù)雜度也是Ο(1)。

    ? ? ?

    2.?O(logn)、O(nlogn)

    ? ??對(duì)數(shù)階時(shí)間復(fù)雜度非常常見,同時(shí)也是最難分析的一種時(shí)間復(fù)雜度。我通過一個(gè)例子來說明一下。

    ? ?

    實(shí)際上,不管是以 2 為底、以 3 為底,還是以 10 為底,我們可以把所有對(duì)數(shù)階的時(shí)間復(fù)雜度都記為 O(logn)。為什么呢?

    我們知道,對(duì)數(shù)之間是可以互相轉(zhuǎn)換的,

    下面開始進(jìn)行互換,首先設(shè) a 為 2 將所有數(shù)換為以 2 為底的。將含有 n 的分母移出來。再使用換底公式將?log_23log2?3?換為以 3 為底的。又因?yàn)榉帜傅?log_33=1log3?3=1?所以我們換底就成功拉。

    參考:?https://blackyau.cc/24.html#ologn-onlogn

    如果理解了上面講的 O(logn),那 O(nlogn) 就很容易理解了。O(nlogn) 也是一種非常常見的算法時(shí)間復(fù)雜度。比如,歸并排序、快速排序的時(shí)間復(fù)雜度都是 O(nlogn)。

    ?

    如何分析空間復(fù)雜度

    ? ? ? ?我們常見的空間復(fù)雜度就是 O(1)、O(n)、O(n2 ),像 O(logn)、O(nlogn) 這樣的對(duì)數(shù)階復(fù)雜度平時(shí)都用不到。而且,空間復(fù)雜度分析比時(shí)間復(fù)雜度分析要簡(jiǎn)單很多。所以,對(duì)于空間復(fù)雜度,掌握剛我說的這些內(nèi)容已經(jīng)足夠了。

    ?

    ? ? ? ?1.最好情況時(shí)間復(fù)雜度(best case time complexity):在最理想的情況下,執(zhí)行這段代碼的時(shí)間復(fù)雜度。

    ? ? ? ?2.最壞情況時(shí)間復(fù)雜度(worst case time complexity):在最糟糕的情況下,執(zhí)行這段代碼的時(shí)間復(fù)雜度。

    ? ? ? ?3.平均情況時(shí)間復(fù)雜度(average case time complexity)

    ? ? ? ? ??最好情況時(shí)間復(fù)雜度和最壞情況時(shí)間復(fù)雜度對(duì)應(yīng)的都是極端情況下的代碼復(fù)雜度,發(fā)生的概率其實(shí)并不大。為了更好地表示平均情況下的復(fù)雜度,我們需要引入另一個(gè)概念:平均情況時(shí)間復(fù)雜度。

    ? ? 4.均攤時(shí)間復(fù)雜度(amortized time complexity)

    ?

    ? ?因?yàn)?#xff0c;要查找的變量 x 可能出現(xiàn)在數(shù)組的任意位置。如果數(shù)組中第一個(gè)元素正好是要查找的變量 x,那就不需要繼續(xù)遍歷剩下的 n-1 個(gè)數(shù)據(jù)了,那時(shí)間復(fù)雜度就是 O(1)。但如果數(shù)組中不存在變量 x,那我們就需要把整個(gè)數(shù)組都遍歷一遍,時(shí)間復(fù)雜度就成了 O(n)。

    ? ? ? ?所以,不同的情況下,這段代碼的時(shí)間復(fù)雜度是不一樣的。

    ?? ? ?為了表示代碼在不同情況下的不同時(shí)間復(fù)雜度,我們需要引入三個(gè)概念:最好情況時(shí)間復(fù)雜度、最壞情況時(shí)間復(fù)雜度和平均情況時(shí)間復(fù)雜度。

    ?

    ?

    ?

    ?

    數(shù)據(jù)結(jié)構(gòu)整體概覽

    ?

    ?

    ?

    總結(jié)

    以上是生活随笔為你收集整理的数据结构:复杂度分析以及数据结构整体概览的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

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