国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

算法與數(shù)據(jù)結(jié)構(gòu)-復(fù)雜度分析

這篇具有很好參考價(jià)值的文章主要介紹了算法與數(shù)據(jù)結(jié)構(gòu)-復(fù)雜度分析。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。


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

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

??這里有段非常簡單的代碼,求 1,2,3…n 的累加和。現(xiàn)在,我就帶你一塊來估算一下這段代碼的執(zhí)行時(shí)間。

 int cal(int n) {
   int sum = 0;
   int i = 1;
   for (; i <= n; ++i) {
     sum = sum + i;
   }
   return sum;
 }

??從 CPU 的角度來看,這段代碼的每一行都執(zhí)行著類似的操作:讀數(shù)據(jù)-運(yùn)算-寫數(shù)據(jù)。盡管每行代碼對(duì)應(yīng)的 CPU 執(zhí)行的個(gè)數(shù)、執(zhí)行的時(shí)間都不一樣,但是,我們這里只是粗略估計(jì),所以可以假設(shè)每行代碼執(zhí)行的時(shí)間都一樣,為 unit_time。在這個(gè)假設(shè)的基礎(chǔ)之上,這段代碼的總執(zhí)行時(shí)間是多少呢?

??第 2、3 行代碼分別需要 1 個(gè) unit_time 的執(zhí)行時(shí)間,第 4、5 行都運(yùn)行了 n 遍,所以需要 2n*unit_time 的執(zhí)行時(shí)間,所以這段代碼總的執(zhí)行時(shí)間就是 (2n+2)*unit_time??梢钥闯鰜?,所有代碼的執(zhí)行時(shí)間 T(n) 與每行代碼的執(zhí)行次數(shù)成正比。

??按照這個(gè)分析思路,我們?cè)賮砜催@段代碼。

 int cal(int n) {
   int sum = 0;
   int i = 1;
   int j = 1;
   for (; i <= n; ++i) {
     j = 1;
     for (; j <= n; ++j) {
       sum = sum +  i * j;
     }
   }
 }

??我們依舊假設(shè)每個(gè)語句的執(zhí)行時(shí)間是 unit_time。那這段代碼的總執(zhí)行時(shí)間 T(n) 是多少呢?

??第 2、3、4 行代碼,每行都需要 1 個(gè) unit_time 的執(zhí)行時(shí)間,第 5、6 行代碼循環(huán)執(zhí)行了 n 遍,需要 2n * unit_time 的執(zhí)行時(shí)間,第 7、8 行代碼循環(huán)執(zhí)行了 n2遍,所以需要 2n2 * unit_time 的執(zhí)行時(shí)間。所以,整段代碼總的執(zhí)行時(shí)間 T(n) = (2n2+2n+3)*unit_time。

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

??我們可以把這個(gè)規(guī)律總結(jié)成一個(gè)公式。注意,大 O 就要登場(chǎng)了!
算法與數(shù)據(jù)結(jié)構(gòu)-復(fù)雜度分析
??我來具體解釋一下這個(gè)公式。其中,T(n) 我們已經(jīng)講過了,它表示代碼執(zhí)行的時(shí)間;n 表示數(shù)據(jù)規(guī)模的大??;f(n) 表示每行代碼執(zhí)行的次數(shù)總和。因?yàn)檫@是一個(gè)公式,所以用 f(n) 來表示。公式中的 O,表示代碼的執(zhí)行時(shí)間 T(n) 與 f(n) 表達(dá)式成正比。

??所以,第一個(gè)例子中的 T(n) = O(2n+2),第二個(gè)例子中的 T(n) = O(2n2+2n+3)。這就是大 O 時(shí)間復(fù)雜度表示法。大 O 時(shí)間復(fù)雜度實(shí)際上并不具體表示代碼真正的執(zhí)行時(shí)間,而是表示代碼執(zhí)行時(shí)間隨數(shù)據(jù)規(guī)模增長的變化趨勢(shì),所以,也叫作漸進(jìn)時(shí)間復(fù)雜度(asymptotic time complexity),簡稱時(shí)間復(fù)雜度。

??當(dāng) n 很大時(shí),你可以把它想象成 10000、100000。而公式中的低階、常量、系數(shù)三部分并不左右增長趨勢(shì),所以都可以忽略。我們只需要記錄一個(gè)最大量級(jí)就可以了,如果用大 O 表示法表示剛講的那兩段代碼的時(shí)間復(fù)雜度,就可以記為:T(n) = O(n); T(n) = O(n2)。


