算法設(shè)計與分析總結(jié)

2016 ?summer &

index picture

1、遞歸與分治法

遞歸的基本思想:一個直接或間接調(diào)用自身的算法

(1)斐波那契數(shù)列:

斐波那契數(shù)列遞歸 ?以及遞歸優(yōu)化

分治法的基本思想:將一個規(guī)模為n的問題分解為k個規(guī)模較小的子問題,這些子問題互相獨立且與原問題相同舰蟆。遞歸地解決這些子問題秕豫,然后將各子問題的解合并得到原問題的解奢浑。

(1)排列問題:

先貼出可能用到的代碼:

交換兩個數(shù)的模板:

交換函數(shù)

問題:已知R={1,2,3},對它產(chǎn)生全排列

分析:當(dāng)?shù)谝粋€數(shù)1固定慎陵,對23進(jìn)行全排列,可以分為當(dāng)2固定马胧,對3進(jìn)行全排列;當(dāng)3固定衔峰,對2進(jìn)行全排佩脊,則可以得到123,132;其余當(dāng)?shù)谝粋€數(shù)是2,對13進(jìn)行全排列垫卤;當(dāng)?shù)谝粋€數(shù)是3威彰,對12進(jìn)行全排列。

程序代碼:

全排列

(2)整數(shù)劃分問題

問題:

整數(shù)劃分問題

程序代碼:

整數(shù)劃分

(3)二分搜索技術(shù):

問題:給定已排好序的n個元素a[0,n-1],現(xiàn)要在這n個元素中找出一特定元素x

程序代碼:

循環(huán)實現(xiàn):

二分搜索循環(huán)

遞歸實現(xiàn):

二分搜索遞歸

(4)棋盤覆蓋

先貼出可能用到的代碼:

動態(tài)申請一個一維數(shù)組:

動態(tài)申請一維數(shù)組

動態(tài)開辟一個二維數(shù)組:

動態(tài)開辟一個二維數(shù)組

問題:

問題
l型骨牌

分析:可以用分治法解決此問題葫男,當(dāng)k > 0時抱冷,將2^k * 2^k的棋盤分割為4個2^(k-1) * 2^(k-1)個子棋盤,如下圖:

分割與填法

上圖中的右圖就是我們填L型骨牌的方式梢褐,使得每一個區(qū)域都有一個特殊方格旺遮。

代碼一
代碼二
運行結(jié)果

(5)合并排序

基本思想:當(dāng)n=1時赵讯,終止排序;否則將待排序的元素分割為大小大致相同的兩個子集和耿眉,分別對子集和進(jìn)行排序边翼,最終將排好序的子集和合并。

代碼一
代碼二

(6)快速排序

快速排序

注:若數(shù)據(jù)是基本有序的鸣剪,則快速排序的效率不高组底,可以用隨機化法解決:

隨機化法

(7)線性時間選擇

問題:給定線性序集中n個元素和一個整數(shù)k,要求找出這n個元素中第k小的元素筐骇。

分析:利用分治法债鸡,調(diào)用Partition函數(shù)可以對其進(jìn)行劃分,一次劃分得到第pos個小的元素铛纬,然后判斷k值與pos的大小厌均,分別對部分重復(fù)上述步驟,最主要的是pos的求法是index-left+1

找第k小的元素




2告唆、動態(tài)規(guī)劃算法

基本思想:將待求解的問題分解為若干個子問題棺弊,先求解子問題,然后從這些子問題得到原問題的解擒悬。經(jīng)動態(tài)規(guī)劃法得到的子問題往往不是相互獨立的模她,為了避免重復(fù)計算,我們可以用一個表來記錄所有已解決的子問題的答案懂牧。它常用于求解具有最優(yōu)子結(jié)構(gòu)性質(zhì)(問題的最優(yōu)解包含了子問題的最優(yōu)解)和子問題重疊性質(zhì)(在用遞歸算法自頂向下的解決問題時侈净,每次產(chǎn)生的子問題并不總是新問題,有些問題被反復(fù)計算多次)的問題归苍。

基本步驟:a用狱、找出最優(yōu)解的性質(zhì),并刻畫其特征拼弃;

