你能找到心儀的妹子嗎? 時間複雜度高階

2022-02-07 00:13:44 字數 2147 閱讀 2857

這個五一是個不平凡的五一,蒼老師成功誕下了雙胞胎。 

伴隨著你長大的「老師」都已經結婚生子,那麼你呢?你的愛情又在**?

假如有一天,有這樣乙個機會降臨到你的頭上。

你的面前是一條很長很長的路,這條路上齊刷刷的站滿了妹紙,沒錯,就是妹子,一雙雙大白腿閃閃發光。

此時你狠幸運,允許你從這些妹紙中選擇乙個最喜歡的帶走,,,

但是呢,有乙個條件,你只能從路的這頭走到那頭,只要你選擇了乙個妹子,就要離開這裡,這個過程中,你只能選擇一次,不可以走回頭路,只要你選擇了,那麼不管後面的妹子多誘人都已經和你無關。

這樣的選擇是不是像極了我們的人生?蘇格拉底曾說過,人生就是一次無法重複的選擇。

1

//grilsarr 表示所有妹子的集合2//

expect 表示是你想帶走的妹子

3function

findgirls(grilsarr,expect)

9return

null10}

11 }

上面**的含義是,遍歷整個grils陣列,乙個乙個的尋找妹子,如果找到了自己想要的,那麼帶上走人,如果很不幸,到最後你都沒能找到,那麼返回null。

按照上篇文章中的分析,上面**的時間複雜度為o(n) 。

如果事情是這樣發展的,當你見到第一位妹子的時候,就驚呼「哇,長得好像蒼老師!」,你們一見鐘情,確認過眼神,她就是我想要的人。

那麼恭喜你,這種情況迴圈只執行了一次,時間複雜度是常數階o(1),像這種在最理想的情況下,執行這段**的時間複雜度,我們就稱之為最好情況下的時間複雜度

有最好的情況,就有最差的情況,如果你一直猶豫,一直貪心,總覺得後面會有更好的,到最後,你又都覺得不如之前的適合自己,最終到了最後乙個妹子,你也沒能選出自己喜歡的人,最終空手而歸。(這種人,活該單身啊~)

這種情況就需要遍歷全部的陣列,時間複雜度為o(n)。 像這種在最糟糕的情況下,執行這段**的時間複雜度,我們就稱之為最壞情況下的時間複雜度

上面說的兩種情況,都是比較極端的情況,發生的概率極低,無法用來表示平均情況。

介紹平均情況時間複雜度之前,先帶大家複習乙個數學知識點: 加權平均值。

上面我們可以帶走乙個妹子,選妹子的時候一定會綜合評估這個妹子是否是自己想要的人,假設從以下幾個方面來給妹子打分,每個考察項的權重如下

1. 顏值 佔60%

2. 身材 佔20%

3. 氣質 佔15%

4. 性格 佔5%

每一項我們都以百分制來計算,現在有這個妹子的分數如下

1. 顏值 90分

2. 身材 80分

3. 氣質 70分

4. 性格 10分

那麼這個妹子加權處理後的最終得分是 90×60%+80×20%+70×15%+10×5%=81 分

平均情況時間複雜度就是對所有可能出現的執**況,根據其權重進行加權平均計算出的時間複雜度。 接下來,我們分析一下findgrils方法的平均時間複雜度。 選擇妹子一共有 n+1情況,分別是選擇了第1-n個(對應陣列的下標0-n-1)妹子中的乙個和沒有找到妹子。

我相信大部分男同胞們選擇的話,大概率會選擇出自己喜歡妹子,最終抱得美人歸。為了便於理解,我們就假設能選擇到喜歡妹子的概率是90%,空手而歸的概率是10%。

在能選擇到妹子的情況下,選擇了第1到第n個的概率是相同的,為1/n。 畫個**看看每種情況下的概率。

選擇第n個妹子

陣列下標

迴圈次數概率1

011/nx90%21

21/nx90%32

31/nx90%

......

......

nn-1

n1/nx90%

-1-1

nnx10%

所以加權後的時間複雜度為

t(n)= 1 x 1/n*90% + 2 x 1/n*90% + 3 x  1/n*90% + n x 10% = 0.55n + 0.45
所以最終計算的平均情況時間複雜度為o(n)

對於同一段**在不同情況下會有不同量級複雜度的情況,最好、最壞、平均情況時間複雜度概念的引入能夠幫助我們更好的分析演算法的效率。

你能找到心儀的妹子嗎? 時間複雜度高階

這個五一是個不平凡的五一,蒼老師成功誕下了雙胞胎。這樣的選擇是不是像極了我們的人生?蘇格拉底曾說過,人生就是一次無法重複的選擇。grilsarr 表示所有妹子的集合 expect 表示是你想帶走的妹子 function findgirls grilsarr,expect return null 複製...

演算法的複雜度 時間複雜度與空間複雜度

通常,對於乙個給定的演算法,我們要做 兩項分析。第一是從數學上證明演算法的正確性,這一步主要用到形式化證明的方法及相關推理模式,如迴圈不變式 數學歸納法等。而在證明演算法是正確的基礎上,第二步就是分析演算法的時間複雜度。演算法的時間複雜度反映了程式執行時間隨輸入規模增長而增長的量級,在很大程度上能很...

演算法的時間複雜度 空間複雜度

時間複雜度和空間複雜度是度量演算法效率的常用指標 事後統計,不常用 事前統計影響因素 演算法策略 問題規模 程式語言 質量 機器執行指令的速度 撇開軟硬體的影響,演算法執行工作量的大小只依賴於問題的規模 通常用整數n表示 乙個演算法是由控制結構 順序,分支,迴圈三種 和原操作 指固有資料型別的操作 ...