演算法設計與分析 整數劃分問題

2021-09-26 15:50:40 字數 1079 閱讀 1911

將正整數n表示成一系列正整數之和

n=n1+n2+…+nk,

其中n1≥n2≥…≥nk≥1,k≥1。

正整數n的這種表示稱為正整數n的劃分。

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

舉例:

例如正整數6有如下11種不同的劃分:

6;5+1;

4+2,4+1+1;

3+3,3+2+1,3+1+1+1;

2+2+2,2+2+1+1,2+1+1+1+1;

1+1+1+1+1+1。

遞迴思想:

(1) q(n,1)=1,n1;

當最大加數n1不大於1時,任何正整數n只有一種劃分形式,即

(2)q(n,m)=q(n,n),mn;

n1實際上不能大於n。因此,q(1,m)=1。

(3)q(n,n)=1+q(n,n-1);

正整數n的劃分由n1=n的劃分和n1≤n-1的劃分組成。

(4)q(n,m)=q(n,m-1)+q(n-m,m),n>m>1;

正整數n的最大加數n1不大於m的劃分由n1=m的劃分和n1≤n-1 的劃分組成。

可得遞迴公式如下:

正整數n的劃分數p(n)=q(n,n)。

核心**

//函式:q(int n,int m)

//作用:用來得到正整數n,最大加數不大於m的劃分個數

演算法設計與分析 整數劃分問題

1 正整數n劃分為若干正整數之和,最大加數不超過m的劃分數 n劃分最大加數不超過m 2 正整數n劃分為不超過m個正整數之和的劃分數 n劃分為m份 3 正整數n劃分為若干正奇整數之和的劃分數 4 正整數n劃分為互不相同正整數之和的劃分數 其中,整數劃分無順序,比如對7劃分,認為2 2 3和3 2 2和...

整數劃分問題 演算法

在遞迴裡,要對形參進行判斷 1 當n 1時 q 1,m 表示是對1的劃分,那麼只有一種劃分方式 1 2 當m 1時q n,1 當m 1時其實就是把讓所有加數小於等於1,那就是所有加數都是1咯 不考慮負數 當然也只有一種劃分方式 3 當n m時q n,n 此時就是對n的劃分出來的數沒有限制,預設限制就...

全排列與整數劃分演算法分析

1.全排列演算法 題目 求出1 n的全排列.思想 交換第1個元素與第i個元素,得到n個序列 把每個序列分成兩部分 第乙個元素,其餘的元素 對其餘元素執行全排列操作,記得操作完後,將這兩個元素交換回來,以方便下面的交換.演算法實現 void swap int a,int b 交換a和b void pe...