計算機演算法設計與分析筆記(二)——遞迴與分治
二 遞迴與分治
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典型例題
相關文章
- 遞迴與分治演算法練習遞迴演算法
- 20200925—遞迴與分治遞迴
- 遞迴與分治之大整數乘法遞迴
- 系統架構設計筆記(87)—— 計算機病毒與防治架構筆記計算機
- 學習筆記 -《量子計算與程式設計入門》- 量子計算機硬體基礎筆記程式設計計算機
- 【Java資料結構與演算法筆記(二)】樹的四種遍歷方式(遞迴&非遞迴)Java資料結構演算法筆記遞迴
- 計算機組成與設計 讀書筆記——第三章計算機筆記
- 遞迴 & 分治演算法深度理解遞迴演算法
- 《計算機與電腦科學》摘錄筆記計算機筆記
- 演算法設計與分析(fd)演算法
- 快取遞迴計算快取遞迴
- 計算機組成原理與介面技術筆記(一)計算機筆記
- 演算法設計與分析---論序演算法
- 演算法小專欄:遞迴與尾遞迴演算法遞迴
- 二叉樹——後序遍歷的遞迴與非遞迴演算法二叉樹遞迴演算法
- 《計算機基礎與程式設計》第二週學習總結計算機程式設計
- golang工作筆記(二)值傳遞與引用傳遞Golang筆記
- C++ 遞迴與物件導向程式設計基礎C++遞迴物件程式設計
- 資料結構與演算法讀書筆記 - 004 -C++遞迴資料結構演算法筆記C++遞迴
- 我與計算機計算機
- 演算法分析與設計 - 作業1演算法
- 演算法分析與設計 - 作業2演算法
- 演算法分析與設計 - 作業3演算法
- 演算法分析與設計 - 作業6演算法
- 演算法分析與設計 - 作業5演算法
- 簡讀筆記-Redis設計與實現第二章筆記Redis
- Java程式設計(2021春)——第二章筆記與思考Java程式設計筆記
- <Redis設計與實現>筆記【轉】Redis筆記
- 微機原理與系統設計筆記4 | 組合語言程式設計與其他指令筆記組合語言程式設計
- 微機原理與系統設計筆記6 | 儲存器系統設計筆記
- 計算機組成與設計(4)-----處理器計算機
- 揹包問題的遞迴與非遞迴演算法遞迴演算法
- 分治與遞迴-找k個臨近中位數的數遞迴
- 微機原理與系統設計筆記1 | 緒論與數製表示筆記
- 計算機組成原理與介面技術(二)計算機
- 【演算法分析與設計】輾轉相除法演算法
- 人腦與計算機計算機
- Lua設計與實現--讀書筆記筆記