為什么要用大 O 復(fù)雜度表示法

??那么這個(gè)大 O 復(fù)雜度表示法與通過統(tǒng)計(jì)、監(jiān)控得到算法執(zhí)行的時(shí)間和占用的內(nèi)存大小有什么區(qū)別?為什么還要做時(shí)間、空間復(fù)雜度分析呢?這種分析方法能比我實(shí)實(shí)在在跑一遍得到的數(shù)據(jù)更準(zhǔn)確嗎?

??首先,我可以肯定地說,你這種評(píng)估算法執(zhí)行效率的方法是正確的。很多數(shù)據(jù)結(jié)構(gòu)和算法書籍還給這種方法起了一個(gè)名字,叫事后統(tǒng)計(jì)法。

??但是,這種統(tǒng)計(jì)方法有非常大的局限性。

    1. 測(cè)試結(jié)果非常依賴測(cè)試環(huán)境
      測(cè)試環(huán)境中硬件的不同會(huì)對(duì)測(cè)試結(jié)果有很大的影響。比如,我們拿同樣一段代碼,分別用 Intel Core i9 處理器和 Intel Core i3 處理器來運(yùn)行,不用說,i9 處理器要比 i3 處理器執(zhí)行的速度快很多。還有,比如原本在這臺(tái)機(jī)器上 a 代碼執(zhí)行的速度比 b 代碼要快,等我們換到另一臺(tái)機(jī)器上時(shí),可能會(huì)有截然相反的結(jié)果。
    1. 測(cè)試結(jié)果受數(shù)據(jù)規(guī)模的影響很大
      后面我們會(huì)講排序算法,我們先拿它舉個(gè)例子。對(duì)同一個(gè)排序算法,待排序數(shù)據(jù)的有序度不一樣,排序的執(zhí)行時(shí)間就會(huì)有很大的差別。極端情況下,如果數(shù)據(jù)已經(jīng)是有序的,那排序算法不需要做任何操作,執(zhí)行時(shí)間就會(huì)非常短。

??除此之外,如果測(cè)試數(shù)據(jù)規(guī)模太小,測(cè)試結(jié)果可能無法真實(shí)地反映算法的性能。比如,對(duì)于小規(guī)模的數(shù)據(jù)排序,插入排序可能反倒會(huì)比快速排序要快! 所以,我們需要一個(gè)不用具體的測(cè)試數(shù)據(jù)來測(cè)試,就可以粗略地估計(jì)算法的執(zhí)行效率的方法,這個(gè)方法就是大 O 復(fù)雜度表示法。


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

1、只關(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ù)雜度。

??為了便于你理解,我還是拿前面的例子來說明。

 int cal(int n) {
   int sum = 0;
   int i = 1;
   for (; i <= n; ++i) {
     sum = sum + i;
   }
   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)。

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

??我這里還有一段代碼。你可以先試著分析一下,然后再往下看跟我的分析思路是否一樣。

int cal(int n) {
   int sum_1 = 0;
   int p = 1;
   for (; p < 100; ++p) {
     sum_1 = sum_1 + p;
   }

   int sum_2 = 0;
   int q = 1;
   for (; q < n; ++q) {
     sum_2 = sum_2 + q;
   }
 
   int sum_3 = 0;
   int i = 1;
   int j = 1;
   for (; i <= n; ++i) {
     j = 1; 
     for (; j <= n; ++j) {
       sum_3 = sum_3 +  i * j;
     }
   }
 
   return sum_1 + sum_2 + sum_3;
 }

??這個(gè)代碼分為三部分,分別是求 sum_1、sum_2、sum_3。我們可以分別分析每一部分的時(shí)間復(fù)雜度,然后把它們放到一塊兒,再取一個(gè)量級(jí)最大的作為整段代碼的復(fù)雜度。

??第一段的時(shí)間復(fù)雜度是多少呢?這段代碼循環(huán)執(zhí)行了 100 次,所以是一個(gè)常量的執(zhí)行時(shí)間,跟 n 的規(guī)模無關(guān)。

??這里我要再強(qiáng)調(diào)一下,即便這段代碼循環(huán) 10000 次、100000 次,只要是一個(gè)已知的數(shù),跟 n 無關(guān),照樣也是常量級(jí)的執(zhí)行時(shí)間。當(dāng) n 無限大的時(shí)候,就可以忽略。盡管對(duì)代碼的執(zhí)行時(shí)間會(huì)有很大影響,但是回到時(shí)間復(fù)雜度的概念來說,它表示的是一個(gè)算法執(zhí)行效率與數(shù)據(jù)規(guī)模增長的變化趨勢(shì),所以不管常量的執(zhí)行時(shí)間多大,我們都可以忽略掉。因?yàn)樗旧韺?duì)增長趨勢(shì)并沒有影響。

