chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

如何求遞歸算法的時(shí)間復(fù)雜度

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

掃碼添加小助手

加入工程師交流群

本篇通過一道面試題,一個(gè)面試場景,來好好分析一下如何求遞歸算法的時(shí)間復(fù)雜度。

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

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

這是為什么呢?

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

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

面試題:求x的n次方

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

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

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

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

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

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

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

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

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

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

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

這個(gè)時(shí)間復(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);
}

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

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

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

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

這棵樹上每一個(gè)節(jié)點(diǎn)就代表著一次遞歸并進(jìn)行了一次相乘操作,所以進(jìn)行了多少次遞歸的話,就是看這棵樹上有多少個(gè)節(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ù)列的求和公式,這個(gè)結(jié)論在二叉樹相關(guān)的面試題里也經(jīng)常出現(xiàn)。

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

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

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

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

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

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

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

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

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

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

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

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

總結(jié)

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

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

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

對于function3 這樣的遞歸實(shí)現(xiàn),很容易讓人感覺這是O(logn)的時(shí)間復(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);
}

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

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

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

原文標(biāo)題:關(guān)于遞歸算法的時(shí)間復(fù)雜度,你還不夠了解

文章出處:【微信公眾號:算法與數(shù)據(jù)結(jié)構(gòu)】歡迎添加關(guān)注!文章轉(zhuǎ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)注

    30

    文章

    4922

    瀏覽量

    72241
  • 二叉樹
    +關(guān)注

    關(guān)注

    0

    文章

    74

    瀏覽量

    12818

原文標(biāo)題:關(guān)于遞歸算法的時(shí)間復(fù)雜度,你還不夠了解

