有没有办法在O(1)中找到组合的数目(不是实际的组合)我在这里读到一个答案-time and space complexity of finding combination (nCr)答案是O(n!)找到实际的组合,但只需要O(1)来找到这样的组合的数目我不明白怎么能做到请在O(1)中解释如何做到这一点这里,O(1)是时间复杂度。
[编辑]:我面临的主要问题是如何实现n在O(1)中。
最佳答案
请检查下面的C
程序它将n
和r
作为输入并计算nCr值:
int main(){
int n, r;
scanf("%d", &n);
scanf("%d", &r);
/*
* nCr = n! / !(n-r) / !(r)
* = n * n-1 * n-2 * .... * 1 / (n-r * n-r-1 * .. * 1) /
* (r * r-1 * ... * 1)
* = n * n-1 * n-2 * n-r+1 / (r * r-1 * ... * 1)
*
*/
int result = 1;
int i;
for (i=0; i<r; i++){
result *= (n-i); // n * n-1 * n-2 * .... * n-(r-1)
result /= (i+1); // r * r-1 * ... * 1
}
/* The loop is going to run only r times for any n
* Time to calculate nCr : O(r)
* Space complexity: O(1)
*/
printf("Result of C(%d, %d) = %d", n, r, result);
return 0;
}
要计算它,循环只运行“r”次。
因此,计算NCR值的时间复杂度为
O(r)
但空间复杂度
O(1)
我想你一定是混淆了这两个复杂的秩序。希望,这对你有帮助。