??那第二段代碼和第三段代碼的時(shí)間復(fù)雜度是多少呢?答案是 O(n) 和 O(n2),你應(yīng)該能容易就分析出來,我就不啰嗦了。

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

T1(n)=O(f(n))
T2(n)=O(g(n))
T(n)=T1(n)+T2(n)=max(O(f(n)), O(g(n))) =O(max(f(n), g(n)))

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

??我們這里還是給出一段代碼,你先試著分析下時(shí)間復(fù)雜度,再往下看我給的公式:

int cal(int n) {
   int ret = 0; 
   int i = 1;
   for (; i < n; ++i) {
     ret = ret + f(i);
   } 
 } 
 
 int f(int n) {
  int sum = 0;
  int i = 1;
  for (; i < n; ++i) {
    sum = sum + i;
  } 
  return sum;
 }

??我們單獨(dú)看 cal() 函數(shù)。假設(shè) f() 只是一個(gè)普通的操作,那第 4~6 行的時(shí)間復(fù)雜度就是,T1(n) = O(n)。但 f() 函數(shù)本身不是一個(gè)簡單的操作,它的時(shí)間復(fù)雜度是 T2(n) = O(n),所以,整個(gè) cal() 函數(shù)的時(shí)間復(fù)雜度就是,T(n) = T1(n) * T2(n) = O(n*n) = O(n2)。
那么我們?cè)俪橄笙逻@個(gè)公式:

T1(n)=O(f(n))
T2(n)=O(g(n))
T(n)=T1(n)*T2(n)=O(f(n))*O(g(n))=O(f(n)*g(n))

幾種常見時(shí)間復(fù)雜度實(shí)例分析

??雖然代碼千差萬別,但是常見的復(fù)雜度量級(jí)并不多。我稍微總結(jié)了一下,這些復(fù)雜度量級(jí)幾乎涵蓋了你今后可以接觸的所有代碼的復(fù)雜度量級(jí)。
算法與數(shù)據(jù)結(jié)構(gòu)-復(fù)雜度分析
??對(duì)于剛羅列的復(fù)雜度量級(jí),我們可以粗略地分為兩類,多項(xiàng)式量級(jí)和非多項(xiàng)式量級(jí)。其中,非多項(xiàng)式量級(jí)只有兩個(gè):O(2?) 和 O(n!)。

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

??當(dāng)數(shù)據(jù)規(guī)模 n 越來越大時(shí),非多項(xiàng)式量級(jí)算法的執(zhí)行時(shí)間會(huì)急劇增加,求解問題的執(zhí)行時(shí)間會(huì)無限增長。所以,非多項(xiàng)式時(shí)間復(fù)雜度的算法其實(shí)是非常低效的算法。
算法與數(shù)據(jù)結(jié)構(gòu)-復(fù)雜度分析
??因此,關(guān)于 NP 時(shí)間復(fù)雜度我就不展開講了。我們主要來看幾種常見的多項(xiàng)式時(shí)間復(fù)雜度。

O(1)

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

 int i = 8;
 int j = 6;
 int sum = i + j;

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

O(logn)、O(nlogn)

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

 i=1;
 while (i <= n)  {
   i = i * 2;
 }

??根據(jù)我們前面講的復(fù)雜度分析方法,第三行代碼是循環(huán)執(zhí)行次數(shù)最多的。所以,我們只要能計(jì)算出這行代碼被執(zhí)行了多少次,就能知道整段代碼的時(shí)間復(fù)雜度。

??從代碼中可以看出,變量 i 的值從 1 開始取,每循環(huán)一次就乘以 2。當(dāng)大于 n 時(shí),循環(huán)結(jié)束。還記得我們高中學(xué)過的等比數(shù)列嗎?實(shí)際上,變量 i 的取值就是一個(gè)等比數(shù)列。如果我把它一個(gè)一個(gè)列出來,就應(yīng)該是這個(gè)樣子的:
算法與數(shù)據(jù)結(jié)構(gòu)-復(fù)雜度分析
??所以,我們只要知道 x 值是多少,就知道這行代碼執(zhí)行的次數(shù)了。通過 2x=n 求解 x 這個(gè)問題我們想高中應(yīng)該就學(xué)過了,我就不多說了。x=log2n,所以,這段代碼的時(shí)間復(fù)雜度就是 O(log2n)。

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

