RadarURL

조회 수 6008 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

먼저 순열(permutation)과 조합(combination)에 대해 알아보자

 

 

 

순열 : 서로다른 n개 중 r개를 택하여 순서대로 나열하는 방법의 수 (표시 : nPr)

 

         n (n-1) (n-2) ..... (n-r+1)  : 10P3 이면 10x9x8                 즉 10! / 7! 이 되고,

                                                12P5 이면 12x11x10x9x8        즉 12! / 7! 이 된다.

 

         위 식에서 분자와 분모에 (n-r)!을 곱해주면

  

                         n!  

        nPr =   (n-r)!         이 된다.

 

 

 

 

중복순열 : 서로다른 n개 중 중복을 허용하여 r개를 선택해 순서대로 나열하는 방법의 수(표시 : nr )

 

         중복을 허용하므로, 각각의 선택에 대한 확률은 n이 된다.

 

         즉   n^r  (n의 r승)

 

 

 

 

 

조합 : 서로다른 n개 중 중복을 허용하여 r개를 선택하는것.  (표시 : nCr)

        순열과 비교했을때, 순서가 없는 것이 조합이다.

 

         즉, {a, b, c}에서 2개를 선택한다고 할때

         

              nPr = {ab, ac, bc, ba, ca, cb} 총 여섯개이지만,

              nCr = {ab, ac, bc} 이렇게 세가지가 된다.

 

 

         r개를 선택하는 순열에서 순서를 무시하게 되면,

 

         서로 같은 조합은 r!개가 나온다.

 

         그러므로

 

                                            n!   

       nCr =   nPr / r! =   r!(n-r)!         이 된다.

 

 

 

 

 

자 이제 본격적으로 C언어와 만나보도록 하자

 

 

 

위의 공식대로 계산할 경우 n의 값이 커짐에 따라서

 

n! 이 크게 늘어나 오버플로우(overflow)를 유발한다.

 

         n=13 일 때, 13! = 6,227,020,800 .       (4byte unsigned int 형의 최대값은 4,294,967,296)

 

 

자 이제, nCr을 점화식을 이용하여 표현해 보면.

 

 

 

                      n-r+1 

          nCr =   r     nCr-1  ( n>0 )  

          nCr = 1                 ( n=0 )   와 같이 나타낼 수 있다.

 

 

 

자 드디어 프로그래밍이다.

 

재귀함수를 이용하여 간단하게 nCr을 표현해보자.

 

 

 

 

long combi(int n, int r){

 

        if(n<0 || r<0){                                                         // 이 부분은 main 함수 내에서 처리하게되면,

                 printf(" n과 r은 양의 정수이어야 합니다");     // 실제로 꼭 필요한 부분은 아니지만,

                 break;                                                            // 예외를 생각하면서 코딩을 하는게

        }                                                                                // 좋을거라 생각한다.

        

        if(r==1){

                return 1;

        }else{

                return ((n-r+1)/r) * combi(n, r-1);

        }

}

       

 

 

 

덧글 : 재귀함수는 비교적 간단하게 함수를 구현할수 있다.

         위의 예에서 주석부분을 제외하면 실제로 combi() 함수는

         실제로 100글자를 넘지 않는다.

         하지만, 매번마다 함수를 호출하여 메모리를 잡아먹게 되므로,

         실제  재귀구조를 이용하는데에는 신중해야할 필요가 있다

 

출처 : http://blog.naver.com/pair00/120035649468

?

공부 게시판

공부에 도움되는 글을 올려주세요.

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
공지 [공지] 공부 게시판 입니다. 처누 2003.08.18 927915
1486 논문 Stephen Cook & Leonid Levin file JaeSoo 2012.07.30 5413
1485 윈도우즈 익스플로러에서 gif, jpg 파일이 bmp로 저장이 되는 원인,사례등에 대하여 file JaeSoo 2012.07.30 4086
1484 사무 소프트웨어 엑셀 2010 창 두개 띄우기 file JaeSoo 2012.07.30 10124
1483 논문 Brute Force(BF) file JaeSoo 2012.07.30 4734
1482 응용 프로그래밍 C 함수별 실행시간 측정 JaeSoo 2012.07.30 4943
1481 논문 경우의 수와 컴비네이션 file JaeSoo 2012.07.30 5513
1480 논문 BruteForce가 뭐에요? 1 JaeSoo 2012.07.30 6650
1479 업무 경력증명서 발급 관련 - 근로기준법 상 사용증명서(경력증명서) 발급 의무 file JaeSoo 2012.07.30 4073
1478 업무 공정위, 자산 5조원 이상 상호출자제한 기업집단으로 63개 지정 file JaeSoo 2012.07.31 7166
1477 기타 탕비실(湯沸室)이란? JaeSoo 2012.07.31 4959
1476 구글 애드센스 구글 애드센스 첫 수익금 - 구글 수표 도착 file JaeSoo 2012.08.04 5094
1475 구글 애드센스 애드센스 지급보류 해제와 수익금 수령방법, 오해와 진실 file JaeSoo 2012.08.04 5451
1474 구글 애드센스 첫 번째 구글 애드센스 수표를 받았어요~ 외화 수표 환전 방법 file JaeSoo 2012.08.04 6096
1473 업무 직위, 직책, 직급 단어의 차이점 JaeSoo 2012.08.10 6688
1472 업무 직위(職位)와 직급(職級) 그리고 직책(職責)에 대하여 file JaeSoo 2012.08.10 4924
1471 업무 직위/직급/직책 JaeSoo 2012.08.10 11073
» 논문 nCr을 구하는 함수를 만들자. (점화식) JaeSoo 2012.08.10 6008
1469 논문 순위구하기와 함수의 복잡도 JaeSoo 2012.08.10 4739
1468 모바일 갤럭시 s2 버스카드로 쓰기, 겔럭시s2 NFC유심 티머니 사용법 file JaeSoo 2012.08.11 15526
1467 경제 사용중인 티머니 카드 충전잔액 환불받으려면 어떻게 해야되요?? JaeSoo 2012.08.11 5130
Board Pagination Prev 1 ... 45 46 47 48 49 50 51 52 53 54 ... 124 Next
/ 124


즐겨찾기 (가족)

JAESOO's HOMEPAGE


YOUNGAE's HOMEPAGE


장여은 홈페이지


장여희 홈페이지


장여원 홈페이지


즐겨찾기 (업무)

알리카페 홀릭

숭실대 컴퓨터 통신연구실 (서창진)

말레이시아 KL Sentral 한국인 GuestHouse


즐겨찾기 (취미)

어드민아이디

유에코 사랑회

아스가르드 좋은사람/나쁜사람

JServer.kr

제이서버 메타블로그

재수 티스토리


즐겨찾기 (강의, 커뮤니티)

재수 강의 홈페이지


한소리


VTMODE.COM


숭실대 인공지능학과


숭실대 통신연구실


베너