中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C語言數據結構與算法時間空間復雜度實例分析

發布時間:2022-02-15 16:18:57 來源:億速云 閱讀:104 作者:iii 欄目:開發技術

這篇文章主要介紹“C語言數據結構與算法時間空間復雜度實例分析”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“C語言數據結構與算法時間空間復雜度實例分析”文章能幫助大家解決問題。

時間復雜度

來看第一個:

long Func(n)
{
return n<2?n:Func(n-1)*n ;
}

我們求遞歸階乘Func的時間復雜度,說里面 n 最后要到1,我們可以認為遞歸了多少次就他就計算了多少次,我們稍加思索就可以看出他的時間復雜度是 O(N)。嚴格來說,遞歸算法怎么計算呢?

是遞歸次數 &times; 每次遞歸的函數的次數

這個每次遞歸函數的次數是個什么鬼呢?我們的三目操作符在遞歸中每次會走一次,也就是這個函數會出現一次,就是所謂的常數次嘛 O(1),遞歸了n次,自然就是O(N)了。如果我再在前面加上個 while(n&ndash;),又是一個執行n次的循環,相當于是在嵌套循環了,這是復雜度就是里外都O(N),為O(N^2)。

再來

long Func(n)
{
return n<2?n:Func(n-1)+(n-2); 
}

這是斐波那契的遞歸數列,乍一看和上面的階乘沒太大區別,還是在算他遞歸了多少次,但是這下可沒那么好算了捏。這時我們可以拿起筆畫一畫多半就有個譜了

C語言數據結構與算法時間空間復雜度實例分析

最后結果一定會讓n走到 1,這個是總數的 n ,2^n的 n 只是一個參數,會發現每一層都會滿足等比數列關系,有 2的(n-1)次方的累加 = 2的n次方 - 1,這里1可以忽略就是2的n次方。

但是!完了嗎?我們格局打開

這里的-1,是要每一層都是滿的才滿足,但是實際上不滿,我們 n,n-1,n-2&hellip;&hellip;最后是1沒毛病;我們到其他路線上,n-2,n-3,n-4&hellip;&hellip;壓根兒到不了最后一行,在他頭上提早結束,后面的同理,也就是說我們整個流程圖在后面會有一大坨空白部分,沒有調用次數捏。但是!就算缺吧,這些漏網份子依然相對于整體而言非常的小,影響不大,估算角度他依然是2^n。

其實際圖像應該是個三角形:

C語言數據結構與算法時間空間復雜度實例分析

格局繼續打開

那么如果是2的n次方,那么你將見證一個計算時間復雜度的極端,要知道算法中二分查找是非常快的,要在10億對象中找一個只需要 log2^1000000000,即30秒左右。

但是上面的斐波那契運行起來可謂慢的令人發指,我在之前在學習C語言遞歸時就在vs2019上試過,當n = 10時,1000次,小兒科秒出;n = 30時,十億次,很快啊,看來CPU是有備而來,n = 50時,可以說久了去了,整個程序沒有卡死勝似卡死。

看看咱CPU運行速度是多少赫茲可以換算運行速度,一般民用配置高一點點的能達到一秒十億次計算,別看n只是漲了一點點,電腦壽命夠長就給n整個80,你的壽命夠長就可以給n整個100。

我們使用遞歸搞斐波那契會有許多重復,我們改進一下:

# include<stdio.h>
# include<malloc.h>
long long*Func(n)
{
long long* Farr= malloc(sizeof(long long)*(n+1));
Farr[0] = 0;
if(n==0)  // 防止n=0時發生越界
{
return Farr;
}
Farr[1] = 1;
}

這個算法就是有前面就能推后面,再看看時間復雜度是O(N),這個優化簡直就是質的優化,這個思想就是以空間換時間,開了一個數組,都用了空間,但是性能更快了。

空間復雜度

說是空間復雜度,和空間也不沾關系,他計算的是大概定義的變量的個數,實際意義里面就算是結構體大不了你幾十個字節嘛,也沒必要去整爛活搞幾萬個字節出來。我小小 8個G,幾十億字節,你占用我幾字節,幾百字節,幾千字節我壓根兒不甩你,所以為什么不談空間大小談個數。

可能如今就只有嵌入式比較介意空間,因為嵌入式通常是在一些設備上面,舉個栗子就是我們常見的智能居家AI,一個吸塵器機器人會用到的探測器算法,內存條占用多了機器咋安是吧,不是內存貴是空間有限

我們就拿剛剛的階乘來說,從n開始,會建立一個棧幀,每調用一次遞歸就要創建一個棧幀,每個棧幀里面空間是常數個,調用了n次,那么空間復雜度就是常數&times;n為O(N)。

關于“C語言數據結構與算法時間空間復雜度實例分析”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

嫩江县| 清流县| 江津市| 阜平县| 琼结县| 大荔县| 巨野县| 饶阳县| 浦县| 赣榆县| 雷波县| 柳河县| 罗甸县| 海淀区| 金坛市| 吉水县| 恩平市| 汉川市| 沁阳市| 宜阳县| 樟树市| 凌海市| 呼玛县| 新巴尔虎右旗| 崇阳县| 延津县| 南汇区| 宜兰县| 中西区| 甘孜县| 仙桃市| 崇礼县| 都江堰市| 泗阳县| 托里县| 嵊泗县| 巩留县| 瑞金市| 昭觉县| 体育| 包头市|