b夏伊、遞歸地定義最優(yōu)值;

c吻氧、以自底向上的方式計算出最優(yōu)值溺忧;

d、根據(jù)計算最優(yōu)值時得到的信息盯孙,構(gòu)造一個最優(yōu)解鲁森。

(1)矩陣連乘問題

兩個矩陣相乘代碼:

矩陣相乘

問題:給定n個矩陣{A1,A2振惰,A3.........An}歌溉,計算出n個矩陣連乘積的最優(yōu)計算次序

分析:

a、最優(yōu)解的性質(zhì):設(shè)A[1,n]是n個矩陣的連乘,則可將其劃分為A[1,k]和A[k+1,n]

b痛垛、遞歸地定義最優(yōu)值:設(shè)m[i,j]為所需的最少數(shù)乘次數(shù)草慧,則當(dāng)i=j時,m[i,j]=0匙头;當(dāng)i<j時漫谷,

m[i,j] = min(m[i,k]+m[k+1,j]+p[i-1]*p[k]*p[j]),其中k取值范圍是i到j(luò)-1;

c蹂析、以自底向上計算最優(yōu)值

d舔示、構(gòu)造一個最優(yōu)解

(2)最長公共子序列

規(guī)定:子序列是按照下標(biāo)遞增的方式

問題:給定兩個序列分別是:X={A,B,C,B,D,A,B},Y={B,D,C,A,B,A},假設(shè)Z是X和Y的最長公共子序列,求Z电抚?

分析:

a惕稻、最優(yōu)解的性質(zhì):若xm = yn,則zk = xm = yn蝙叛,z(k-1)是x(m-1)和y(n-1)的最長公共子序列缩宜;若xm!=yn且zk!=xm,則z是x(m-1)和yn的最長公共子序列甥温;若xm!=yn且zk!=yn,則z是xm和y(n-1)的最長公共子序列妓布;

b姻蚓、遞歸地定義最優(yōu)值:用c[i][j]記錄xi和yj最長公共子序列的長度。當(dāng)i=j=0時匣沼,c[i][j]=0;當(dāng)i,j>0時狰挡,若xi=yj,則c[i][j]=c[i-1][j-1]+1;若xi!=yj,則c[i][j] =max(c[i][j-1],c[i-1][j])。

c释涛、以自底向上計算最優(yōu)值

d加叁、構(gòu)造一個最優(yōu)解

(3)0-1背包問題

問題:

0-1背包問題

分析:

a、最優(yōu)解的性質(zhì):假設(shè)對于n元0-1向量x={x1,x2……xn}唇撬,有Sum(wi xi) <= c && Max(Sum(vi xi))為最優(yōu)解它匕,則有對于x={x2……xn},有Sum(wi xi) - w1 x1 <= c && Max(Sum(vi xi)-v1 x1)為最優(yōu)解

b窖认、遞歸地定義最優(yōu)值:設(shè)m(i,j)代表最大價值豫柬,i表示為i……n,即放入了這么些物品,j代表當(dāng)前容器的容量扑浸。則有第一種情況當(dāng)i==n烧给,如果j>w[n],則返回v[n],否則返回0喝噪;第二種情況當(dāng)i < n時础嫡,若jw[i],則返回Max( m(i+1,j) , (m(i+1,j-w[i]) + v[i] ) )

c、以自底向上計算最優(yōu)值:

d酝惧、構(gòu)造一個最優(yōu)解:




3榴鼎、回溯法

基本思想:它是將問題的所有解羅列出來伯诬,然后構(gòu)建一顆并非真實存在的解空間樹,并對這顆樹進(jìn)行深度優(yōu)先搜索檬贰。這里介紹兩種常用的解空間樹姑廉,當(dāng)所給的問題是從n個元素的集合中找出滿足某種性質(zhì)的子集時,這時的樹成為子集樹翁涤;當(dāng)所給的問題是確定n個元素滿足某種性質(zhì)的排列時桥言,這時的樹成為排列樹。

(1)求一個數(shù)組的子集

(2)n后問題

