您的位置:首页 > 其它

动态规划之组合求解

2014-09-22 11:05 211 查看
动态规划

求解决策过程(decision process)最优化的数学方法。

一、组合C(n,k),时间复杂度为O(n*k),空间复杂度为O(n^2),直接上代码
int min(int a1,int a2) {

return a1<a2 ? a1 : a2;

}

int CNK(int n,int k){

int **a = (int**)malloc(sizeof(int*)*(n+1));

int i,j,r,result;

for(r=0;r<=n;r++)

a[r] = (int*)malloc(sizeof(int)*(n+1));

for(i=0;i<=n;i++)

for(j=0;j<=min(i,k);j++)

if(j==i || j==0)

a[i][j] = 1;

else

a[i][j] = a[i-1][j-1]+a[i-1][j];

result = a
[k];

for(i=0;i<=n;i++) // free 2-Dimens array

free(*(a+i));

free(a);

return result;

}
二、优化空间 时间复杂度为O(k)
int CNK1(int n,int k){

if(n<0 || k<0)

return -1;

int total=k;

int r=1,s=1;

while(total>0){

r*=(n-total+1); // 分子

s*=total; // 分母

total--;

}

return (int)r/s;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: