精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

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

開發(fā) 前端 算法
本篇通過一道面試題,一個(gè)面試場(chǎng)景,來好好分析一下如何求遞歸算法的時(shí)間復(fù)雜度。相信很多同學(xué)對(duì)遞歸算法的時(shí)間復(fù)雜度都很模糊,那么這篇Carl來給大家通透的講一講。

[[414048]]

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

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

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

這是為什么呢?

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

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

面試題:求x的n次方

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

  1. int function1(int x, int n) { 
  2.     int result = 1;  // 注意 任何數(shù)的0次方等于1 
  3.     for (int i = 0; i < n; i++) { 
  4.         result = result * x; 
  5.     } 
  6.     return result; 

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

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

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

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

  1. int function2(int x, int n) { 
  2.     if (n == 0) { 
  3.         return 1; // return 1 同樣是因?yàn)?次方是等于1的 
  4.     } 
  5.     return function2(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ù)期。于是又寫出了如下的遞歸算法的代碼:

  1. int function3(int x, int n) { 
  2.     if (n == 0) { 
  3.         return 1; 
  4.     } 
  5.     if (n % 2 == 1) { 
  6.         return function3(x, n / 2) * function3(x, n / 2)*x; 
  7.     } 
  8.     return function3(x, n / 2) * function3(x, n / 2); 

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

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

圖片

當(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開始)

圖片

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

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

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

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

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

  1. int function4(int x, int n) { 
  2.     if (n == 0) { 
  3.         return 1; 
  4.     } 
  5.     int t = function4(x, n / 2);// 這里相對(duì)于function3,是把這個(gè)遞歸操作抽取出來 
  6.     if (n % 2 == 1) { 
  7.         return t * t * x; 
  8.     } 
  9.     return t * t; 

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

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

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

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

總結(jié)

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

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

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

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

  1. int function3(int x, int n) { 
  2.     if (n == 0) { 
  3.         return 1; 
  4.     } 
  5.     if (n % 2 == 1) { 
  6.         return function3(x, n / 2) * function3(x, n / 2)*x; 
  7.     } 
  8.     return function3(x, n / 2) * function3(x, n / 2); 

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

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

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

 

責(zé)任編輯:姜華 來源: 代碼隨想錄
相關(guān)推薦

2021-01-05 10:41:42

算法時(shí)間空間

2024-04-25 08:33:25

算法時(shí)間復(fù)雜度空間復(fù)雜度

2019-11-18 12:41:35

算法Python計(jì)算復(fù)雜性理論

2009-07-09 10:45:16

C#基本概念復(fù)雜度遞歸與接口

2021-09-17 10:44:50

算法復(fù)雜度空間

2020-12-08 11:08:55

時(shí)間復(fù)雜度軟件

2021-07-19 08:33:56

時(shí)間復(fù)雜度大O

2021-06-28 06:15:14

算法Algorithm時(shí)間空間復(fù)雜度

2020-11-30 06:26:31

算法時(shí)間表示法

2020-02-06 13:59:48

javascript算法復(fù)雜度

2018-08-20 17:35:37

AI

2020-12-30 05:35:56

數(shù)據(jù)結(jié)構(gòu)算法

2021-10-15 09:43:12

希爾排序復(fù)雜度

2024-05-20 09:04:29

時(shí)間復(fù)雜度代碼

2015-10-13 09:43:43

復(fù)雜度核心

2020-12-30 09:20:27

代碼

2014-12-10 09:23:14

2022-02-13 20:04:04

鏈表節(jié)點(diǎn)代碼

2021-04-25 14:29:02

數(shù)據(jù)結(jié)構(gòu)動(dòng)態(tài)數(shù)組時(shí)間復(fù)雜度

2021-03-17 08:37:23

算法性能分析遞歸算法遞歸樹
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

亚洲妇女av| 成人免费高清| 青青青爽久久午夜综合久久午夜| 在线视频免费一区二区| 国产无遮挡猛进猛出免费软件 | 国产婷婷一区二区| 日韩中文第一页| xxxxwww一片| 韩国三级一区| 亚洲一区在线观看视频| 日韩欧美三级电影| 欧美一区二区三区成人片在线| 水野朝阳av一区二区三区| 欧美成人一二三| 日本成人午夜影院| 国产伦精品一区二区三区在线播放| 五月婷婷激情综合| 国产精品12p| 国产午夜在线观看| www..com久久爱| 亚洲精品免费一区二区三区| 中文字幕一区二区三区四区欧美| 一区二区亚洲精品| 久久久国产成人精品| 性欧美精品男男| 国产乱人伦丫前精品视频| 正在播放亚洲一区| www.99av.com| 北岛玲heyzo一区二区| 亚洲高清在线精品| 亚洲精品天堂成人片av在线播放| av在线电影网| 久久久久久久综合狠狠综合| 国产一区再线| 国精产品一品二品国精品69xx| 久久精品免费观看| 国产精品视频中文字幕91| 日韩毛片一区二区三区| 国产视频一区三区| 午夜精品久久久久久久99黑人| 国产亚洲精品av| 一区二区三区午夜探花| 久久精品国产亚洲一区二区| 极品人妻videosss人妻| 国产欧美一区二区精品久久久| 亚洲国产免费av| 69xxx免费视频| 超碰97久久| 欧美一区二区三区在线电影| 99中文字幕在线| 国产精品色婷婷在线观看| 欧美日韩午夜在线| www.超碰97.com| 国模大尺度视频一区二区| 777精品伊人久久久久大香线蕉| 久久久久久久久久久福利| 桃色av一区二区| 欧美午夜久久久| 亚洲中文字幕久久精品无码喷水| 日韩电影大全网站| 精品婷婷伊人一区三区三| 日韩肉感妇bbwbbwbbw| 51一区二区三区| 欧美日韩一区视频| 人人爽人人爽av| 日韩免费成人| 精品久久久三级丝袜| 亚洲午夜久久久久久久久| 久久国产精品免费精品3p| 精品亚洲一区二区三区四区五区| 日本xxx在线播放| 国内黄色精品| 久久久电影免费观看完整版| 麻豆亚洲av熟女国产一区二| 亚洲另类视频| 国产97在线亚洲| 国产又粗又大又爽视频| 高清视频一区二区| 欧美成人蜜桃| 日韩专区在线| 亚洲一级二级三级| 免费国产成人av| 久久免费福利| 亚洲男人的天堂网站| av免费播放网站| 午夜精品婷婷| 国产999精品久久久| 99精品视频在线播放免费| av爱爱亚洲一区| 亚洲国产精品久久久久久女王| av中文字幕在线观看| 精品国产福利视频| 不卡的在线视频| 欧美精品中文| 美女福利视频一区| 精品人妻一区二区三区潮喷在线| 精品一区二区久久久| 电影午夜精品一区二区三区| 黄色av网站在线看| 亚洲激情图片一区| 久久久精品麻豆| 加勒比中文字幕精品| 精品久久久91| 国产又大又黄视频| 国产精品亚洲第一区在线暖暖韩国| 精品国产一区二区三区麻豆小说| 日本美女在线中文版| 婷婷丁香激情综合| 善良的小姨在线| 国产毛片一区二区三区| 97国产精品视频| 国产三级午夜理伦三级| 国产婷婷色一区二区三区| 国产在线xxxx| 成人做爰视频www| 日韩成人中文字幕| 久草福利资源在线观看| 蜜桃视频第一区免费观看| 欧美lavv| 性xxxxfreexxxxx欧美丶| 日韩欧美一区二区久久婷婷| 91制片厂在线| 蜜臀91精品一区二区三区| 免费久久久一本精品久久区| 国精一区二区三区| 欧美大片一区二区| 91大神福利视频| 日韩影院精彩在线| 欧美精品亚洲| 桃色av一区二区| 亚洲精品第一页| 国产一级片免费观看| 国产98色在线|日韩| 成年人黄色在线观看| 国产精品.xx视频.xxtv| 亚洲一二三在线| 日韩三级一区二区| 91视视频在线观看入口直接观看www | 欧美精品一区二区三区免费播放| 国产成人在线中文字幕| 欧美激情手机在线视频| 丰满熟妇人妻中文字幕| 亚洲综合久久久久| 日韩欧美国产高清91| 狠狠色综合色区| 日本色护士高潮视频在线观看| 欧美精品乱码久久久久久| 亚洲av无码一区二区三区人 | 无码中文字幕色专区| 日本一区二区乱| 欧美大码xxxx| 国产按摩一区二区三区| 一区二区三区四区高清精品免费观看| 樱花草www在线| 综合激情网站| 国产98在线|日韩| a级片在线免费观看| 亚洲国产精品免费| 亚洲另类欧美日韩| 久久免费看少妇高潮| 99久久国产宗和精品1上映| 欧美日韩在线二区| 国产视频观看一区| 中文字幕有码在线视频| 精品久久99ma| 干日本少妇视频| 91欧美激情另类亚洲| www亚洲欧美| 国产一区二区三区视频在线观看 | 久久艹免费视频| 91在线视频18| 热久久精品免费视频| 日本女优一区| 99热在线播放| 涩涩视频网站在线观看| 亚洲天堂网站在线观看视频| 波多野结衣小视频| 亚洲视频在线一区| av在线播放网址| 视频精品一区二区| a级网站在线观看| 久久精品66| 国产精品视频网| 丝袜美女在线观看| 亚洲女人被黑人巨大进入| 一级片免费网站| 亚洲一区二区不卡免费| 免费人成又黄又爽又色| 国产精品正在播放| 99999精品视频| 91精品秘密在线观看| 精品不卡在线| 色综合久久久| 91wwwcom在线观看| 九七久久人人| 亚洲欧美国产精品久久久久久久| 91欧美日韩麻豆精品| 婷婷亚洲久悠悠色悠在线播放| 亚洲黄色免费视频| 成人午夜精品一区二区三区| 欧美精品第三页| 你懂的国产精品永久在线| 欧美日韩大片一区二区三区| 麻豆国产一区| 国产精品a久久久久久| h片在线观看视频免费免费| 少妇精69xxtheporn| 天堂在线中文资源| 欧美变态tickle挠乳网站| 中文字幕码精品视频网站| 亚洲国产日产av| 免费在线黄色网| 中文字幕 久热精品 视频在线| 91精品啪在线观看国产| 精品亚洲porn| www日韩在线观看| 99视频在线精品国自产拍免费观看| 中文字幕日韩一区二区三区不卡 | 亚洲自拍三区| 欧美日韩播放| 精品国产乱码一区二区三区四区 | 亚洲7777| 国产精品免费大片| 精品视频在线观看| 亚洲小说春色综合另类电影| 成人午夜小视频| 国产69精品久久| 国产v综合ⅴ日韩v欧美大片 | 精品黑人一区二区三区观看时间| 国产精品一区免费在线观看| 一级黄色录像在线观看| 日韩av一区二| 激情婷婷综合网| 天堂在线亚洲视频| 黄色动漫网站入口| 一本久久知道综合久久| 欧美亚洲黄色片| 亚洲电影av| 精品少妇在线视频| 在线精品在线| 日韩欧美国产综合在线| 亚洲国产午夜| av免费观看网| 午夜一区在线| 日本wwww视频| 日韩和欧美一区二区| 欧美日韩一区二区在线免费观看| 亚洲欧美不卡| 精品视频在线一区二区在线| 丁香花五月婷婷| 日韩少妇高潮抽搐| 国产亚洲午夜高清国产拍精品| 99久久久无码国产精品性波多| 岛国av在线一区| 催眠调教后宫乱淫校园| 99精品在线免费| www.色天使| 亚洲国产精品v| 久久国产高清视频| 亚洲免费av观看| 久久久久久国产精品免费播放| 亚洲国产日日夜夜| 一级片视频在线观看| 91久久一区二区| 伊人网综合在线| 欧美一二三四在线| 丰满人妻一区二区三区免费视频| 亚洲国产精品嫩草影院久久| 蜜桃免费在线| 爽爽爽爽爽爽爽成人免费观看| 久久亚洲天堂| 久久人人爽国产| 欧美一区久久久| 成人在线中文字幕| 精品视频自拍| 一区二区三区四区五区视频 | 精品国产髙清在线看国产毛片 | www.性欧美| 午夜在线观看一区| 亚洲精品一二三| 日韩在线视频免费播放| 欧美性色黄大片| www黄色网址| 亚洲欧美日韩高清| 国产写真视频在线观看| 97色在线视频观看| 视频欧美精品| 精品国产一区二区三区四区精华 | 欧美成人午夜77777| 日韩欧美三级电影| 精品不卡视频| 狠狠干狠狠操视频| 91视频精品在这里| 一区二区国产精品精华液| 精品国产乱码久久久久久虫虫漫画| 中文字幕乱码无码人妻系列蜜桃| 精品久久久久久无| 免费黄色在线看| 青青草原一区二区| 91综合精品国产丝袜长腿久久| 日韩av一区二区三区在线| 国产一区二区中文| 九九精品久久久| 久久午夜电影网| 精品亚洲永久免费| 欧美剧情片在线观看| 欧美日本网站| 久久久女人电视剧免费播放下载| 久久er热在这里只有精品66| 久久波多野结衣| 午夜日本精品| 999精彩视频| 久久久久国产成人精品亚洲午夜| 清纯粉嫩极品夜夜嗨av| 欧美区在线观看| 蜜桃视频在线观看视频| 97人人做人人爱| 亚洲一区二区三区免费| 国产精品h视频| 日本大胆欧美人术艺术动态| 青青草福利视频| 精品成人在线视频| 欧美性猛交 xxxx| 久久99精品久久久久久琪琪 | 欧美亚洲在线| 在线黄色免费网站| 伊人性伊人情综合网| 一级黄色大毛片| 中文字幕国产亚洲2019| 最新欧美电影| 欧美一区二区影视| 可以看av的网站久久看| 久久久久国产精品无码免费看| 亚洲愉拍自拍另类高清精品| 国产青青草视频| yellow中文字幕久久| 日韩欧美激情| 午夜啪啪免费视频| 国内精品久久久久影院色| 女性裸体视频网站| 69堂亚洲精品首页| а√天堂在线官网| 2020国产精品久久精品不卡| 自拍欧美日韩| 青娱乐国产精品视频| 一区二区三区中文字幕在线观看| 国产露脸无套对白在线播放| 久久精品亚洲94久久精品| 国产999精品在线观看| 黄瓜视频免费观看在线观看www| 久久精品999| 麻豆网址在线观看| 日韩欧美国产一区二区在线播放| 免费在线中文字幕| 国产一区二区三区奇米久涩| 国产欧美一区二区色老头 | 亚洲精品免费播放| 亚洲欧美另类一区| 88xx成人精品| 经典一区二区| 奇米视频7777| 一二三区精品视频| 日韩一区二区三区在线观看视频| 97超级碰碰碰久久久| 国产探花在线精品| 一区二区三区国产好的精华液| 一区二区三区在线免费视频| 韩国av免费在线| 91成人国产在线观看| 欧美日韩水蜜桃| 欧美熟妇另类久久久久久多毛| 五月婷婷综合在线| 大乳在线免费观看| 亚洲精品欧美极品| 亚洲中午字幕| 三年中国中文观看免费播放| 91亚洲国产| 日韩中文在线中文网三级| 色戒汤唯在线观看| 亚洲女人毛片| 国产精品一区免费在线观看| 日本少妇毛茸茸高潮| 亚洲日韩欧美视频| 国产一区二区三区黄网站| 免费不卡av在线| 欧美国产丝袜视频| 亚洲AV午夜精品| 国产不卡在线观看| 欧美在线视屏| 一级黄色片大全| 欧美一二三四在线| 欧洲一级精品| 国产精品无码电影在线观看| 久久久一区二区三区捆绑**| 国产精品一区二区人人爽| 97在线精品国自产拍中文| 99精品美女| 欧美高清性xxxx| 日韩欧美国产系列| 精品国产黄a∨片高清在线|