91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

好好分析一下如何求遞歸算法的時間復(fù)雜度

算法與數(shù)據(jù)結(jié)構(gòu) ? 來源:代碼隨想錄 ? 作者:程序員Carl ? 2022-07-13 11:29 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

相信很多同學(xué)對遞歸算法的時間復(fù)雜度都很模糊,那么這篇來給大家通透的講一講。

同一道題目,同樣使用遞歸算法,有的同學(xué)會寫出了O(n)的代碼,有的同學(xué)就寫出了O(logn)的代碼。

這是為什么呢?

如果對遞歸的時間復(fù)雜度理解的不夠深入的話,就會這樣!

那么我通過一道簡單的面試題,模擬面試的場景,來帶大家逐步分析遞歸算法的時間復(fù)雜度,最后找出最優(yōu)解,來看看同樣是遞歸,怎么就寫成了O(n)的代碼。

面試題:求x的n次方

想一下這么簡單的一道題目,代碼應(yīng)該如何寫呢。最直觀的方式應(yīng)該就是,一個for循環(huán)求出結(jié)果,代碼如下:

intfunction1(intx,intn){
intresult=1;//注意任何數(shù)的0次方等于1
for(inti=0;i

時間復(fù)雜度為O(n),此時面試官會說,有沒有效率更好的算法呢。

如果此時沒有思路,不要說:我不會,我不知道了等等

可以和面試官探討一下,詢問:“可不可以給點(diǎn)提示”。面試官提示:“考慮一下遞歸算法”。

那么就可以寫出了如下這樣的一個遞歸的算法,使用遞歸解決了這個問題。

intfunction2(intx,intn){
if(n==0){
return1;//return1同樣是因?yàn)?次方是等于1的
}
returnfunction2(x,n-1)*x;
}

面試官問:“那么這個代碼的時間復(fù)雜度是多少?”。

一些同學(xué)可能一看到遞歸就想到了O(logn),其實(shí)并不是這樣,遞歸算法的時間復(fù)雜度本質(zhì)上是要看:遞歸的次數(shù) * 每次遞歸中的操作次數(shù)。

那再來看代碼,這里遞歸了幾次呢?

每次n-1,遞歸了n次時間復(fù)雜度是O(n),每次進(jìn)行了一個乘法操作,乘法操作的時間復(fù)雜度一個常數(shù)項(xiàng)O(1),所以這份代碼的時間復(fù)雜度是 n * 1 = O(n)。

這個時間復(fù)雜度就沒有達(dá)到面試官的預(yù)期。于是又寫出了如下的遞歸算法的代碼:

intfunction3(intx,intn){
if(n==0){
return1;
}
if(n%2==1){
returnfunction3(x,n/2)*function3(x,n/2)*x;
}
returnfunction3(x,n/2)*function3(x,n/2);
}

面試官看到后微微一笑,問:“這份代碼的時間復(fù)雜度又是多少呢?” 此刻有些同學(xué)可能要陷入了沉思了。

我們來分析一下,首先看遞歸了多少次呢,可以把遞歸抽象出一顆滿二叉樹。剛剛同學(xué)寫的這個算法,可以用一顆滿二叉樹來表示(為了方便表示,選擇n為偶數(shù)16),如圖:

pYYBAGLOPHOADNe1AAEQVirlC3Q595.jpg

當(dāng)前這顆二叉樹就是求x的n次方,n為16的情況,n為16的時候,進(jìn)行了多少次乘法運(yùn)算呢?

這棵樹上每一個節(jié)點(diǎn)就代表著一次遞歸并進(jìn)行了一次相乘操作,所以進(jìn)行了多少次遞歸的話,就是看這棵樹上有多少個節(jié)點(diǎn)。

熟悉二叉樹話應(yīng)該知道如何求滿二叉樹節(jié)點(diǎn)數(shù)量,這顆滿二叉樹的節(jié)點(diǎn)數(shù)量就是2^3 + 2^2 + 2^1 + 2^0 = 15,可以發(fā)現(xiàn):這其實(shí)是等比數(shù)列的求和公式,這個結(jié)論在二叉樹相關(guān)的面試題里也經(jīng)常出現(xiàn)。

這么如果是求x的n次方,這個遞歸樹有多少個節(jié)點(diǎn)呢,如下圖所示:(m為深度,從0開始)

fc93b21c-025a-11ed-ba43-dac502259ad0.png

時間復(fù)雜度忽略掉常數(shù)項(xiàng)-1之后,這個遞歸算法的時間復(fù)雜度依然是O(n)。對,你沒看錯,依然是O(n)的時間復(fù)雜度!

此時面試官就會說:“這個遞歸的算法依然還是O(n)啊”, 很明顯沒有達(dá)到面試官的預(yù)期。

那么O(logn)的遞歸算法應(yīng)該怎么寫呢?

想一想剛剛給出的那份遞歸算法的代碼,是不是有哪里比較冗余呢,其實(shí)有重復(fù)計(jì)算的部分。

于是又寫出如下遞歸算法的代碼:

intfunction4(intx,intn){
if(n==0){
return1;
}
intt=function4(x,n/2);//這里相對于function3,是把這個遞歸操作抽取出來
if(n%2==1){
returnt*t*x;
}
returnt*t;
}

再來看一下現(xiàn)在這份代碼時間復(fù)雜度是多少呢?

依然還是看他遞歸了多少次,可以看到這里僅僅有一個遞歸調(diào)用,且每次都是n/2 ,所以這里我們一共調(diào)用了log以2為底n的對數(shù)次。

每次遞歸了做都是一次乘法操作,這也是一個常數(shù)項(xiàng)的操作,那么這個遞歸算法的時間復(fù)雜度才是真正的O(logn)

此時大家最后寫出了這樣的代碼并且將時間復(fù)雜度分析的非常清晰,相信面試官是比較滿意的。

總結(jié)

對于遞歸的時間復(fù)雜度,畢竟初學(xué)者有時候會迷糊,刷過很多題的老手依然迷糊。

本篇我用一道非常簡單的面試題目:求x的n次方,來逐步分析遞歸算法的時間復(fù)雜度,注意不要一看到遞歸就想到了O(logn)!

同樣使用遞歸,有的同學(xué)可以寫出O(logn)的代碼,有的同學(xué)還可以寫出O(n)的代碼。

對于function3 這樣的遞歸實(shí)現(xiàn),很容易讓人感覺這是O(logn)的時間復(fù)雜度,其實(shí)這是O(n)的算法!

intfunction3(intx,intn){
if(n==0){
return1;
}
if(n%2==1){
returnfunction3(x,n/2)*function3(x,n/2)*x;
}
returnfunction3(x,n/2)*function3(x,n/2);
}

可以看出這道題目非常簡單,但是又很考究算法的功底,特別是對遞歸的理解,這也是我面試別人的時候用過的一道題,所以整個情景我才寫的如此逼真,哈哈。

大廠面試的時候最喜歡用“簡單題”來考察候選人的算法功底,注意這里的“簡單題”可并不一定真的簡單哦!

如果認(rèn)真讀完本篇,相信大家對遞歸算法的有一個新的認(rèn)識的,同一道題目,同樣是遞歸,效率可是不一樣的!



審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 算法
    +關(guān)注

    關(guān)注

    23

    文章

    4784

    瀏覽量

    98102
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    數(shù)字濾波算法的在線電弱點(diǎn)測試儀:復(fù)雜電路環(huán)境的干擾信號剔除與檢測精度提升

    。數(shù)字濾波算法的引入,為解決這問題提供了核心技術(shù)支撐,成為提升測試儀在復(fù)雜場景適應(yīng)性與檢測可靠性的關(guān)鍵。? 復(fù)雜電路環(huán)境中的干擾信號具有
    的頭像 發(fā)表于 01-09 09:29 ?251次閱讀
    數(shù)字濾波<b class='flag-5'>算法</b>的在線電弱點(diǎn)測試儀:<b class='flag-5'>復(fù)雜</b>電路環(huán)境<b class='flag-5'>下</b>的干擾信號剔除與檢測精度提升

    電能質(zhì)量在線監(jiān)測裝置支持密碼復(fù)雜度要求嗎?

    標(biāo)準(zhǔn)(如 IEC 62351、GB/T 36572《工業(yè)控制系統(tǒng)信息安全 網(wǎng)絡(luò)和系統(tǒng)安全》)。以下是具體支持情況、核心功能及應(yīng)用細(xì)節(jié): 、密碼復(fù)雜度的核心支持范圍(按優(yōu)先級排序) 1. 基礎(chǔ)復(fù)雜度要求(多數(shù)裝置標(biāo)配)
    的頭像 發(fā)表于 12-12 11:07 ?598次閱讀

    免停電接線的電能質(zhì)量在線監(jiān)測裝置的安裝和調(diào)試復(fù)雜嗎?

    操作門檻,具體難度因電壓等級與現(xiàn)場條件而異。 、安裝環(huán)節(jié)的復(fù)雜度分析 安裝難度核心取決于 電壓等級 和 現(xiàn)場預(yù)留條件 ,整體可分為 “低壓簡易安裝” 和 “中高壓專業(yè)安裝” 兩類: 1. 低壓系統(tǒng)(0.4kV/380V):安裝
    的頭像 發(fā)表于 12-05 18:00 ?3719次閱讀
    免停電接線的電能質(zhì)量在線監(jiān)測裝置的安裝和調(diào)試<b class='flag-5'>復(fù)雜</b>嗎?

    支付寶“碰一下”的革新背后:國民技術(shù)MCU的隱形力量

    該類別中唯的中國企業(yè)。短短兩個月內(nèi),“碰一下”已連續(xù)獲得三項(xiàng)國際獎項(xiàng)。此前,在國際權(quán)威市場調(diào)研機(jī)構(gòu)JuniperResearch公布的2025年“未來數(shù)字獎”
    的頭像 發(fā)表于 11-21 19:15 ?1355次閱讀
    支付寶“碰<b class='flag-5'>一下</b>”的革新背后:國民技術(shù)MCU的隱形力量

    程序運(yùn)行慢,是否需檢查算法時間復(fù)雜度過高?

    程序運(yùn)行慢,需檢查算法時間復(fù)雜度是否過高?
    發(fā)表于 11-17 08:08

    復(fù)雜的軟件算法硬件IP核的實(shí)現(xiàn)

    關(guān)系的“硬件匯編”語言,即 Hardware Assembly(HASM),第二步就將 HASM 文本描述的具體邏輯實(shí)現(xiàn)直接翻譯成 HDL 文本。在這里主要分享一下 HASM 以及 C to HAL
    發(fā)表于 10-30 07:02

    AES和SM4算法的可重構(gòu)分析

    、AES和SM4算法特點(diǎn)分析 基于前面幾篇分享,我們對AES和SM4的算法流程有了較為清晰的認(rèn)識,接下來對AES和SM4算法的共同點(diǎn)進(jìn)行
    發(fā)表于 10-23 07:26

    NTT設(shè)計(jì)介紹

    位去乘以另個數(shù)據(jù)的每位,其算法時間復(fù)雜度為。NTT可以看作是定義在有限域上的快速傅里葉變換,算法
    發(fā)表于 10-22 06:05

    DFT算法與FFT算法的優(yōu)劣分析

    算法之間有什么不同,采用相關(guān)算法的依據(jù)。下面就來介紹一下兩種算法的不同以及適用的些場合。 DFT算法
    的頭像 發(fā)表于 08-04 09:30 ?1452次閱讀

    “碰一下”支付終端應(yīng)用在酒店:智能無卡入住與客房控制

    “碰一下”支付終端和“碰一下”支付機(jī)具今年已在各種餐飲零售門店推廣應(yīng)用。就連天波小編家附近的村口小超市也用上了“碰一下”支付終端。近日,鹵味龍頭企業(yè)絕味食品宣布,全國門店將接入“支付寶碰一下
    的頭像 發(fā)表于 07-04 09:57 ?843次閱讀
    “碰<b class='flag-5'>一下</b>”支付終端應(yīng)用在酒店:智能無卡入住與客房控制

    鴻蒙5開發(fā)寶藏案例分享---Web頁面內(nèi)點(diǎn)擊響應(yīng)時延分析

    ); // 遞歸地獄! } 優(yōu)化方案 → 改用循環(huán)(時間復(fù)雜度O(n)): function myFun2(n) { let [a, b] = [0, 1]; for (let i = 0; i
    發(fā)表于 06-12 17:09

    蘇州高美達(dá)選購我司HS-TGA-101熱重分析

    在材料研究與生產(chǎn)領(lǐng)域,精準(zhǔn)分析材料熱性能至關(guān)重要。蘇州高美達(dá)公司經(jīng)過多方調(diào)研與嚴(yán)格測試,最終選定我司的HS-TGA-101熱重分析儀,為其材料研發(fā)與質(zhì)量把控注入強(qiáng)大助力。蘇州高美達(dá)
    的頭像 發(fā)表于 06-12 09:47 ?862次閱讀
    蘇州高<b class='flag-5'>求</b>美達(dá)選購我司HS-TGA-101熱重<b class='flag-5'>分析</b>儀

    ADIN2111集成10BASE-T1L PHY的低復(fù)雜度、2端口以太網(wǎng)交換機(jī)技術(shù)手冊

    ADIN2111是款低功耗、低復(fù)雜度、雙以太網(wǎng)端口交換機(jī),它集成了10BASE-T1L PHY和個串行外設(shè)接口(SPI)端口。該器件使用低功率受限節(jié)點(diǎn),面向工業(yè)以太網(wǎng)應(yīng)用且符合IEEE
    的頭像 發(fā)表于 05-15 11:41 ?2209次閱讀
    ADIN2111集成10BASE-T1L PHY的低<b class='flag-5'>復(fù)雜度</b>、2端口以太網(wǎng)交換機(jī)技術(shù)手冊

    時間間隔測量分析儀特點(diǎn)總結(jié)

    時間頻率行業(yè),時間間隔測量是不可缺少的部分,選擇款合適的時間間隔測量儀就會顯得尤為重要,今天我們來
    的頭像 發(fā)表于 05-08 11:29 ?543次閱讀
    <b class='flag-5'>時間</b>間隔測量<b class='flag-5'>分析</b>儀特點(diǎn)總結(jié)

    tcl羅格朗樓道聲光開關(guān)電路圖太復(fù)雜了,請高手幫忙分析一下電路圖的控制原理?

    上圖是我自己根據(jù)tcl羅格朗樓道聲光開關(guān)實(shí)物畫的電路圖,太復(fù)雜了,請高手幫忙分析一下電路圖的控制原理?或者發(fā)份原廠電路圖及分析?謝謝!
    發(fā)表于 03-15 18:33