文章出處:【微信號:TheAlgorithm,微信公眾號:算法與數(shù)據(jù)結(jié)構(gòu)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

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

    無線通信模塊助油庫監(jiān)測:穩(wěn)傳液位信號,降布線復(fù)雜度與風(fēng)險(xiǎn)

    一、場景實(shí)施背景及項(xiàng)目痛點(diǎn) 客戶需通過三處中控室實(shí)時(shí)監(jiān)測油庫罐體閥門的液位開關(guān)信號,但油庫屬易燃易爆環(huán)境,傳統(tǒng)布線存在高安全風(fēng)險(xiǎn),且因罐體管道布局復(fù)雜導(dǎo)致布線難度大、成本高,后期維護(hù)也不便,易
    的頭像 發(fā)表于 09-12 11:21 ?317次閱讀
    無線通信模塊助油庫監(jiān)測:穩(wěn)傳液位信號,降布線<b class='flag-5'>復(fù)雜度</b>與風(fēng)險(xiǎn)

    電能質(zhì)量在線監(jiān)測裝置的精度等級和準(zhǔn)確的關(guān)系是否受測量參數(shù)的影響?

    電能質(zhì)量在線監(jiān)測裝置的精度等級和準(zhǔn)確的關(guān)系 會顯著受測量參數(shù)影響 ,核心原因在于:不同電能質(zhì)量參數(shù)(如電壓有效值、諧波、閃變、暫升 / 暫降)的 測量原理復(fù)雜度、硬件依賴、算法要求
    的頭像 發(fā)表于 09-12 10:02 ?349次閱讀
    電能質(zhì)量在線監(jiān)測裝置的精度等級和準(zhǔn)確<b class='flag-5'>度</b>的關(guān)系是否受測量參數(shù)的影響?

    時(shí)間同步設(shè)備在復(fù)雜網(wǎng)絡(luò)環(huán)境中的調(diào)試要點(diǎn)

    時(shí)間同步設(shè)備是保障網(wǎng)絡(luò)系統(tǒng)協(xié)同運(yùn)行的基礎(chǔ)設(shè)施,尤其在金融、電力、通信等領(lǐng)域?qū)纫筝^高的場景中,其穩(wěn)定性直接影響業(yè)務(wù)連續(xù)性。在實(shí)際部署中,網(wǎng)絡(luò)環(huán)境的復(fù)雜性常給同步精度帶來挑戰(zhàn)。本文將分享幾個(gè)調(diào)試過程中的經(jīng)驗(yàn)要點(diǎn)。
    的頭像 發(fā)表于 08-13 15:48 ?198次閱讀
    <b class='flag-5'>時(shí)間</b>同步設(shè)備在<b class='flag-5'>復(fù)雜</b>網(wǎng)絡(luò)環(huán)境中的調(diào)試要點(diǎn)

    LABVIEW遞歸獲取列表顯示到樹形結(jié)構(gòu)

    我這個(gè)遞歸我邏輯沒問題啊!我斷點(diǎn)調(diào)試看了,是因?yàn)橹厝隫I執(zhí)行沒有把樹形結(jié)構(gòu)里面節(jié)點(diǎn)傳入到下一個(gè)遞歸調(diào)用,進(jìn)入重調(diào)用的時(shí)候我看了樹形結(jié)構(gòu)里面節(jié)點(diǎn)是空的。第一次寫入的節(jié)點(diǎn)并沒有傳入到下一次遞歸。 反正很
    發(fā)表于 08-07 17:59

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

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

    AI時(shí)代下芯片復(fù)雜度飆升,思爾芯國產(chǎn)硬件仿真加速芯片創(chuàng)新

    引言在人工智能(AI)技術(shù)蓬勃發(fā)展的今天,芯片的復(fù)雜度正以前所未有的速度飆升,輕松跨越了百億邏輯門級別的大關(guān)。這一趨勢不僅推動(dòng)了半導(dǎo)體行業(yè)的快速發(fā)展,也對硬件仿真系統(tǒng)提出了更高的挑戰(zhàn)和要求。在近日
    的頭像 發(fā)表于 12-27 18:01 ?1038次閱讀
    AI時(shí)代下芯片<b class='flag-5'>復(fù)雜度</b>飆升,思爾芯國產(chǎn)硬件仿真加速芯片創(chuàng)新

    芯片設(shè)計(jì)復(fù)雜度劇增,紫光芯片云 3.0 助力企業(yè)搭建專業(yè)設(shè)計(jì)環(huán)境

    。 ? 實(shí)際上,國內(nèi)中小IC設(shè)計(jì)企業(yè)居多,而如今他們面臨更加復(fù)雜的設(shè)計(jì)需求。隨著芯片制程和規(guī)模要求不斷提高,芯片設(shè)計(jì)環(huán)境所需資源越來越大,設(shè)計(jì)環(huán)境構(gòu)建更加復(fù)雜,初創(chuàng)企業(yè)如何搭建設(shè)計(jì)環(huán)境,中小企業(yè)如何在人員經(jīng)驗(yàn)欠缺的情況下完成有效布局,又如
    的頭像 發(fā)表于 12-26 17:04 ?1798次閱讀
    芯片設(shè)計(jì)<b class='flag-5'>復(fù)雜度</b>劇增,紫光芯片云 3.0 助力企業(yè)搭建專業(yè)設(shè)計(jì)環(huán)境

    智能工具視頻特輯上線!5分鐘速通AI視覺算法方案和模型構(gòu)建

    、多、雜,這往往需要多個(gè)算法模塊的協(xié)同作業(yè),AI算法方案的復(fù)雜度極高。在實(shí)際操作中,常常會遇到工程數(shù)量龐大、模塊管理混亂、結(jié)果匯總困難等問題,這無疑進(jìn)一步加大了開
    的頭像 發(fā)表于 12-26 16:54 ?1086次閱讀
    智能工具視頻特輯上線!5分鐘速通AI視覺<b class='flag-5'>算法</b>方案和模型構(gòu)建

    【「從算法到電路—數(shù)字芯片算法的電路實(shí)現(xiàn)」閱讀體驗(yàn)】+內(nèi)容簡介

    內(nèi)容簡介這是一本深入解讀基礎(chǔ)算法及其電路設(shè)計(jì),以打通算法研發(fā)到數(shù)字IC設(shè)計(jì)的實(shí)現(xiàn)屏障,以及指導(dǎo)芯片設(shè)計(jì)工程師從底層掌握復(fù)雜電路設(shè)計(jì)與優(yōu)化方法為目標(biāo)的專業(yè)技術(shù)書。任何芯片(如WiFi芯片、5G芯片
    發(fā)表于 11-21 17:14

    【「從算法到電路—數(shù)字芯片算法的電路實(shí)現(xiàn)」閱讀體驗(yàn)】+介紹基礎(chǔ)硬件算法模塊

    可能面臨無模塊可買、無高端技術(shù)可用的窘境;另一方面,著對較為復(fù)雜的核心設(shè)計(jì)進(jìn)行攻關(guān),產(chǎn)品生產(chǎn)廠商也對國產(chǎn)自主研發(fā)芯片有更大的包容和替代意愿。斷供和提價(jià)的壓力。于是形成了一個(gè)前所未有的窗口期,芯片廠商有
    發(fā)表于 11-21 17:05

    如何使用RNN進(jìn)行時(shí)間序列預(yù)測

    時(shí)間序列預(yù)測在金融、氣象、銷售預(yù)測等領(lǐng)域有著廣泛的應(yīng)用。傳統(tǒng)的時(shí)間序列分析方法,如ARIMA和指數(shù)平滑,雖然在某些情況下表現(xiàn)良好,但在處理非線性和復(fù)雜模式時(shí)可能不夠靈活。遞歸神經(jīng)網(wǎng)絡(luò)(
    的頭像 發(fā)表于 11-15 09:45 ?1184次閱讀

    NPU與機(jī)器學(xué)習(xí)算法的關(guān)系

    在人工智能領(lǐng)域,機(jī)器學(xué)習(xí)算法是實(shí)現(xiàn)智能系統(tǒng)的核心。隨著數(shù)據(jù)量的激增和算法復(fù)雜度的提升,對計(jì)算資源的需求也在不斷增長。NPU作為一種專門為深度學(xué)習(xí)等機(jī)器學(xué)習(xí)任務(wù)設(shè)計(jì)的處理器,其與機(jī)器學(xué)習(xí)算法
    的頭像 發(fā)表于 11-15 09:19 ?1670次閱讀

    華納云:Chord算法如何管理節(jié)點(diǎn)間的聯(lián)系?

    ,以確保網(wǎng)絡(luò)變化時(shí)后繼關(guān)系的正確性。 查找效率: Chord算法通過finger表和后繼指針的設(shè)計(jì),使得查找操作的平均時(shí)間復(fù)雜度為O(log n),其中n是網(wǎng)絡(luò)中的節(jié)點(diǎn)數(shù)量。 通過這些機(jī)制,Chord
    發(fā)表于 11-08 16:03

    簡潔至上——探索產(chǎn)品與技術(shù)的優(yōu)雅原則

    ,將復(fù)雜的邏輯轉(zhuǎn)化為直觀、易用的用戶功能,并將冗長、難以維護(hù)的代碼結(jié)構(gòu)變?yōu)楹啙?、效率高的形式?在《人月神話》中作者提到,軟件開發(fā)的復(fù)雜度可以劃分為本質(zhì)復(fù)雜度和偶然復(fù)雜度。 本質(zhì)
    的頭像 發(fā)表于 10-25 11:12 ?1289次閱讀
    簡潔至上——探索產(chǎn)品與技術(shù)的優(yōu)雅原則

    時(shí)間復(fù)雜度為 O(n^2) 的排序算法

    作者:京東保險(xiǎn) 王奕龍 對于小規(guī)模數(shù)據(jù),我們可以選用時(shí)間復(fù)雜度為 O(n2) 的排序算法。因?yàn)?b class='flag-5'>時(shí)間復(fù)雜度并不代表實(shí)際代碼的執(zhí)行
    的頭像 發(fā)表于 10-19 16:31 ?1928次閱讀
    <b class='flag-5'>時(shí)間</b><b class='flag-5'>復(fù)雜度</b>為 O(n^2) 的排序<b class='flag-5'>算法</b>