有没有办法在O(1)中找到组合的数目(不是实际的组合)我在这里读到一个答案-time and space complexity of finding combination (nCr)答案是O(n!)找到实际的组合,但只需要O(1)来找到这样的组合的数目我不明白怎么能做到请在O(1)中解释如何做到这一点这里,O(1)是时间复杂度。
[编辑]:我面临的主要问题是如何实现n在O(1)中。

最佳答案

请检查下面的C程序它将nr作为输入并计算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)
我想你一定是混淆了这两个复杂的秩序。希望,这对你有帮助。

10-04 10:19