常用演算法思想複習之《遞迴與分治》

2022-08-31 08:12:11 字數 968 閱讀 5965

1、概述

在解決一些複雜問題,特別是解決一些規模較大的問題時,常常將問題進行分解。具體來說,

就是將乙個規模較大的問題分割成規模較小的同類問題,然後將這些小的問題逐個加以解決,

最終也就將整個大的問題解決了。這種分而治之的思想稱為分治的思想。

所謂遞迴演算法,就是一種直接或間接地呼叫原演算法本身的一種演算法。遞迴與分治的演算法思想

往往相伴而生。

2、問題例項

例:求正整數不同的劃分個數。

1)問題解釋:將乙個正整數n表示成一系列正整數之和:

n=n1+n2+......+nk

稱為正整數n的乙個劃分。求正整數n的不同劃分個數。

2)問題分析

根據正整數劃分的定義,可以總結出一下規律:

設標記p(n,m)表示正整數n的所有不同劃分中,最大加數不大於m的劃分個數。

如:p(6,2)表示6的最大加數不大於2的所有劃分

p(n,1)=1, n>=1;

正整數n的劃分中加數不大於1的劃分數只有一種

p(n,m)=p(n,n), m>=n;

不存在最大加數大於n的正整數n的劃分

p(n,n)=p(n,n-1)+1

最大加數為n的正整數n的劃分只有一種

p(n,m)=p(n,m-1)+p(n-m,m),  n>m>1;

p(n,m)=p(n,m-1)+n的最大加數為m的劃分個數

n的最大加數為m的劃分個數記為:q(n,m)

則q(n,m)=p(n-m,m),因為n-m的劃分的個數決定了q(n,m)的

劃分個數,又q(n,m)中最大加數為m所以n-m的劃分中最大加數

也為m。故q(n,m)=p(n-m,m),即,p(n,m)=p(n,m-1)+p(n-m,m)

根據以上規律可以寫出遞迴程式:

view code

1

int p(int n, int m)

2

演算法思想之分治遞迴策略

摘自 鄒恒明 演算法之道 採取分治策略解決問題有三個步驟 1 將問題分解為若干個小的子問題。每個子問題和大問題同型,但規模更小。2 遞迴解決這些問題。3 將子問題的解答合併,並獲得大問題的解答。第二步中 遞迴解決這些子問題 指的是按照同樣的分治策略進行求解,即通過將這些子問題分解到更小的孫子問題來進...

分治思想之排序演算法

分而治之是設計高效演算法的乙個重要思想。本文主要總結一下分治思想在排序演算法中的運用。排序在商業資料處理和現代科學計算中有著重要的地位,它能夠應用於事物處理 組合優化 天體物理學 分子動力學 語言學 基因組學 天氣預報和很多其它領域。演算法 發展至今,已經出現過很多的排序演算法。如選擇排序,插入排序...

資料結構與演算法(3) 遞迴與分治思想

遞迴思想 遞迴就是有去 遞去 有回 歸來 有去 是指 遞迴問題必須可以分解為若干個規模較小,與原問題形式相同的子問題,這些子問題可以用相同的解題思路來解決,就像鑰匙可以開啟所有門上的鎖一樣 有回 是指 這些問題的演化過程是乙個從大到小,由近及遠的過程,並且會有乙個明確的終點 臨界點 一旦到達了這個臨...