算法相關(guān)

大O,大\Omega,大\Theta

大O

大O表示一個函數(shù)f(x)在大于某一個數(shù)時荸频,存在一個正數(shù)c戏仓,使得f(x)\leq cO(g(x))存在疚宇,即函數(shù)的上界函數(shù)

\Omega

大O表示一個函數(shù)f(x)在大于某一個數(shù)時,存在一個正數(shù)c柜去,使得c\Omega (g(x))\leq f(x)存在灰嫉,即函數(shù)的下界函數(shù)

\Theta

當一個函數(shù)的上下界函數(shù)相等時(c可不相等)

遞歸方程階的計算

大膽猜測小心求證(先猜拆宛,再數(shù)學歸納法證明)

暴力求解

將遞歸方程暴力分解嗓奢,直到括號內(nèi)與1同階為止

例? ?T(n)=7T(\frac{n}{7})+n

T(n)=kn+7^kT(\frac{n}{7^k})

\frac{n}{7^k}=1,即k=\log_7 n

T(n)=\theta (nlog_7 n)=\theta (nlogn)

Master定理(具有局限性)

用于解決形如T(n)=aT(\frac{n}浑厚)+f(n)的遞歸方程股耽,比較n^{log_ba}f(n)階的關(guān)系

二者取較大者為該遞推方程的階

若二者相等,則在階上乘logn為遞推方程的階

T(n)=7T(\frac{n}{7})+n

\theta (n^{log_77})=\theta (n)

所以T(n)=\theta (nlogn)

分治算法

將問題分解成多個小問題钳幅,降低問題的規(guī)模

最大子數(shù)組

最大子數(shù)組有三種情況構(gòu)成物蝙,一種位于中間數(shù)的左側(cè),一種位于中間數(shù)的右側(cè)敢艰,最后一種跨越了中間數(shù)诬乞。在這之中,位于左側(cè)和右側(cè)這兩種情況的子問題與最大子數(shù)組相同钠导,所以關(guān)鍵就是尋找跨越中間數(shù)的最大子數(shù)組震嫉。

而跨越的最大組數(shù)組可由單側(cè)的最大子數(shù)組相加求得。

cross-mid( A,begin,end)

mid=(bigin+end)/2

for i mid downto begin

sum+=A[i]

if sum > left-sum

left-sum=sum

max-left=i

//右側(cè)同理

return (max-left, max-right, left-sum+right-sum)

最終代碼

max(A,begin,end)

if begin=end

return (begin,end,A[begin])

mid=(begin+end)/2

(left-begin,left-end,left-max)=max(A,begin,mid)

(right-begin,right-end,right-max)=max(A,mid+1,end)

(mid-begin,mid-end,mid-max)=cross-mid(A,begin,end)

//不可由上兩個式子形成牡属,因為左右兩側(cè)的最大子數(shù)組不一定包括中間數(shù)

max(mid-max,left-max,right-max)

return//上式對應的

歸并排序

T(n)=2T(\frac{n}{2})+n=\Theta(nlogn)

不斷二分到只剩一個數(shù)字(2\Theta(\frac{n}{2}))進行歸并票堵,用一個空的與原數(shù)組等長數(shù)組來做中介排序,返回排好序的數(shù)字

//再排序過程中如果計數(shù)調(diào)整順序的次數(shù)逮栅,則將此題派生為求逆序?qū)€數(shù)

矩陣乘法

兩個n階矩陣相乘則結(jié)果矩陣中元素的值為

c_{ij}=\sum_{k=1}^na_{ik}\cdot b_{kj}

所以傳統(tǒng)矩陣相乘的時間復雜度為\Theta(n^3)


若將矩陣分為四個n/2階的小矩陣

C_{11}=A_{11}B_{11}+A_{12}B_{21}? ? ? ? ?C_{12}=A_{11}B_{12}+A_{12}B_{21}

C_{21}=A_{21}B_{11}+A_{22}B_{21}? ? ? ? ?C_{22}=A_{22}B_{22}+A_{21}B_{12}

此時時間復雜度為T(n)=8T(\frac{n}{2})+\Theta(n^2)=\Theta(n^3)時間復雜度并沒有改變


此時時間復雜度為\Theta(n^{log_27})時間復雜度減小了

大整數(shù)乘法

當兩個長度為N的大整數(shù)相乘悴势,一般情況下需要消耗\Theta(n^2)的時間復雜度,是否可以利用分治降低時間復雜度措伐?


XY=(A2^{n/2}+B)(C2^{n/2}+D)

XY=AC2^n+ADn^{n/2}+BC2^{n/2}+BD

此時,時間復雜度為T(n)=4T(n/2)+\Theta(n)=\Theta(n^2)

時間復雜度并沒有發(fā)生改變

倘若我們稍稍改動特纤,j減少相乘,增加加減侥加,盡多的利用已有的結(jié)果

