小仙女講軟考之演算法設計和分析
小仙女課堂開課啦,演算法設計總學不好?多半是沒理解透基本概念,看小仙女牌部落格就好啦。
分治法——分而治之,各個突破
現實匯入:
想想秦始皇是怎麼統一六國的?“遠交近攻,各個擊破”。
對嘍,先集中兵力打一個國家,成功後再攻擊另一個。這便體現了分治的思想。
先打近的,再打遠的,如果先打遠的再打近的,會激起各國聯合抗秦的鬥志。所以,如果攻不下近的國家,遠的國家也打不成,這體現了遞迴思想。
why?
原問題太大,太複雜,分開來看會容易些。
how?
分——治——合
what?
.歸併排序:
先在各小組內排,再擴大小組
.最大子段和問題:
在8745319序列中找出含有3個元素的最大子段和?最大子段為
在一個給出序列中找出含有N個數字的連續欄位,條件是其和最大。
.漢諾塔問題:
假設共有10個盤子,先借助C,把前9個盤子放到B上;然後再將第10個盤子放到C上;最後藉助A,將B上的9個盤子放到C上。
動態規劃法——拿最利於自己的東西
現實引入:
小偷去超市偷東西,假如已經將揹包裝滿,準備離開時看到門口有塊黃金可以偷,那他偷還是不偷?
有人說不偷,那如果他的揹包裡放著些吃的,把吃的拿出來,把黃金放進去,豈不是更好?
有人說偷,那如果他的揹包裡是價值更大的鑽石呢?如果換了豈不是愚蠢。
在偷與不偷的思考過程中,就進行了一次動態規劃的演算。
why?
最優子結構;重疊子問題
how?
定義什麼是最優解——先假定已持有最優解——考慮是否採用面前東西
what?
.0-1揹包問題:
放還是不放,is a question
.最長公共子序列(LCS):
12345和45679,求其LCS?45
貪心法——先吃了最優的
現實引入:
餓漢子問題。當你特別餓的時候,是見著啥吃啥還是等著挑個最美味的?
why?
最優子結構;貪心選擇性質
how?
僅根據當前已有的資訊作出選擇,且一旦作出選擇就不再改變。就像你吃下去了就沒辦法再吐出來了。
what?
.活動選擇問題(這個問題本仙女不懂,待我回天上後再仔細思考一下)
.揹包問題可以按“最小重量先放”、“最大價值先放”等原則,將東西放入揹包
回溯法——深度優先查詢
現實引入:
讓你去一塊玉米地,只可前進或後退,最終要找到其中最大個的玉米,你怎麼做?
往前走的過程中,發現還是剛才碰到的那個大,再往後退去找它。這個往後退的過程就是“回溯”
why?
及時“剪枝”,能避免大量無謂的搜尋。
how?
定義解空間——確定易於搜尋的解空間結構——以深度優先的方式搜尋解空間
what?
.0-1揹包問題
.n皇后問題
小結:
本仙女這次下凡只是說說這些演算法的基本概念,至於對各方法的比較和其在程式碼中是怎麼具體實現的,請聽以後的以後分解。
一家之言,姑妄論之。如果讀者有什麼想法可以交流,就再好不過啦~