RadarURL

논문
2012.10.22 01:11

nCr[combination] 구현하기

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

단축키

Prev이전 문서

Next다음 문서

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

단축키

Prev이전 문서

Next다음 문서

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

GetCombination함수에 n, r의 자연수를 입력하면 coll에 조합방식을 문자열로 반환한다.
함수 리턴값은 조합의 개수이다.

GetCombination();
combination();

두 개의 함수를 구현하고 GetCombination을 call~!!


int GetCombination(int n, int r, CStringArray *coll)
{
      int count = 0;

      CString strTemp = L"";
      CString temp = L"";

      int *c= new int[r+1];   // c에 dynamic array를 이용해 입력받은 r값으로 array의 크기정해줌

 for( int i=1;i<r+1;i++)   // s[0]=1,s[1]=2,..........,s[r-1]=r 이런식으로 값을 할당해줌.
 {        // lexicographic order에 따라 첫번째 combination값을 만들어줌
         c[i-1]=i;
 }

 for( int i=0;i<r;i++)
 { 
       temp.Format( _T("%i"), c[i] - 1 );
       strTemp = strTemp + temp;
 }
       coll->Add( strTemp );
       count++;

 int k;
 k=combination(n,r);    // k는 n,r에대해 가질수 있는 총 Combination갯수를 구한 값

 for( int h=2;h<k+1;h++)
 {
      int m=r-1;
      int max_val=n;

  while(c[m]==max_val)
  {
         m=m-1;     // maximumvalue 값을 만족하는 배열 위치보다 -1작은 위치 m을 구함
         max_val=max_val-1;  // 예를들어 n=6 r=4일때 1256 이란 값이 들어오면 5와 6은 while구문
  }       // 내에서 max_value만족 따라서 m=1이란 5,6앞의 2의 배열의 위치 값을 반환함

  c[m]=c[m]+1;    // c[m]에값에 +1을 해준다.
  for(int j=m+1;j<r;j++)  // while구문이 실행될 경우 실행 c[m+1]부터 c[r-1]까지
  {       // 그 앞에 수의 +1값을 자신이 가짐 ex) c[m+1]=c[m]+1. c[m+2]=c[m+1]+1
   c[j]=c[j-1]+1;   // cobination값은 permutation에서 swap을 사용하는것과 같은것이 필요 없다.
  }       // 위의 m의 값을 구한후 그 구한 m을 위치로 갔는 배열 c[m]값 이후로 그 앞에 값의
         // +1씩만 해주만 lexicographic order을 만족하는 combination값이 나옴
  strTemp = L"";
  for(int i=0;i<r;i++)
  { 
   temp.Format( _T("%i"), c[i] - 1 );
   strTemp = strTemp + temp;
  }
  coll->Add( strTemp );
  count++;
 }

 delete [] c;
 return count;
}


int combination(int n, int r)
{
         int i;
         int kup = 1;          // 분자
         int kdown = 1;        // 분모

         for(i=n;i>n-r;i--)    //  분자 계산
             kup *= i;

        for(i=r;i>0;i--)       //  분모에 계산
              kdown *= i;

         return kup/kdown;
}

 

출처 : http://ultragom.tistory.com/entry/nCrcombination-구현하기

?

공부 게시판

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

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
공지 [공지] 공부 게시판 입니다. 처누 2003.08.18 928105
2473 연애 폭소클럽 제36회 - 즉석미팅 1 (김제동) file JaeSoo 2003.08.18 18981
2472 연애 폭소클럽 제37회 - 즉석미팅 2 (김제동) file JaeSoo 2003.08.18 17808
2471 연애 폭소클럽 제38회 - 방학특집 연애특강 1 (김제동) 1 file JaeSoo 2003.08.18 16361
2470 연애 폭소클럽 제39회 - 방학특집 연애특강 2 (김제동) file JaeSoo 2003.08.18 17828
2469 연애 폭소클럽 제40회 - 방학특집 연애특강 3 (김제동) file JaeSoo 2003.08.18 16842
2468 웹 프로그래밍 이미지 특정 부분에 링크 만들기 처누 2003.08.24 15624
2467 웹 프로그래밍 게시판에 자신의 FTP 자료 올리기 3 처누 2003.08.25 13135
2466 동식물 고양이 클리닉 - 고양이 기르기 file JaeSoo 2003.10.10 13693
2465 동식물 고양이 클리닉 - 고양이 품종 file JaeSoo 2003.10.10 13427
2464 동식물 고양이 클리닉 - 2개월에서 4개월령 고양이 관리 file JaeSoo 2003.10.11 13428
2463 동식물 고양이 클리닉 - 4개월에서 9개월령 고양이 관리 file JaeSoo 2003.10.11 13132
2462 동식물 고양이 클리닉 - 다자란 고양이 file JaeSoo 2003.10.13 13922
2461 동식물 고양이 클리닉 - 나이든 고양이 file JaeSoo 2003.10.13 13679
2460 동식물 고양이 클리닉 - 고양이의 영양 file JaeSoo 2003.10.13 13429
2459 동식물 고양이 먹이와 주의사항 file JaeSoo 2003.10.13 13902
2458 동식물 아기 고양이의 식사 file JaeSoo 2003.10.13 11821
2457 동식물 고양이 사료 급여량 file JaeSoo 2003.10.13 12880
2456 기타 편지봉투 쓰는 법 file JaeSoo 2003.10.21 16993
2455 웹 프로그래밍 제로보드 로그인 실패시 이유를 메세지로 알려주기 처누 2003.11.04 8459
2454 웹 프로그래밍 최근 게시물 출력시 링크게시물에 스타일시트 적용하기 처누 2003.11.06 7927
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 124 Next
/ 124


즐겨찾기 (가족)

JAESOO's HOMEPAGE


YOUNGAE's HOMEPAGE


장여은 홈페이지


장여희 홈페이지


장여원 홈페이지


즐겨찾기 (업무)

알리카페 홀릭

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

말레이시아 KL Sentral 한국인 GuestHouse


즐겨찾기 (취미)

어드민아이디

유에코 사랑회

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

JServer.kr

제이서버 메타블로그

재수 티스토리


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

재수 강의 홈페이지


한소리


VTMODE.COM


숭실대 인공지능학과


숭실대 통신연구실


베너