計算機演算法設計與分析筆記(二)——遞迴與分治
二 遞迴與分治
1.遞迴
1.1 定義
遞迴函式:用函式自身定義的函式
遞迴函式的兩個要素:邊界條件與遞迴方程
遞迴演算法:直接或間接呼叫自身的演算法
1.2 雙遞迴函式
當一個函式及它的一個變數是由函式自身定義時,則稱這個函式為雙遞迴函式;
例如:
Ackerman函式,其定義如下:
A(1,0)=2
A(0,m)=1 m≥0
A(n,0)=n+2 n ≥2
A(n,m)=A(A(n-1,m),m-1) n,m ≥1
1.3 典型遞迴問題
1.4 遞迴的優缺點
優點:
1)演算法簡明;
2)正確性易證明,是分析、設計的有力工具。
缺點:
1)執行效率不高;
2)堆疊空間耗費
2 分治法
2.1設計思想
設計思想是,將規模為n的問題分解為k個規模較小的子問題,使這些子問題相互獨立且與原問題相同,遞迴地解這些子問題,然後各個子問題的解合併得到原問題的解
[注意]:在用分治法設計演算法時,最好使子問題的規模大致相同。 即將一個問題分成大小相等的k個子問題
2.2 能用分治法解決的問題的特徵
分治法所能解決的問題一般具有以下特徵:
- 該問題可以分解為若干個規模較少的相同問題
- 該問題所分解出的各個子問題是相互獨立的,即子問題之間不包含公共的子問題
- 該問題的規模縮少到一定規模就可以容易地解決,問題規模不能無休止地縮小下去
4.利用該問題分解地子問題的解可以合併為該問題的解
2.3 分治法的求解過程
分治法的求解過程:
- 分解:把原問題分解為若干個規模較小、相互獨立,與原問題相同的子問題;
- 求解:若子問題規模較小且容易被解決則直接解,否則再繼續分解為更小的子問題,直到容易解決;
- 合併:將已求解的各個子問題的解,逐步合併為原問題的解
2.4演算法時間複雜性
2.5 適用問題
大數相乘、矩陣乘法、快速富立葉變換、
棋盤覆蓋、排序、選擇等。
2.6典型例題
相關文章
- 計算機演算法設計與分析——遞迴與分治策略(一)計算機演算法遞迴
- 遞迴與分治演算法練習遞迴演算法
- 系統架構設計筆記(87)—— 計算機病毒與防治架構筆記計算機
- 遞迴 & 分治演算法深度理解遞迴演算法
- 【Java資料結構與演算法筆記(二)】樹的四種遍歷方式(遞迴&非遞迴)Java資料結構演算法筆記遞迴
- 學習筆記 -《量子計算與程式設計入門》- 量子計算機硬體基礎筆記程式設計計算機
- 計算機組成與設計 讀書筆記——第三章計算機筆記
- 《計算機與電腦科學》摘錄筆記計算機筆記
- 快取遞迴計算快取遞迴
- 演算法設計與分析(fd)演算法
- 《計算機網路》讀書筆記(二)計算機網路筆記
- 演算法小專欄:遞迴與尾遞迴演算法遞迴
- 計算機組成原理與介面技術筆記(一)計算機筆記
- 二叉樹——後序遍歷的遞迴與非遞迴演算法二叉樹遞迴演算法
- 《計算機基礎與程式設計》第二週學習總結計算機程式設計
- 演算法設計與分析---論序演算法
- 演算法設計與分析-01歐幾里得演算法
- golang工作筆記(二)值傳遞與引用傳遞Golang筆記
- C++ 遞迴與物件導向程式設計基礎C++遞迴物件程式設計
- 我與計算機計算機
- 資料結構與演算法讀書筆記 - 004 -C++遞迴資料結構演算法筆記C++遞迴
- 遞迴演算法程式設計整數因子分解問題的遞迴演算法遞迴演算法程式設計
- 揹包問題的遞迴與非遞迴演算法遞迴演算法
- 遞迴程式的漸近分析(以分治為例)遞迴
- 演算法分析與設計 - 作業1演算法
- 演算法分析與設計 - 作業2演算法
- 演算法分析與設計 - 作業3演算法
- 演算法分析與設計 - 作業5演算法
- 演算法分析與設計 - 作業6演算法
- 簡讀筆記-Redis設計與實現第二章筆記Redis
- 計算機組成與設計(4)-----處理器計算機
- 微機原理與系統設計筆記4 | 組合語言程式設計與其他指令筆記組合語言程式設計
- 計算機叢集與網格計算計算機
- <Redis設計與實現>筆記【轉】Redis筆記
- 計算機組成原理與介面技術(二)計算機
- 微機原理與系統設計筆記6 | 儲存器系統設計筆記
- 設計模式面試與筆試題剖析(二)設計模式面試筆試
- 人腦與計算機計算機