算法-智能算法/傳統算法-多種算法介紹及異同點
目錄
一:描述分治法,貪心算法,動態規劃算法,回溯算法,分支限界的基本思想,適用範圍和應用
二:請介紹蟻羣算法,遺傳算法,離子羣算法的思想,給出其中一個算法的計算流程圖。請描述單層感知層結構,請描述BP神經網絡誤差反向傳播原理
一:描述分治法,貪心算法,動態規劃算法,回溯算法,分支限界的基本思想,適用範圍和應用
1.1分治法
1.1.1 基本思想
將規模爲n的問題分解爲k個規模較小的子問題,使這些子問題相互獨立可分別求解,再將k個子問題的解合併成原問題的解.如子問題的規模仍很大,則反覆分解直到問題小到可直接求解爲止.在分治法中,子問題的解法通常與原問題相同,從而導致遞歸過程.
1.1.2 適用範圍
該問題的規模縮小到一定的程度就可以容易地解決;該問題可以分解爲若干個規模較小的相同問題;分解出的子問題的解可以合併爲原問題的解;分解出的各個子問題是相互獨立的。
1.1.3 典型的應用問題
二分搜索,快速排序,歸併排序,選擇最大數/最小數,芯片測試問題
1.2 貪心算法
1.2.1 基本思想
將問題的求解過程看作一系列選擇(每次選擇確定一個輸入值),每次選擇都是當前狀態下的最好選擇(局部最優解).每作一次選擇後,所求問題會簡化爲一個規模更小的子問題.從而通過每一步的最優解逐步達到整體最優解
1.2.2 適用問題
具備貪心選擇和最優子結構性質的最優化問題。貪心選擇是指:整體的最優解可通過一系列局部最優解達到.每次的選擇可以依賴以前作出的選擇,但不能依賴於後面的選擇。最優子結構是指:問題的整體最優解中包含着它的子問題的最優解.
1.2.3 常見應用
揹包問題,最小生成樹,最短路徑,作業調度等等
算法優點:求解速度快,時間複雜性有較低的階.
算法缺點:需證明是最優解.
1.3 回溯算法
1.3.1基本思想
回溯法的基本思想是在一棵含有問題全部可能解的狀態空間樹上進行深度優先搜索,解爲葉子結點。搜索過程中,每到達一個結點時,則判斷該結點爲根的子樹是否含有問題的解,如果可以確定該子樹中不含有問題的解,則放棄對該子樹的搜索,退回到上層父結點,繼續下一步深度優先搜索過程。在回溯法中,並不是先構造出整棵狀態空間樹,再進行搜索,而是在搜索過程,逐步構造出狀態空間樹,即邊搜索,邊構造。
求解過程可表示爲在一棵解空間樹作深度優先搜索.
搜索過程:搜索按深度優先策略從根開始,當搜索到任一結點時,判斷該點是否滿足約束條件D(剪枝函數),滿足則繼續向下深度優先搜索,否則跳過該結點以下的子樹(剪枝), 向上逐級回溯
1.3.2適用問題
它適用於解一些組合數較大的問題。找出滿足約束條件的所有解. 回溯算法適應求解組合搜索和組合優化問題
解題步驟:1).針對所給問題,定義問題的解空間 2).確定約束條件. 3).以深度優先方式搜索解空間.
1.3.3 常見應用
子集和問題,裝載問題,批處理作業調度,n後問題,最大團問題,圖的着色問題
1.4 分支限界法
1.4.1基本思想
在問題的邊帶權解空間樹中進行廣度優先搜索. 找一個回答結點使對應路權最小。當搜索到一個擴展結點時,一次性擴展它的所有兒子,將滿足約束條件且最小耗費函數£目標函數限界的兒子,插入活動結點表中, 再從活動結點表中取下一結點同樣擴展. 直到找到所需的解或活動結點表爲空.
1.4.2 適用問題
適用於求解最優化問題。找出滿足約束條件的一個解或者特定意義下的最優解。
1)開始求解時無法估計解是否存在。2)已知有解,對解的要求較高。3)有些問題在列出全部解以後,就可以求的最佳解。
1.4.3 常見應用
0-1揹包,n皇后問題,着色問題,批處理作業調度問題,裝載問題。
1.5.動態規劃
1.5.1基本思想
將問題的求解過程化爲多步選擇,在每一步選擇上,列出各種可能的結果(各子問題的可行解),捨去那些肯定不能成爲最優解的局部解.最後一步得到的解必是最優解.[與貪心算法比較]都是將求解過程化爲多步決策.區別是:貪心法:每採用一次貪心策略便做出唯一決策,求解過程只產生一個決策序列;求解過程自頂向下,不一定有最優解.
動態規劃:求解過程多爲自底向上,求解過程產生多個選擇序列, 下一步的選擇依賴上一步的結果..總能得到最優解
1.5.2 適用問題
具備最優子結構性質和子問題重疊性的最優化問題.
最優子結構:問題的整體的最優解中包含着它的子問題的最優解
子問題重疊性:第i+1步問題的求解中包含第i步子問題的最優解,形成遞歸求解.
[算法步驟]1).分析最優解的結構. 2).給出計算局部最優解值的遞歸關係. 3).自底向上計算局部最優解的值. 4).根據最優解的值構造最優解.
1.5.3 常見應用
0-1揹包問題,圖像壓縮,最短路徑,矩陣連乘,作業調度等等
二:請介紹蟻羣算法,遺傳算法,離子羣算法的思想,給出其中一個算法的計算流程圖。請描述單層感知層結構,請描述BP神經網絡誤差反向傳播原理
2.1 蟻羣算法
2.1.1 蟻羣算法理解
通俗來講,路徑長度越短,信息素濃度越大,螞蟻會更加傾向選擇這條路徑。
2.1.2 蟻羣算法流程圖
2.2 遺傳算法
2.2.1 遺傳算法引例
2.2.2 遺傳算法定義(以例子說明)
遺傳算法(Genetic Algorithm, GA)起源於對生物系統所進行的計算機模擬研究。它是模仿自然界生物進化機制發展起來的隨機全局搜索和優化方法,借鑑了達爾文的進化論和孟德爾的遺傳學說。其本質是一種高效、並行、全局搜索的方法,能在搜索過程中自動獲取和積累有關搜索空間的知識,並自適應地控制搜索過程以求得最佳解
2.2.3 遺傳算法流程圖
2.3 粒子羣算法
2.3.1 粒子羣算法定義
2.3.2 粒子羣算法流程圖
2.4 單層感知層
2.4.1 單層感知器介紹
受到生物神經網絡的啓發,計算機學家Frank Rosenblatt在20世紀60年代提出了一種模擬生物神經網絡的的人工神經網絡結構,稱爲感知器(Perceptron)
圖中x1,x2,x3爲輸入信號,類似於生物神經網絡中的樹突。w1,w2,w3分別爲x1,x2,x3的權值,它可以調節輸入信號的值的大小,讓輸入信號變大(w>0),不變(w=0)或者減小(w<0)。可以理解爲生物神經網絡中的輸入阻礙,樹突的信號不一定是100%傳遞到細胞核的,可能某些樹突的信號有80%傳遞到細胞核,某些樹突的信號有50%傳遞到細胞核,某些樹突的信號被完全阻礙。
公式
表示細胞的輸入信號在細胞核的位置進行彙總,然後再加上該細胞本身自帶的信號b,b一般稱爲偏置值(Bias)。
f(x)稱爲激活函數,可以理解爲信號在軸突上進行的變化。在單層感知器中使用的激活函數是sign(x)激活函數。該函數的特點是當x>0時,輸出值爲1;當x=0時,輸出值爲0,;當x<0時,輸出值爲-1。sign(x)函數圖像如圖
y就是
爲單層感知器的輸出結果。
2.4.2 單層感知器與多層感知器
單層感知器(baiSingle Layer Perceptron)是最簡單的神經網絡。它包含輸入層和輸出層,而輸入層和輸出層是直接相連的。 多層感知器(Multi-Layer Perceptrons),包含多層計算。相對於單層感知器,輸出端從一個變到了多個;輸入端和輸出端之間也不光只有一層,現在又兩層:輸出層和隱藏層
2.5 反向傳播原理
2.5.1 反向傳播定義
反向傳播(英語:Backpropagation,縮寫爲BP)是“誤差反向傳播”的簡稱,是一種與最優化方法(如梯度下降法)結合使用的,用來訓練人工神經網絡的常見方法。該方法計算對網絡中所有權重計算損失函數的梯度。這個梯度會反饋給最優化方法,用來更新權值以最小化損失函數。 在神經網絡上執行梯度下降法的主要算法。該算法會先按前向傳播方式計算(並緩存)每個節點的輸出值,然後再按反向傳播遍歷圖的方式計算損失函數值相對於每個參數的偏導數。
2.5.2 反向傳播原理
反向傳播算法主要由兩個環節(激勵傳播、權重更新)反覆循環迭代,直到網絡的對輸入的響應達到預定的目標範圍爲止。BP算法的學習過程由正向傳播過程和反向傳播過程組成。在正向傳播過程中,輸入信息通過輸入層經隱含層,逐層處理並傳向輸出層。如果在輸出層得不到期望的輸出值,則取輸出與期望的誤差的平方和作爲目標函數,轉入反向傳播,逐層求出目標函數對各神經元權值的偏導數,構成目標函數對權值向量的梯量,作爲修改權值的依據,網絡的學習在權值修改過程中完成。誤差達到所期望值時,網絡學習結束。
(1)激勵傳播。每次迭代中的傳播環節包含兩步:
- (前向傳播階段)將訓練輸入送入網絡以獲得激勵響應;
- (反向傳播階段)將激勵響應同訓練輸入對應的目標輸出求差,從而獲得隱層和輸出層的響應誤差。
(2)權重更新。對於每個突觸上的權重,按照以下步驟進行更新:
- 將輸入激勵和響應誤差相乘,從而獲得權重的梯度;
- 將這個梯度乘上一個比例並取反後加到權重上。
- 這個比例將會影響到訓練過程的速度和效果,因此稱爲“學習率”或“步長”。梯度的方向指明瞭誤差擴大的方向,因此在更新權重的時候需要對其取反,從而減小權重引起的誤差。
3.貪心,遞歸,分治,動態規劃等傳統算法異同點比較
3.1遞推和遞歸異同點
遞推: 從已知到未知,從小到達(比如每天胖一斤,一個月後就胖了30斤)
遞歸: 從未知到已知,從大到小,再從小到大(比如,某XX相當美國總統,那麼美國總統需要什麼呢,需要名校畢業,那麼怎麼才能進入名校呢,需要現在努力學習,那麼怎麼努力學習呢,需要卸載王者農藥)(即一步步分解一個大目標,然後通過完成一個個小目標,去完成一個大目標)
程序調用自身的編程技巧稱爲遞歸。遞歸做爲一種算法在程序設計語言中廣泛應用。 一個過程或函數在其定義或說明中有直接或間接調用自身的一種方法,它通常把一個大型複雜的問題層層轉化爲一個與原問題相似的規模較小的問題來求解,遞歸策略只需少量的程序就可描述出解題過程所需要的多次重複計算,大大地減少了程序的代碼量。 遞推算法是一種用若干步可重複的簡運算(規律)來描述複雜問題的方法。遞推是序列計算機中的一種常用算法。它是按照一定的規律來計算序列中的每個項,通常是通過計算機前面的一些項來得出序列中的指定象的值。 迭代是重複反饋過程的活動,其目的通常是爲了逼近所需目標或結果。每一次對過程的重複稱爲一次“迭代”,而每一次迭代得到的結果會作爲下一次迭代的初始值。
3.2 遞歸和分治異同點
遞歸是一種編程技巧,一種解決問題的思維方式。分治是手段。分治法就是把1個分爲多個,遞歸法就是把多個歸一的解決問題方法
3.3 貪心和動態規劃異同點
與分治法不同的是,適合於用動態規劃法求解的問題,經分解得到的子問題往往不是相互獨立的。
3.4 分支限界和動態規劃異同點
分支限界法類似於回溯法,也是一種在問題的解空間樹T上搜索問題解的算法。但在一般情況下,分支限界法與回溯法的求解目標不同。回溯法的求解目標是找出T中滿足約束條件的所有解,而分支限界法的求解目標則是找出滿足約束條件的一個解,或是在滿足約束條件的解中找出使某一目標函數值達到極大或極小的解,即在某種意義下的最優解。 由於求解目標不同,導致分支限界法與回溯法在解空間樹T上的搜索方式也不相同。回溯法以深度優先的方式搜索解空間樹T,而分支限界法則以廣度優先或以最小耗費優先的方式搜索解空間樹T
4.補充幾個基礎方法(典型例題)
4.1 使用主方法求解遞歸式的漸進的界
舉例:下面例題使用上述公式:選A
4.2 利用數學公式計算
解:(1)while(n>=1): 說明一共要執行n次for循環,即執行(n= 2^t)次for循環;
(2)for第一次,最開始n爲2^t,最後一次是1次(此時n爲1)
(3)理解上面的(1)和(2)。n= 2^t,可以看到t的取值爲0到t,即一共有(t+1)次,我們可以看到加法的執行次數相當於是首項爲1,公比爲2,項的數量爲(t+1)的公比數量。
(4)Sn = 2^(t+1)-1 = 2n-1.
五 參考文章