在一個n*n的象棋盤上擺放n個皇后葵礼,使其不可以相互攻擊号阿,即使她們不能處在同一行、同一列鸳粉、統(tǒng)一對角線上扔涧。

遞歸:


非遞歸:

思想:一列列地填,并判斷位置是否合法


結(jié)果:

拓展思維:

0———

? ? ? ? ? ? ? ? ? ? ? ? ?----------------end -----

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末届谈,一起剝皮案震驚了整個濱河市枯夜,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌艰山,老刑警劉巖湖雹,帶你破解...
    沈念sama閱讀 212,080評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異曙搬,居然都是意外死亡摔吏,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,422評論 3 385
  • 文/潘曉璐 我一進(jìn)店門纵装,熙熙樓的掌柜王于貴愁眉苦臉地迎上來征讲,“玉大人,你說我怎么就攤上這事橡娄∈浚” “怎么了?”我有些...
    開封第一講書人閱讀 157,630評論 0 348
  • 文/不壞的土叔 我叫張陵瀑踢,是天一觀的道長扳还。 經(jīng)常有香客問我,道長橱夭,這世上最難降的妖魔是什么氨距? 我笑而不...
    開封第一講書人閱讀 56,554評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮棘劣,結(jié)果婚禮上俏让,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好首昔,可當(dāng)我...
    茶點故事閱讀 65,662評論 6 386
  • 文/花漫 我一把揭開白布寡喝。 她就那樣靜靜地躺著,像睡著了一般勒奇。 火紅的嫁衣襯著肌膚如雪预鬓。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,856評論 1 290
  • 那天赊颠,我揣著相機與錄音格二,去河邊找鬼。 笑死竣蹦,一個胖子當(dāng)著我的面吹牛顶猜,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播痘括,決...
    沈念sama閱讀 39,014評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼长窄,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了纲菌?” 一聲冷哼從身側(cè)響起挠日,我...
    開封第一講書人閱讀 37,752評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎翰舌,沒想到半個月后肆资,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,212評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡灶芝,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,541評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了唉韭。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片夜涕。...
    茶點故事閱讀 38,687評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖属愤,靈堂內(nèi)的尸體忽然破棺而出女器,到底是詐尸還是另有隱情,我是刑警寧澤住诸,帶...
    沈念sama閱讀 34,347評論 4 331
  • 正文 年R本政府宣布驾胆,位于F島的核電站,受9級特大地震影響贱呐,放射性物質(zhì)發(fā)生泄漏丧诺。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,973評論 3 315
  • 文/蒙蒙 一奄薇、第九天 我趴在偏房一處隱蔽的房頂上張望驳阎。 院中可真熱鬧,春花似錦、人聲如沸呵晚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,777評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽饵隙。三九已至撮珠,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間金矛,已是汗流浹背芯急。 一陣腳步聲響...
    開封第一講書人閱讀 32,006評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留绷柒,地道東北人志于。 一個月前我還...
    沈念sama閱讀 46,406評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像废睦,于是被迫代替她去往敵國和親伺绽。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,576評論 2 349

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

  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問題, 分享了一些自己做題目的經(jīng)驗嗜湃。 張土汪:刷leetcod...
    土汪閱讀 12,738評論 0 33
  • 動態(tài)規(guī)劃(Dynamic Programming) 本文包括: 動態(tài)規(guī)劃定義 狀態(tài)轉(zhuǎn)移方程 動態(tài)規(guī)劃算法步驟 最長...
    廖少少閱讀 3,268評論 0 18
  • 以前寫過一篇關(guān)于大訂單的文章奈应,今天把大訂單和小訂單的差異再詳細(xì)描述一下。 首先购披,無論是大訂單還是小訂單杖挣,都要經(jīng)歷初...
    Up大訂單銷訓(xùn)營_張毛地閱讀 1,333評論 0 1
  • 最近發(fā)現(xiàn)一個有趣的現(xiàn)象,在某個村小微信群里的女人們總是動不動的就叫群里的男人們請客刚陡。而且叫的頻率還挺高惩妇,高達(dá)一...
    臨界紫蘇閱讀 203評論 0 2