計算機演算法設計與分析筆記(二)——遞迴與分治

qq_45904930發表於2020-12-06

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 能用分治法解決的問題的特徵

分治法所能解決的問題一般具有以下特徵:

  1. 該問題可以分解為若干個規模較少的相同問題
  2. 該問題所分解出的各個子問題是相互獨立的,即子問題之間不包含公共的子問題
  3. 該問題的規模縮少到一定規模就可以容易地解決,問題規模不能無休止地縮小下去
    4.利用該問題分解地子問題的解可以合併為該問題的解

2.3 分治法的求解過程

分治法的求解過程:

  1. 分解:把原問題分解為若干個規模較小、相互獨立,與原問題相同的子問題;
  2. 求解:若子問題規模較小且容易被解決則直接解,否則再繼續分解為更小的子問題,直到容易解決;
  3. 合併:將已求解的各個子問題的解,逐步合併為原問題的解

2.4演算法時間複雜性

在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

2.5 適用問題

大數相乘、矩陣乘法、快速富立葉變換、
棋盤覆蓋、排序、選擇等。

2.6典型例題

二分搜尋問題
棋盤覆蓋

相關文章