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

拜托,面試別再問我時間復雜度了!!!

開發 開發工具
最煩面試官問,“為什么XX算法的時間復雜度是OO”,看完這篇文章,今后,不再懼怕這類問題。

最煩面試官問,“為什么XX算法的時間復雜度是OO”,今后,不再懼怕這類問題。

[[248676]]

快速排序分為這么幾步:

***步,先做一次partition;

partition使用***個元素t=arr[low]為哨兵,把數組分成了兩個半區:

  • 左半區比t大
  • 右半區比t小

第二步,左半區遞歸;

第三步,右半區遞歸;

偽代碼為:

  1. void quick_sort(int[]arr, int low, int high){ 
  2.          if(low== high) return; 
  3.          int i = partition(arr, low, high); 
  4.          quick_sort(arr, low, i-1); 
  5.          quick_sort(arr, i+1, high); 

為啥,快速排序,時間復雜度是O(n*lg(n))呢?

今天和大家聊聊時間復雜度。

畫外音:往下看,第三類方法很牛逼。

***大類,簡單規則

為方便記憶,先總結幾條簡單規則,熱熱身。

(1) 規則一:“有限次操作”的時間復雜度往往是O(1)。

例子:交換兩個數a和b的值。

  1. void swap(int& a, int& b){ 
  2.          int t=a
  3.          a=b
  4.          b=t

分析:通過了一個中間變量t,進行了3次操作,交換了a和b的值,swap的時間復雜度是O(1)。

畫外音:這里的有限次操作,是指不隨數據量的增加,操作次數增加。

(2) 規則二:“for循環”的時間復雜度往往是O(n)。

例子:n個數中找到***值。

  1. int max(int[] arr, int n){ 
  2.          int temp = -MAX; 
  3.          for(int i=0;i<n;++i) 
  4.                    if(arr[i]>temp) temp=arr[i]; 
  5.          return temp; 
  6.   

分析:通過一個for循環,將數據集遍歷,每次遍歷,都只執行“有限次操作”,計算的總次數,和輸入數據量n呈線性關系。

(3) 規則三:“樹的高度”的時間復雜度往往是O(lg(n))。

分析:樹的總節點個數是n,則樹的高度是lg(n)。

在一棵包含n個元素二分查找樹上進行二分查找,其時間復雜度是O(lg(n))。

對一個包含n個元素的堆頂元素彈出后,調整成一個新的堆,其時間復雜度也是O(lg(n))。

第二大類:組合規則

通過簡單規則的時間復雜度,來求解組合規則的時間復雜度。

例如:n個數冒泡排序。

  1. void bubble_sort(int[] arr, int n){ 
  2.    for(int i=0;i<n;i++) 
  3.        for(int j=0;j<n-i-1;j++) 
  4.            if(arr[j]>arr[j+1]) 
  5.                 swap(arr[j], arr[j+1]); 

分析:冒泡排序,可以看成三個規則的組合:

  • 外層for循環
  • 內層for循環
  • 最內層的swap

故,冒泡排序的時間復雜度為:

  1. O(n) * O(n) * O(1) = O(n^2) 

又例如:TopK問題,通過建立k元素的堆,來從n個數中求解***的k個數。

先用前k個元素生成一個小頂堆,這個小頂堆用于存儲,當前***的k個元素。

接著,從第k+1個元素開始掃描,和堆頂(堆中最小的元素)比較,如果被掃描的元素大于堆頂,則替換堆頂的元素,并調整堆,以保證堆內的k個元素,總是當前***的k個元素。

直到,掃描完所有n-k個元素,最終堆中的k個元素,就是為所求的TopK。

偽代碼:

  1. heap[k] = make_heap(arr[1, k]); 
  2. for(i=k+1 to n){ 
  3.          adjust_heap(heep[k],arr[i]); 
  4. return heap[k]; 

分析:可以看成三個規則的組合:

  • 新建堆
  • for循環
  • 調整堆

故,用堆求解TopK,時間復雜度為:

  1. O(k) + O(n) * O(lg(k)) = O(n*lg(k)) 

畫外音:注意哪些地方用加,哪些地方用乘;哪些地方是n,哪些地方是k。

第三大類,遞歸求解

簡單規則和組合規則可以用來求解非遞歸的算法的時間復雜度。對于遞歸的算法,該怎么分析呢?

接下來,通過幾個案例,來說明如何通分析遞歸式,來分析遞歸算法的時間復雜度。

(1) 案例一:計算 1到n的和,時間復雜度分析。

如果用非遞歸的算法:

  1. int sum(int n){ 
  2.          int result=0
  3.          for(int i=0;i<n;i++) 
  4.                    result += i; 
  5.          return result; 

根據簡單規則,for循環,sum的時間復雜度是O(n)。

但如果是遞歸算法,就沒有這么直觀了:

  1. int sum(int n){ 
  2.          if (n==1) return 1; 
  3.          return n+sum(n-1); 

如何來進行時間復雜度分析呢?

用f(n)來表示數據量為n時,算法的計算次數,很容易知道:

  • 當n=1時,sum函數只計算1次

畫外音:if (n==1) return 1;

即:

  1. f(1)=1【式子A】 
  • 不難發現,當n不等于1時:

f(n)的計算次數,等于f(n-1)的計算次數,再加1次計算

畫外音:return n+sum(n-1);

即:

  1. f(n)=f(n-1)+1【式子B】 

【式子B】不斷的展開,再配合【式子A】:

畫外音:這一句話,是分析這個算法的關鍵。

  1. f(n)=f(n-1)+1 
  2. f(n-1)=f(n-2)+1 
  3. … 
  4. f(2)=f(1)+1 
  5. f(1)=1 

上面共n個等式,左側和右側分別相加:

  1. f(n)+f(n-1)+…+f(2)+f(1) 
  2. [f(n-1)+1]+[f(n-2)+1]+…+[f(1)+1]+[1] 

即得到:

  1. f(n)=n 

已經有那么點意思了哈,再來個復雜點的算法。

(2) 案例二:二分查找binary_search,時間復雜度分析。

  1. int BS(int[] arr, int low, int high, int target){ 
  2.          if (low>high) return -1; 
  3.          mid = (low+high)/2; 
  4.          if (arr[mid]== target) return mid; 
  5.          if (arr[mid]> target) 
  6.                   return BS(arr, low, mid-1, target); 
  7.          else 
  8.                   return BS(arr, mid+1, high, target); 

二分查找,單純從遞歸算法來分析,怎能知道其時間復雜度是O(lg(n))呢?

仍用f(n)來表示數據量為n時,算法的計算次數,很容易知道:

  • 當n=1時,bs函數只計算1次

畫外音:不用糾結是1次還是1.5次,還是2.7次,是一個常數次。

即:

  1. f(1)=1【式子A】 

在n很大時,二分會進行一次比較,然后進行左側或者右側的遞歸,以減少一半的數據量:

  • f(n)的計算次數,等于f(n/2)的計算次數,再加1次計算

畫外音:計算arr[mid]>target,再減少一半數據量迭代

即:

  1. f(n)=f(n/2)+1【式子B】 

【式子B】不斷的展開,

  1. f(n)=f(n/2)+1 
  2. f(n/2)=f(n/4)+1 
  3. f(n/4)=f(n/8)+1 
  4. … 
  5. f(n/2^(m-1))=f(n/2^m)+1 

上面共m個等式,左側和右側分別相加:

  1. f(n)+f(n/2)+…+f(n/2^(m-1)) 
  2. [f(n/2)+1]+[f(n/4)+1]+…+[f(n/2^m)]+[1] 

即得到:

  1. f(n)=f(n/2^m)+m 

再配合【式子A】:

  1. f(1)=1 

即,n/2^m=1時, f(n/2^m)=1, 此時m=lg(n), 這一步,這是分析這個算法的關鍵。

將m=lg(n)帶入,得到:

  1. f(n)=1+lg(n) 

神奇不神奇?

***,大boss,快速排序遞歸算法,時間復雜度的分析過程。

(3) 案例三:快速排序quick_sort,時間復雜度分析。

  1. void quick_sort(int[]arr, int low, inthigh){ 
  2.          if (low==high) return; 
  3.          int i = partition(arr, low, high); 
  4.          quick_sort(arr, low, i-1); 
  5.          quick_sort(arr, i+1, high); 

仍用f(n)來表示數據量為n時,算法的計算次數,很容易知道:

  • 當n=1時,quick_sort函數只計算1次

f(1)=1【式子A】

在n很大時:

  • ***步,先做一次partition;
  • 第二步,左半區遞歸;
  • 第三步,右半區遞歸;

即:

  1. f(n)=n+f(n/2)+f(n/2)=n+2*f(n/2)【式子B】 

畫外音:

  • partition本質是一個for,計算次數是n;
  • 二分查找只需要遞歸一個半區,而快速排序左半區和右半區都要遞歸,這一點在分治法與減治法一章節已經詳細講述過;

【式子B】不斷的展開,

  1. f(n)=n+2*f(n/2) 
  2. f(n/2)=n/2+2*f(n/4) 
  3. f(n/4)=n/4+2*f(n/8) 
  4. … 
  5. f(n/2^(m-1))=n/2^(m-1)+2f(n/2^m) 

上面共m個等式,逐步帶入,于是得到:

  1. f(n)=n+2*f(n/2) 
  2. =n+2*[n/2+2*f(n/4)]=2n+4*f(n/4) 
  3. =2n+4*[n/4+2*f(n/8)]=3n+8f(n/8) 
  4. =… 
  5. =m*n+2^m*f(n/2^m) 

再配合【式子A】:

  1. f(1)=1 

即,n/2^m=1時, f(n/2^m)=1, 此時m=lg(n), 這一步,這是分析這個算法的關鍵。

將m=lg(n)帶入,得到:

  1. f(n)=lg(n)*n+2^(lg(n))*f(1)=n*lg(n)+n 

故,快速排序的時間復雜度是n*lg(n)。

wacalei,有點意思哈!

畫外音:額,估計83%的同學沒有細究看,花5分鐘細思上述過程,一定有收獲。

總結

  • for循環的時間復雜度往往是O(n)
  • 樹的高度的時間復雜度往往是O(lg(n))
  • 二分查找的時間復雜度是O(lg(n)),快速排序的時間復雜度n*(lg(n))
  • 遞歸求解,未來再問時間復雜度,通殺

知其然,知其所以然。

思路比結論重要。

【本文為51CTO專欄作者“58沈劍”原創稿件,轉載請聯系原作者】

戳這里,看該作者更多好文

責任編輯:趙寧寧 來源: 51CTO專欄
相關推薦

2018-09-28 05:25:53

TopK算法代碼

2018-10-28 22:37:00

計數排序排序面試

2018-11-01 13:49:23

桶排序排序面試

2019-04-16 13:30:05

表達式求值數據結構算法

2020-04-22 11:19:07

貪心算法動態規劃

2019-01-08 15:11:50

最大值最小值算法

2021-01-22 10:09:23

簡歷求職者面試

2020-09-02 08:04:59

多線程互聯網高并發

2020-03-30 17:20:54

B+樹SQL索引

2022-03-14 10:14:43

底層系統Nacos

2018-11-09 09:34:05

面試Spring Clou底層

2020-04-16 08:22:11

HTTPS加解密協議

2020-12-11 09:24:19

Elasticsear存儲數據

2020-09-24 14:40:55

Python 開發編程語言

2019-08-29 09:49:50

2015-02-13 10:42:31

前端工具Dreamweaver

2019-07-10 10:06:24

面試官三次握手四次揮手

2019-12-17 09:29:02

數據庫架構分庫分表

2021-09-17 10:44:50

算法復雜度空間

2022-11-23 07:41:52

JDKStream關鍵字
點贊
收藏

51CTO技術棧公眾號

www.亚洲天堂网| 国产精品久久久久久久久久直播| 欧美午夜视频网站| 蜜桃av噜噜一区二区三区| 中文字幕黄色片| 9999国产精品| 精品国产一区二区三区不卡 | 91精品999| 国产乱码在线| 国产视频不卡一区| 高清av免费一区中文字幕| 国产性生活视频| 欧美黄色免费| 中文字幕在线看视频国产欧美在线看完整 | www深夜成人a√在线| 2020国产精品极品色在线观看| 色综合久久九月婷婷色综合| 国产一二三四区在线观看| 欧美一级淫片免费视频魅影视频| 免费成人av资源网| 午夜精品福利电影| 免费黄色激情视频| 欧美精品momsxxx| 精品日韩欧美在线| 午夜啪啪小视频| 最新日韩三级| 精品动漫一区二区| 超碰人人爱人人| 午夜国产福利在线| 国产欧美精品一区| 久久精品99久久| 北条麻妃一二三区| 极品少妇xxxx精品少妇偷拍| 国产精品va在线| 国产无遮挡呻吟娇喘视频| 欧美日韩视频一区二区三区| 日韩中文字幕视频| 人成免费在线视频| 国产精品一区二区av日韩在线| 亚洲第一区中文99精品| 中文字幕无人区二| 国产一区一区| 这里只有精品视频在线观看| 国产精品一区二区羞羞答答| 97se综合| 日本道精品一区二区三区| 18岁网站在线观看| 黄色漫画在线免费看| 亚洲成人免费av| 97视频久久久| 牛牛精品在线| 亚洲超碰精品一区二区| 99er在线视频| av影视在线| 亚洲成av人在线观看| 日本阿v视频在线观看| 人人妻人人澡人人爽人人精品| 中文字幕综合在线观看| 久草热在线观看| 巨乳诱惑日韩免费av| 欧美日韩亚洲综合在线 | 亚洲欧美日韩高清在线| 伊人伊成久久人综合网站| 亚洲女优在线观看| 欧美日韩第一| 最近2019中文字幕mv免费看| 天堂资源在线视频| 亚洲精品成人| 欧美精品九九久久| 日韩人妻精品中文字幕| 日精品一区二区三区| 国产精品免费观看在线| 国产又大又黑又粗| 国产不卡在线视频| 欧美lavv| 久久黄色美女电影| 亚洲国产精品嫩草影院| 99色精品视频| jizzjizz少妇亚洲水多| 3atv一区二区三区| 成年女人免费视频| 国产精品片aa在线观看| yw.139尤物在线精品视频| 欧美精品xxxxx| 国产精品婷婷| 国产日韩精品电影| 俄罗斯嫩小性bbwbbw| 91一区二区三区在线观看| 婷婷精品国产一区二区三区日韩| 九七久久人人| 大荫蒂欧美视频另类xxxx| 性欧美极品xxxx欧美一区二区| 欧美视频精品| 日韩电影在线观看中文字幕| 午夜国产福利视频| 亚洲免费播放| 91精品综合视频| 午夜一区在线观看| 亚洲视频小说图片| 六月丁香婷婷激情| 国产精品高清一区二区| 日韩精品丝袜在线| 国产3级在线观看| 国产日韩欧美高清免费| 成人国产精品久久久| 三级在线视频| 亚洲一区影音先锋| 亚洲免费av一区| 视频福利一区| 欧美伦理91i| 中文字幕在线观看1| 粉嫩av一区二区三区在线播放| 日本婷婷久久久久久久久一区二区| 尤物视频在线看| 欧美日韩aaaaa| 国产激情在线免费观看| 欧美精品18| 成人欧美在线视频| 番号集在线观看| 午夜日韩在线观看| 久久久男人的天堂| 天天做天天爱天天综合网| 欧美一区二三区| 国模私拍视频在线| 亚洲欧洲中文日韩久久av乱码| 午夜视频在线瓜伦| 啪啪激情综合网| 久久久久久午夜| 国产女同91疯狂高潮互磨| 国产日韩成人精品| 免费黄色日本网站| 香蕉精品久久| 69国产精品成人在线播放| 国产成人三级一区二区在线观看一| 国产片一区二区| 亚洲精品乱码久久久久久自慰| 精品欠久久久中文字幕加勒比| 欧美成人在线免费| 精品国产区一区二| 亚洲人成在线播放网站岛国| 中文字幕第80页| 欧美日韩伦理在线免费| 国产成人啪精品视频免费网| xxxx18国产| 伊人开心综合网| 日韩av成人网| 亚洲性图久久| 国产欧美日本在线| 日本三级一区| 亚洲精品日韩丝袜精品| 欧美日韩乱国产| 91蜜桃视频在线| 日韩a在线播放| 精品国产乱码久久久久久蜜坠欲下 | 毛片a片免费观看| 国产suv精品一区二区三区| 国产一级片91| 风间由美中文字幕在线看视频国产欧美| 另类色图亚洲色图| 亚洲老妇色熟女老太| 一区二区三区日韩| 日本69式三人交| 国产精品色网| 亚洲精品一区二区三区四区五区 | 欧美一区二区三区啪啪| 青娱乐国产盛宴| a亚洲天堂av| 日本成人在线免费视频| 成人在线免费小视频| 成人免费看吃奶视频网站| 99视频免费在线观看| 精品国产凹凸成av人网站| 日韩精品视频免费看| 久久婷婷国产综合精品青草 | 国产成人免费在线视频| 免费在线观看视频a| 国产精品午夜一区二区三区| 91精品国产综合久久香蕉最新版 | 一区二区不卡在线播放| 少妇激情一区二区三区视频| 久久午夜影视| 亚洲自拍偷拍一区二区三区| 成人资源在线| 国产精品久久久久久久久久小说| 成人影院在线观看| 日韩精品视频在线观看网址| 一区精品在线观看| 亚洲成人激情av| 美国一级黄色录像| 波多野结衣中文字幕一区| 国产三级日本三级在线播放| 久久久久亚洲| 欧美日本韩国一区二区三区| 国产精品久久久久久av公交车| 91av在线不卡| 激情在线小视频| 亚洲欧美日韩一区二区在线| 国产精选久久久| 欧美性猛交xxx| 欧美成人aaa片一区国产精品| 2021久久国产精品不只是精品| 91视频福利网| 青椒成人免费视频| 六月婷婷在线视频| 亚洲久久久久| 日本中文不卡| 欧美午夜寂寞| 99久久无色码| 在线观看亚洲精品福利片| 欧美最顶级丰满的aⅴ艳星| 制服丝袜中文字幕在线| 丝袜一区二区三区| 欧美成人综合在线| 亚洲精品一区二区在线观看| 一级淫片免费看| 一本大道久久a久久精品综合| 久久久久久久福利| 亚洲视频一区二区在线观看| 微拍福利一区二区| 99久久国产综合精品色伊| 国产黄色一区二区三区| 另类小说一区二区三区| 国产精品亚洲a| 一本色道久久综合| 久草视频这里只有精品| 欧美黄色一区| 可以免费看的黄色网址| 日韩av自拍| 日韩视频在线观看国产| 在线观看欧美理论a影院| 国产日韩久久| 97人人澡人人爽91综合色| 91精品视频观看| 欧美一区=区三区| 国产精品亚洲网站| 精品久久在线| 国产美女精品视频免费观看| av亚洲一区二区三区| 日韩免费观看高清| xx欧美视频| 国产精品96久久久久久又黄又硬 | 成人精品网站在线观看| 忘忧草在线www成人影院| 浅井舞香一区二区| 日韩性xxx| 国产精品久久久久久久久久久久久久| 国产高清不卡| 国产精品99久久久久久www| 国产精品高清乱码在线观看 | 97视频一区| 成人动漫在线视频| 国产精品久久久网站| 激情视频一区二区| 伊人久久大香线蕉综合网站| 日本精品一区二区三区视频| 国模吧精品视频| 一区二区三区不卡在线| 91久久电影| 国产欧美123| 亚洲黄色视屏| 各处沟厕大尺度偷拍女厕嘘嘘| 日韩中文字幕麻豆| www.超碰97.com| 国产成人午夜高潮毛片| 国产成人av无码精品| 久久久精品中文字幕麻豆发布| 夜夜春很很躁夜夜躁| 国产精品美女久久福利网站| 国产稀缺精品盗摄盗拍| 亚洲一区二区三区影院| 久久99精品波多结衣一区| 色欧美88888久久久久久影院| 真实的国产乱xxxx在线91| 欧美一区二区在线不卡| 成人毛片在线精品国产| 亚洲精品一二区| 秋霞a级毛片在线看| 色综合视频一区中文字幕| yellow在线观看网址| 日本成熟性欧美| 成人噜噜噜噜| 开心色怡人综合网站| 成人av国产| 国产xxxx振车| 久久亚洲图片| 佐佐木明希电影| 久久婷婷久久一区二区三区| 麻豆视频在线免费看| 欧美日韩国产页| 国产乱淫a∨片免费观看| 日韩av网站导航| 成人免费看片| 日本欧美精品在线| 欧美h版在线观看| 日韩精品一区二区三区丰满| 欧美激情综合| 国产一区二区在线免费播放| 高清不卡在线观看av| 奇米网一区二区| 精品露脸国产偷人在视频| 国产一区二区视频免费观看| 亚洲精品suv精品一区二区| 色多多视频在线观看| 91chinesevideo永久地址| 精品国产亚洲日本| 五月天综合网| 99在线精品免费视频九九视| 三级av免费看| 国产欧美日韩在线视频| 日韩精品一区二区在线播放| 欧美精品久久一区| 国产美女性感在线观看懂色av| 欧美精品久久一区二区| 999精品嫩草久久久久久99| 欧美一区二区视频在线| 亚洲承认在线| 91视频福利网| 国产精品成人免费| 国产成人麻豆免费观看| 日韩av一区在线| 99re6在线精品视频免费播放| 91久久精品日日躁夜夜躁国产| 国产亚洲欧美日韩在线观看一区二区| 黄页网站大全在线观看| 国产精品白丝av| 成人免费精品动漫网站| 欧美日韩激情一区二区三区| av在线资源网| 国产精品久久久久9999| 视频一区在线观看| 丁香啪啪综合成人亚洲| 久久综合久久综合久久| 自拍偷拍欧美亚洲| 亚洲成人aaa| 97人人爽人人澡人人精品| 国产aⅴ精品一区二区三区黄| 亚洲一级淫片| 性生活一级大片| 一级中文字幕一区二区| www日本高清视频| 欧美劲爆第一页| 久久97精品| 国产伦精品一区二区三区四区视频_| 国产99久久久国产精品免费看| 丁香花五月激情| 欧美tickling网站挠脚心| 欧美理论电影| 国产精品一区视频| 亚洲美女黄色| 久久精品国产亚洲av麻豆| 色婷婷av一区二区三区大白胸| 黄色av免费在线观看| 国产精品美女视频网站| 日韩中文欧美| 99中文字幕在线| 亚洲午夜在线观看视频在线| 免费av网站观看| 欧美一区二区色| 成人情趣视频网站| 亚洲第一天堂久久| 一区二区三区四区在线| 亚洲国产精品久久久久久6q| 国内揄拍国内精品| 夜夜躁狠狠躁日日躁2021日韩| 国产三级日本三级在线播放| 国产精品看片你懂得| jlzzjlzzjlzz亚洲人| 午夜精品久久久久久久久久久久| 欧洲亚洲成人| 九九热免费在线观看| 一区二区在线看| 日色在线视频| 国产视频观看一区| 在线成人亚洲| 国产7777777| 欧美xxxx老人做受| 成人av观看| 国产对白在线播放| 91蝌蚪porny| 一级特黄色大片| 91国产精品电影| 日韩在线精品| 李丽珍裸体午夜理伦片| 欧美性生活影院| 国产经典三级在线| 视频一区视频二区视频| 国产精品一区二区视频| 91玉足脚交嫩脚丫在线播放| 日韩三级成人av网| 欧洲精品一区| 欧美在线a视频| 日韩欧美视频一区二区三区| 男人影院在线观看| 久久视频在线观看中文字幕| 开心九九激情九九欧美日韩精美视频电影| 青青草在线观看视频| 在线色欧美三级视频| 99这里只有精品视频| 国产91色在线观看| 欧美日韩亚洲一区二区|