??我們知道,對(duì)數(shù)之間是可以互相轉(zhuǎn)換的,log3n 就等于 log32 * log2n,所以 O(log3n) = O(C * log2n),其中 C=log32 是一個(gè)常量?;谖覀兦懊娴囊粋€(gè)理論:在采用大 O 標(biāo)記復(fù)雜度的時(shí)候,可以忽略系數(shù),即 O(Cf(n)) = O(f(n))。所以,O(log2n) 就等于 O(log3n)。因此,在對(duì)數(shù)階時(shí)間復(fù)雜度的表示方法里,我們忽略對(duì)數(shù)的“底”,統(tǒng)一表示為 O(logn)。

??如果你理解了我前面講的 O(logn),那 O(nlogn) 就很容易理解了。還記得我們剛講的乘法法則嗎?如果一段代碼的時(shí)間復(fù)雜度是 O(logn),我們循環(huán)執(zhí)行 n 遍,時(shí)間復(fù)雜度就是 O(nlogn) 了。而且,O(nlogn) 也是一種非常常見的算法時(shí)間復(fù)雜度。比如,歸并排序、快速排序的時(shí)間復(fù)雜度都是 O(nlogn)。

O(m+n)、O(m*n)

??我們?cè)賮碇v一種跟前面都不一樣的時(shí)間復(fù)雜度,代碼的復(fù)雜度由兩個(gè)數(shù)據(jù)的規(guī)模來決定。老規(guī)矩,先看代碼!

int cal(int m, int n) {
  int sum_1 = 0;
  int i = 1;
  for (; i < m; ++i) {
    sum_1 = sum_1 + i;
  }

  int sum_2 = 0;
  int j = 1;
  for (; j < n; ++j) {
    sum_2 = sum_2 + j;
  }

  return sum_1 + sum_2;
}

??從代碼中可以看出,m 和 n 是表示兩個(gè)數(shù)據(jù)規(guī)模。我們無法事先評(píng)估 m 和 n 誰的量級(jí)大,所以我們?cè)诒硎緩?fù)雜度的時(shí)候,就不能簡單地利用加法法則,省略掉其中一個(gè)。所以,上面代碼的時(shí)間復(fù)雜度就是 O(m+n)。

??針對(duì)這種情況,原來的加法法則就不正確了,我們需要將加法規(guī)則改為:T1(m) + T2(n) = O(f(m) + g(n))。但是乘法法則繼續(xù)有效:T1(m)*T2(n) = O(f(m) * f(n))。


空間復(fù)雜度分析

??前面,咱們花了很長時(shí)間講大 O 表示法和時(shí)間復(fù)雜度分析,理解了前面講的內(nèi)容,空間復(fù)雜度分析方法學(xué)起來就非常簡單了。

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

??我還是拿具體的例子來給你說明。(這段代碼有點(diǎn)“傻”,一般沒人會(huì)這么寫,我這么寫只是為了方便給你解釋。)

void print(int n) {
  int i = 0;
  int[] a = new int[n];
  for (i; i <n; ++i) {
    a[i] = i * i;
  }

  for (i = n-1; i >= 0; --i) {
    print out a[i]
  }
}

??跟時(shí)間復(fù)雜度分析一樣,我們可以看到,第 2 行代碼中,我們申請(qǐng)了一個(gè)空間存儲(chǔ)變量 i,但是它是常量階的,跟數(shù)據(jù)規(guī)模 n 沒有關(guān)系,所以我們可以忽略。第 3 行申請(qǐng)了一個(gè)大小為 n 的 int 類型數(shù)組,除此之外,剩下的代碼都沒有占用更多的空間,所以整段代碼的空間復(fù)雜度就是 O(n)。

??我們常見的空間復(fù)雜度就是 O(1)、O(n)、O(n2 ),像 O(logn)、O(nlogn) 這樣的對(duì)數(shù)階復(fù)雜度平時(shí)都用不到。而且,空間復(fù)雜度分析比時(shí)間復(fù)雜度分析要簡單很多。所以,對(duì)于空間復(fù)雜度,掌握剛我說的這些內(nèi)容已經(jīng)足夠了。文章來源地址http://www.zghlxwxcb.cn/news/detail-473316.html