XY=AC2^n+((A+B)(C+D)-AC-BD)2^{n/2}+BD

此時,時間復雜度為T(n)=3T(n/2)+\Theta(n)=\Theta(n^{log_23})

第K小元素

動態(tài)規(guī)劃

與分治法類似叫潦,動態(tài)規(guī)劃也是將問題劃分為更小的問題進行解決,但區(qū)別在于,子問題是具有重復性的矗蕊,這將大大減小時間復雜度

動態(tài)規(guī)劃條件

最優(yōu)子結(jié)構(gòu)

當一個問題的最優(yōu)解包含了子問題的最優(yōu)解時短蜕,稱這個問題具有最優(yōu)子結(jié)構(gòu)

證明時是用反證法

重疊子問題

一個子問題的解在求解中不斷被利用

矩陣連乘

最優(yōu)子結(jié)構(gòu)證明

若m[i,j]表示Ai...Aj相乘時最少的乘法次數(shù),m[j+1,k]表示Aj+1...Ak相乘時最少的乘法次數(shù)

則m[i,k]=m[i,j]+m[j+1,k]+ri×rj×rk

重疊子問題證明


所以構(gòu)建二維矩陣m[i,j]用于存儲某個區(qū)間內(nèi)矩陣相乘最少的乘法次數(shù)傻咖,i表示開始的矩陣下標朋魔,j表示結(jié)束的矩陣下標

m[i,j]=min(m[i,k]+m[k+1,j]+ri×rk×rj), i<j

m[i,j]=0, i\geq j

鋼條切割

最優(yōu)子結(jié)構(gòu)

當最終是最大收益時,切割下來的每一部分也是當前長度的最大收益

重疊子問題


m(n)=\max_{1\leq i\leq n}(p_i+m(n-i))

最長公共子序列

二維矩陣m[i,j]表示Xi和Yj中最長公共子序列的長度

m[i,j]=1/0,? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?i=j

m[i,j]=m[i-1,j-1]+1,? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? X[i]=Y[j]

m[i,j]=max{m[i-1,j],m[i,j-1]},? ? ? ? ? ? ? i≠j卿操,X[i]≠Y[j]

0/1背包問題

背包中物品只可整個裝入或者取出警检,不可部分裝入取出

dp[i][j]表示物品為i,i+1害淤,...扇雕,n,背包容量為j時的最優(yōu)解

dp[i][j]=max(dp[i+1][j],dp[i+1][j-p_i]+v_i),j\geq p_i

dp[i][j]=dp[i+1][j]? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? j<pi??

dp[n][j]=0? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?j=0

dp[n][j]=pn? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?j≥vn

貪心算法

活動選擇問題( 最少圓覆蓋最多點)

選擇活動結(jié)束時間最早的活動窥摄,下一個活動為開始時間比現(xiàn)有活動晚且結(jié)束時間最早的活動镶奉。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市崭放,隨后出現(xiàn)的幾起案子哨苛,更是在濱河造成了極大的恐慌,老刑警劉巖币砂,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件建峭,死亡現(xiàn)場離奇詭異,居然都是意外死亡决摧,警方通過查閱死者的電腦和手機亿蒸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來掌桩,“玉大人边锁,你說我怎么就攤上這事【行” “怎么了砚蓬?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長盆色。 經(jīng)常有香客問我灰蛙,道長,這世上最難降的妖魔是什么隔躲? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任摩梧,我火速辦了婚禮,結(jié)果婚禮上宣旱,老公的妹妹穿的比我還像新娘仅父。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布笙纤。 她就那樣靜靜地躺著耗溜,像睡著了一般。 火紅的嫁衣襯著肌膚如雪省容。 梳的紋絲不亂的頭發(fā)上抖拴,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天,我揣著相機與錄音腥椒,去河邊找鬼阿宅。 笑死,一個胖子當著我的面吹牛笼蛛,可吹牛的內(nèi)容都是我干的洒放。 我是一名探鬼主播,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼滨砍,長吁一口氣:“原來是場噩夢啊……” “哼往湿!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起惨好,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤煌茴,失蹤者是張志新(化名)和其女友劉穎随闺,沒想到半個月后日川,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡矩乐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年龄句,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片散罕。...
    茶點故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡分歇,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出欧漱,到底是詐尸還是另有隱情职抡,我是刑警寧澤,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布误甚,位于F島的核電站缚甩,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏窑邦。R本人自食惡果不足惜擅威,卻給世界環(huán)境...
    茶點故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望冈钦。 院中可真熱鬧郊丛,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至揍瑟,卻和暖如春认轨,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背月培。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工嘁字, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人杉畜。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓纪蜒,卻偏偏與公主長得像,于是被迫代替她去往敵國和親此叠。 傳聞我的和親對象是個殘疾皇子纯续,可洞房花燭夜當晚...
    茶點故事閱讀 45,060評論 2 355

推薦閱讀更多精彩內(nèi)容