아래의 C
프로그램을 확인하십시오. 이것은 입력으로서 n
및 r
소요 N C 산출 R 값 :
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)
입니다. 희망, 그것은 당신을 돕는다.
가 즉석에서 조회 테이블을 생성 . –
처음부터 n을 계산할 수 없습니다! O (1). 팩토리얼 값을 저장 한 후 ncr을 찾는 게시자 회담이 될 수 있습니다. –
[Stirling 's approximation] (https://en.wikipedia.org/wiki/Stirling%27s_approximation)을 사용하여 * approximate * 계승을 찾을 수 있습니다. –