問題整数再帰分割分析

問題整数再帰分割分析

         正の整数nは、正の整数であり、一連のように表されます

         N = N1 + N2 + N3 + N4 + ... + NK(ここで、N1> = N2> N3 => = N4 ........> = NK> 0、K> = 1)

         これは、正の整数となるnのnが正の整数除算を表します。

         異なる正の整数の数を割るN P(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。

         この問題は、に分割されると考えN以下、この数をmとなる数の加数の分割以上にすることができます。

         例えば、図6は、実際より少ない加数6 6のように、6未満6等しい分割加数に分割されて分割されると考えることができます

         我々は比較的容易に解決するために、このような観点から、その思考を見つけるためなぜ、この男、それを紹介します。

         我々は、Qと呼ばれるタイプの数を分割する(n、m)は

再帰的であるようにパラメータの決意

n = 1つのQ(1、M)(1)分割され表す1、唯一1つの分割方法1

(2)M = 1、Qは(N、1):M = 1は、実際には1より全て加算し、置かれたとき、すべての加数はわずか1(考慮しない陰性)であり、もちろん、一つだけ通行区分の種類

(3)場合のn == M Q(N、N):このときの分割数のうちのn限定されるものではなく、デフォルトの制限がnより大きくない、この時点でクラス分割の総数は、2つのケースを比較することでした良い解決策:

           (N == Mため、またはM)Nを含む数に1スプリットアップ:それはわずか6 6分割の例の唯一の方法である。一つの方法

           2(M == Nため、またはM)、Nに分割アップの数は含まれない:6は6未満の数に分割されると考えることができる未満又は5に等しい実際には、実際には、(次のqを見つけますN、N-1)またはq(N、M-1)、この場合、N> M-1、回帰式がQ(N、Mに解決されるに)N> M

     一緒にQ(N、N)= 1 + Q(N、M-1)

N> M(4):出会いは、実際には、N分割状態で見ることができるこのような問題は、すべてのより小さい数mに分割され、上記において、6分割の11種類があり、数は少ない数のような5よりなるアウトするために分割したときにそれは、数を制限するために6のために刻まれていなかった、それはのない11種類です。

 

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。

このとき2つのケース:M Mあっとありません:

   Mは含まれていません。

    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。

    これらの場合、実際には、回帰式に、以下ケース4から6の分割数を計算するか、Qである(N、M-1)

    Mが含まれています:

    5 + 1。

    今回は、mは主人公がもはやある分割数は、我々は唯一のラインの分割nmのうち、(キー)を尋ねると判断されます

    NM応じてMのこの時点で分割、以来。

    例えば含む5メートル= 6-5 = 1の分割は、例えば、限定するものではないが、4の分割分割含むこと= 2,2 6-4要求されます。

    漸化式Q(NM、m)の内側に配置されます

(5)Q(n、m)はN <M、例えば、n = 6、M = 7は、実際には、6を解決以下、7以下を与えるために6の数を割ることによって得られます

         この場合には、Qが(N、N)を解くためのケースです。

上記の分析に基づいて:

Q(N、M)= 1、場合N == 1。

Q(N、M)= 1、M == 1。

Q(N、M)= Q(N、n)は、当N <M。

Q(N、M)= Q(N、M-1)+1、N == M。

Q(N、M)= Q(N - M、M)+ Q(N、M -1)、当N> M。

 

 

 

 

#include<iostream>
#include<ctime>
using namespace std;
int q( int n , int m ){
	if( n==1 || m==1 ){
		return 1;
	}else if(  n > m  ){
	 	 return q( n-m , m )+q( n , m-1 ); //关键所在
	}else if( n < m ){
		return q( n , n );
	}else{
		return 1+q( n,n-1 );
	}
}
int main(){
	double start,stop,dur;
	start=clock();
	int a=6;
	cout<<q(6,6);
	stop=clock();
	dur=stop-start;
	cout<<"\n用时:"<<dur<<"毫秒\n";
	return 0;
}

 

公開された736元の記事 ウォンの賞賛123 ・は 80000 +を見て

おすすめ

転載: blog.csdn.net/S_999999/article/details/103692647