到了這里,關(guān)于算法與數(shù)據(jù)結(jié)構(gòu)-復(fù)雜度分析的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【數(shù)據(jù)結(jié)構(gòu)與算法——TypeScript】算法的復(fù)雜度分析、 數(shù)組和鏈表的對(duì)比

    【數(shù)據(jù)結(jié)構(gòu)與算法——TypeScript】算法的復(fù)雜度分析、 數(shù)組和鏈表的對(duì)比

    什么是算法復(fù)雜度(現(xiàn)實(shí)案例)? ????? 前面已經(jīng)解釋了什么是算法? 其實(shí)就是解決問題的一系列步驟操作、邏輯。 ? 對(duì)于同一個(gè)問題,我們往往有很多種解決思路和方法,也就是可以采用不同的算法。 舉個(gè)例子(現(xiàn)實(shí)例子):在一個(gè)龐大的圖書館中,我們需要找一本書

    2024年02月14日
    瀏覽(31)
  • 扎實(shí)打牢數(shù)據(jù)結(jié)構(gòu)算法根基,從此不怕算法面試系列之007 week01 02-07 簡單的復(fù)雜度分析

    復(fù)雜度分析本身是非常理論化的一個(gè)內(nèi)容,在計(jì)算機(jī)科學(xué)中,有一個(gè)專門的學(xué)科叫做—— 計(jì)算復(fù)雜性理論 。 很多童鞋看過《算法導(dǎo)論》,這本書的內(nèi)容很多很強(qiáng)調(diào)算法導(dǎo)論。 但是實(shí)際上,對(duì)于普通程序員來說, 不需要 過度強(qiáng)調(diào)理論化的內(nèi)容 。因?yàn)楣ぷ髦懈嗝鎸?duì)的是實(shí)際

    2023年04月19日
    瀏覽(27)
  • 數(shù)據(jù)結(jié)構(gòu):算法(特性,時(shí)間復(fù)雜度,空間復(fù)雜度)

    數(shù)據(jù)結(jié)構(gòu):算法(特性,時(shí)間復(fù)雜度,空間復(fù)雜度)

    算法(Algorithm)是對(duì) 特定問題求解步驟 的一種描述,它是指令的有限序列,其中的每條指令表示一個(gè)或多個(gè)操作。 一個(gè)算法必須總在執(zhí)行有窮步之后結(jié)束,且每一步都可在有窮時(shí)間內(nèi)完成。 算法必須是有窮的,而程序可以是無窮的 算法中每條指令必須有確切的含義,對(duì)于

    2024年02月06日
    瀏覽(26)
  • 算法的時(shí)間復(fù)雜度和空間復(fù)雜度(數(shù)據(jù)結(jié)構(gòu))

    算法的時(shí)間復(fù)雜度和空間復(fù)雜度(數(shù)據(jù)結(jié)構(gòu))

    目錄 1、算法效率 1如何衡量一個(gè)算法的好壞 2算法的復(fù)雜度 2、時(shí)間復(fù)雜度 1時(shí)間復(fù)雜度的概念 2大O的漸進(jìn)表示法 2時(shí)間復(fù)雜度計(jì)算例題 1、計(jì)算Func2的時(shí)間復(fù)雜度 2、計(jì)算Func3的時(shí)間復(fù)雜度 3、計(jì)算Func4的時(shí)間復(fù)雜度 4、計(jì)算strchr的時(shí)間復(fù)雜度 5、計(jì)算BubbleSort的時(shí)間復(fù)雜度 6、計(jì)算

    2024年02月03日
    瀏覽(26)
  • 數(shù)據(jù)結(jié)構(gòu)與算法—時(shí)間復(fù)雜度和空間復(fù)雜度

    數(shù)據(jù)結(jié)構(gòu)與算法—時(shí)間復(fù)雜度和空間復(fù)雜度

    目錄 1、什么是數(shù)據(jù)結(jié)構(gòu)? 2、什么是算法? 3、算法的復(fù)雜度 4、時(shí)間復(fù)雜度 (1) 時(shí)間復(fù)雜度的概念: ?(2) 大O的漸進(jìn)表示法:? 六個(gè)例題: (3)?時(shí)間復(fù)雜度對(duì)比:? 三個(gè)例題:? OJ題分析時(shí)間復(fù)雜度 5、空間復(fù)雜度 (1)常見復(fù)雜度對(duì)比 ?(2)OJ題分析空間復(fù)雜度 小結(jié) 數(shù)據(jù)結(jié)構(gòu) (D

    2024年02月07日
    瀏覽(28)
  • 數(shù)據(jù)結(jié)構(gòu)--算法的時(shí)間復(fù)雜度和空間復(fù)雜度

    數(shù)據(jù)結(jié)構(gòu)--算法的時(shí)間復(fù)雜度和空間復(fù)雜度

    算法效率是指 算法在計(jì)算機(jī)上運(yùn)行時(shí)所消耗的時(shí)間和資源 。這是衡量算法執(zhí)行速度和資源利用情況的重要指標(biāo)。 例子: 這是一個(gè)斐波那契函數(shù),用的是遞歸的計(jì)算方法,每次創(chuàng)建函數(shù)就會(huì)在棧區(qū)開辟一塊空間,遞歸次數(shù)越多,開辟空間越多; 所以, 代碼的簡潔說明不了算

    2024年02月15日
    瀏覽(20)
  • 數(shù)據(jù)結(jié)構(gòu)與算法-時(shí)間復(fù)雜度與空間復(fù)雜度

    數(shù)據(jù)結(jié)構(gòu)與算法-時(shí)間復(fù)雜度與空間復(fù)雜度

    數(shù)據(jù)結(jié)構(gòu)是計(jì)算機(jī)存儲(chǔ)、組織數(shù)據(jù)的方式,指相互之間存在一種或多種特定關(guān)系的數(shù)據(jù)元素的集合。 算法就是定義良好的計(jì)算過程,他取一個(gè)或一組的值為輸入,并產(chǎn)生一個(gè)或一組值作為輸出。簡單來說算法就是一系列的計(jì)算步驟,用來將輸入數(shù)據(jù)轉(zhuǎn)化成輸出結(jié)果。 算法在

    2024年02月07日
    瀏覽(21)
  • 【數(shù)據(jù)結(jié)構(gòu)和算法】時(shí)間復(fù)雜度和空間復(fù)雜度

    【數(shù)據(jù)結(jié)構(gòu)和算法】時(shí)間復(fù)雜度和空間復(fù)雜度

    目錄 ? 一、前言 二、時(shí)間復(fù)雜度 2.1時(shí)間復(fù)雜度表示形式 2.1.1規(guī)則: 3.1如何計(jì)算時(shí)間復(fù)雜度 3.1.1線性階 3.1.2平方階 3.1.3對(duì)數(shù)階 常見的時(shí)間復(fù)雜度排序: 三、空間復(fù)雜度 3.1Java的基本類型內(nèi)存占用 數(shù)據(jù)結(jié)構(gòu)和算法是程序的靈魂,這是某位程序員大佬所言,學(xué)習(xí)了這門,我們便可

    2023年04月09日
    瀏覽(24)
  • 【數(shù)據(jù)結(jié)構(gòu)與算法】1.時(shí)間復(fù)雜度和空間復(fù)雜度

    【數(shù)據(jù)結(jié)構(gòu)與算法】1.時(shí)間復(fù)雜度和空間復(fù)雜度

    ??博客主頁:愛敲代碼的小楊. ?專欄:《Java SE語法》 ??感謝大家點(diǎn)贊????收藏?評(píng)論???,您的三連就是我持續(xù)更新的動(dòng)力?? ??小楊水平有限,歡迎各位大佬指點(diǎn),相互學(xué)習(xí)進(jìn)步! 算法效率分為兩種:第一種是時(shí)間效率;第二種是空間效率。時(shí)間效率又稱為時(shí)間

    2024年01月20日
    瀏覽(23)
  • 【數(shù)據(jù)結(jié)構(gòu)與算法篇】時(shí)間復(fù)雜度與空間復(fù)雜度

    【數(shù)據(jù)結(jié)構(gòu)與算法篇】時(shí)間復(fù)雜度與空間復(fù)雜度

    ?? 目錄 一、數(shù)據(jù)結(jié)構(gòu)和算法 1.什么是數(shù)據(jù)結(jié)構(gòu)?? 2.什么是算法? 3.數(shù)據(jù)結(jié)構(gòu)和算法的重要性 二、算法的時(shí)間復(fù)雜度和空間復(fù)雜度 1.算法效率 2.算法的復(fù)雜度 3.復(fù)雜度在校招中的考察 4.時(shí)間復(fù)雜度 5.空間復(fù)雜度? 6.常見復(fù)雜度對(duì)比 7.復(fù)雜度的OJ練習(xí) ? ??內(nèi)容專欄:《數(shù)據(jù)結(jié)

    2023年04月24日
    瀏覽(44)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包