c#求一个高效的组合算法,N个数选M个数的组合
答案:2 悬赏:60 手机版
解决时间 2021-11-28 22:10
- 提问者网友:刺鸟
- 2021-11-28 06:09
c#求一个高效的组合算法,N个数选M个数的组合
最佳答案
- 五星知识达人网友:街头电车
- 2021-11-28 07:13
这个东西,是超级计算机才能计算的。
我试了一下,N=50,M=22的时候是很大的数量级了,在计算的过程中会产生很大的变量,导致内存溢出。
一般的PC很难算。
应该没有可以解决的办法。
我试了一下,N=50,M=22的时候是很大的数量级了,在计算的过程中会产生很大的变量,导致内存溢出。
一般的PC很难算。
应该没有可以解决的办法。
全部回答
- 1楼网友:时间的尘埃
- 2021-11-28 08:52
楼上真是认知短浅。
就用二分递归法,辅以记忆法优化,去除重复计算的过程,可以做到时间复杂度为O(n^2),计算C(50,22)就要 0.005秒
自己写的代码,计算C(n,m):
static __int64 table[100][100]={{0,0}};
__int64 combination(int n,int m)
{
if(table[n][m]!=0)
return table[n][m];
if(m==0 || m==n)
return 1;
if(m==1)
return n;
return (table[n-1][m-1]=combination_3(n-1,m-1)) + (table[n-1][m]=combination_3(n-1,m));
}
就用二分递归法,辅以记忆法优化,去除重复计算的过程,可以做到时间复杂度为O(n^2),计算C(50,22)就要 0.005秒
自己写的代码,计算C(n,m):
static __int64 table[100][100]={{0,0}};
__int64 combination(int n,int m)
{
if(table[n][m]!=0)
return table[n][m];
if(m==0 || m==n)
return 1;
if(m==1)
return n;
return (table[n-1][m-1]=combination_3(n-1,m-1)) + (table[n-1][m]=combination_3(n-1,m));
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