RadarURL

논문
2012.08.10 08:48

순위구하기와 함수의 복잡도

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

단축키

Prev이전 문서

Next다음 문서

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

단축키

Prev이전 문서

Next다음 문서

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

어떤 문제가 주어졌을때, 그에 맞추어 알고리즘을 적용하거나 새로 만들어서

 

해답을 구할수 있다고 하자. 하지만 적은 데이터량에서는 분명히 빠르게, 그리고 잘 돌아가던

 

알고리즘이 어느순간 몇백년이 걸리는 프로그램이 될 수 있다는 것을 생각해보았는가?

 

이번에는 함수의 복잡도 라는 개념을 이해해보도록 하고,

 

그 어마어마한 수와 시간의 변화에 한번 놀라보도록 하자.

 

 

참고 : 자료의 수와 용도를 고려하여

        버블정렬, 퀵정렬, 등의 정렬 알고리즘의

        중요성을 다시한번 생각해보자.

 

 

문제) 시험점수의 점수별 순위를 구하여라.

 

data : 56 25 67 88 100 61 55 67 76 56

 

 

 

 

첫번째 알고리즘

    

     1. 데이터의 갯수에 따라 각 순위를 저장할 rank 배열을 갯수만큼 할당한다.

 

     2. 각 rank[i]의 값은 1로 초기화된다.

          필요한변수 int rank[Nuim];   (Num = 총 데이터의 갯수)

 

     3. i번째 데이터의 값을 나머지 값들과 순서대로 비교해 나가면서 i번째 데이터보다

        큰 값이 있을때에는 rank[i] 에 1을 더한다.

 

     4. 자료의 끝까지 3번을 반복한다.

 

     5. 자료의 수 만큼 2-4번을 반복한다.

 

 

#include <stdio.h>

#define Num 10

void main(void){

     static int a[] = {56, 25, 67, 88, 100, 61, 55, 67, 76, 56};

     int rank[Num];

     int i, j;

 

     for(i=0 ; i<Num ; i++){

          rank[i] = 0;

          for(j=0 ; j<Num ; j++){

               if(a[j] > a[i]){

                    rank[i]++;

               }

          }

     }

 

    printf(" 점수  |  순위 \n" );

     for(i=0 ; i<Num ; i++){

          printf("%6d|%6d\n", a[i], rank[i]);

     }

}

 

 

이 알고리즘은 자료의 갯수가 n개 일때, 총 n x n 번의 실행횟수가 예상된다.

이를 알고리즘의 복잡도 라고 하며, O(n^2)로 표현한다.

 

예를들어, y = ax^3 + b 인 식이 있을경우,

이 식은 x의 값이 커짐에 따라서 a와 b는 무시할수 있는 값이 되므로,

복잡도는 O(n^3)으로 표현하게 된다.

 

 

두번째 알고리즘(실행속도 개선)

 

     점수의 범위를 0~100 이라고 할때, 이를 배열의 첨자로 삼는다.

     즉, rank[100]의 배열에 추가로 여분을 두어 rank[101]을 할당한다.

 

     1. 먼저 각 자료의 값에 해당하는 rank[i]에 1씩을 더한다.

 

     2. rank[101]에 초기값 1을 넣는다.

 

     3. rank[100]에서 부터 rank[0]에 이르기까지, 각 항에

        바로 오른쪽(상위)요소의 값을 더해나간다.

 

     : 89점인 자료의 순위값은 rank[90]에 저장된다.

 

0   1   2   3 ......                             ..... 87 88 89...............98 99 100 101  배열의 첨자번호

11 11 11 11                                           3  3   2                 2   2   2    1   rank[i]의 값 

 

 

#include <stdio.h>

#define Num 10

#define Max 100

#define Min 0

 

void main(void){

     static int a[] = {56, 25, 67, 88, 100, 61, 55, 67, 76, 56};    

     int i, rank[Max+2]                                                       // 추가적인 공간을 더 잡아준다.

     for(i=Min ; i<=Max ; i++){

          rank[i] = 0;                                                           // 초기화 작업

     }

     for(i=0 ; i<Num ; i++){

          rank[a[i]]++;                                                         // 먼저 각 값에 해당하는 배열의 자리에 1씩을 더한다.

     }                                                                               // 중복값이 있더라도 모두 실행한다.

 

     rank[Max+1]=1;

     for(i=Max ; i>=Min ; i--){

          rank[i] = rank[i] + rank[i+1];

     }

    

     printf(" 점수 | 순위\n");

     for(i=0; i<Num ; i++){

     printf("%6d|%6d\n", a[i], rank[a[i]+1]);

     }

}

 

이 알고리즘은 n개의 값이 있고, 그 범위가 m일 때에

n x m 번의 반복만으로 순위를 매길수 있고, 복잡도는 O(n)으로 표현한다.

 

함수의 복잡도는  O(log2n) < O(n) < O(log2n-n) < O(n^2) < O(n^3) < O(2^n) < O(n!)

와 같이 그 순서를 정한다.

 

알고리즘의 복잡도 표현에서 n을 기준으로하는 for구문이 여러개나 되는데

왜 O(n)으로 표시하는가에 의문을 가질 수 있겠지만,

 

이는 n의 값이 점점 커짐에 따라서 상수가 가지는 비중이 점점 보잘것 없어지기 때문이다

     y = 6x + 3 ------(1)

     y = x^2    ------(2) 이와같은 두개의 함수에서

 

x =1일때, (1) =   9 ,   (2) = 1                         n이 작을 경우에는 O(n^2)의 실행횟수가 더 작을수 있다.

x =2일때, (1) =  15 ,   (2) = 4    

x =3일때, (1) =  21 ,   (2) =  9  

                  .                .

                  .                .

                  .                .

x =10일때, (1) =  63 ,   (2) =  100                  n이 커져갈 수록 O(n^2)의 실행횟수는 빠르게 늘어간다.

x =11일때, (1) =  69 ,   (2) =  121  

x =20일때, (1) =  123 ,  (2) =  400 

 

때문에 복잡도를 매김할때에는 상수를 가늠하지 않는다.

 

 

실제로 O(x^3)의 복잡도를 가진 경우에,

 

n의 값이 10000이 되면, 1,000,000,000,000번의 반복실행이 필요하며,

초당 1억번의 반복을 수행할수 있다고 할때, 1000 초의 수행시간이 필요하게 되며,

 

n의 값이 20000이 되면, 8000(약 2시간)초

n의 값이 50000이 되면, 125,000초(약 34시간) 가 필요하게 된다.

 

최악의 경우인 O(n!)에서는 n의 값이 20만 되어도, 2432902008초(약 77년)가 걸리게 된다.

 

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

?

공부 게시판

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

  1. [공지] 공부 게시판 입니다.

    Date2003.08.18 By처누 Views2017309
    read more
  2. 티소믈리에, 차 문화를 바꾸다

    Date2026.10.06 Categoryu-E(TestBed) By광휘의철편64 Views3
    Read More
  3. 창원흥신소 서비스 안내

    Date2026.10.06 Category가상화 By흔들리는골렘32 Views1
    Read More
  4. 동작노래방 010 2817 0845 모임 분위기에 맞는 노래방 안내

    Date2026.10.06 Category경제 By교활한철학자타조18 Views1
    Read More
  5. 유심&통장 [카,톡] sim256 (24시문의) 대포유심 대포통장판매 선불유심팝니다 대포유심팝니다

    Date2026.10.06 Category윈도우즈 By놀라운운석99 Views1
    Read More
  6. 강남세븐❤️OlO-8655-OO53❤️친절문의환영 #강남세븐 #역삼동세븐 #강남세븐데이즈 #강남풀싸롱 #역삼동풀싸롱 #선릉역풀싸롱 #역삼동룸싸롱 #역삼룸사롱 #역삼풀살롱 #강남미러초이스 #역삼미러초이스

    Date2026.10.06 Category업무 By괴랄한재규어89 Views1
    Read More
  7. 파주누수업체, 신속 해결의 모든 것

    Date2026.10.06 Category건강 By우중충한도적91 Views2
    Read More
  8. ㅇㅇ병원, 당신의 건강을 책임지는 현명한 선택

    Date2026.10.06 Categoryu-E(활성화) By빛나는달고나24 Views1
    Read More
  9. 양산싱크대막힘 시원하게 뚫는 비법

    Date2026.10.06 Categoryu-E(표준화) By예측불가토끼46 Views1
    Read More
  10. 용인두피문신 고민? 만족 후기 보려면

    Date2026.10.06 Category동식물 By절묘한솔개92 Views6
    Read More
  11. 토보샵: 명품레플리카 쇼핑의 시작

    Date2026.10.06 Category구글 애드센스 By얼어붙은흐름98 Views3
    Read More
  12. 대전누수, 근본 원인 해결의 시작

    Date2026.10.06 Category사무 소프트웨어 By적막한체이서42 Views1
    Read More
  13. 마인드 끝판왕 사이즈까지 장착 완료! 010---8293---0291---- 여기가 베트남인줄 마블 노래클럽

    Date2026.10.05 Category사업 By기운찬오소리38 Views1
    Read More
  14. 카-툑 gusim8003 [24시문의] 선불유심내구제/내구제대출/소액대출/급전/ 비대면대출 상조내구제 무직자대출 대출

    Date2026.10.05 Category건강 By어설픈오소리22 Views1
    Read More
  15. 강남엘리트❤️OlO-8655-OO53❤️친절문의24시 강남하퍼1등실장 #강남엘리트 #강남엘리트위치 #강남엘리트하퍼 #하이퍼블릭엘리트 #강남엘리트예약문의 #선릉엘리트 #선릉역엘리트 #강남사라있네

    Date2026.10.05 Category하드웨어 By괴랄한재규어89 Views1
    Read More
  16. 청담동셔츠룸 010 2817 0845 일정과 인원에 맞춘 셔츠룸 문의

    Date2026.10.05 Category블로그 By정열적인퀘이사14 Views1
    Read More
  17. 최근 테헤란로 벤처 밸리의 핵심 리더들 사이에서 ‘클래스가 다른 정통 수질과 프라이빗 무드’로 소문 자자한 '선릉 룸싸롱' 기습 방문, 인공미를 거부하는 무결점 뉴페이스들과 심장을 마비시킨 사심 플러팅에 제대로 저격당하고 온 솔직 후기

    Date2026.10.05 Category카메라 By희미한홍학99 Views1
    Read More
  18. 본식DVD, 웨딩영상 색감이 중요한 이유새 창 열림

    Date2026.10.05 Categoryu-E(활성화) By힘겨운귤35 Views2
    Read More
  19. 대전, 인천, 세종 하수구 막힘 문제 해결 방법

    Date2026.10.05 Category공지 By정열적인코요테90 Views4
    Read More
  20. <문경맥주> 구입 할 수 있는 곳은 새 창 열림

    Date2026.10.05 Category취미 By타오르는드래곤61 Views1
    Read More
  21. 강남건전지❤️OlO-8655-OO53❤️친절문의환영 #강남건전지 #강남유니콘 #선릉유니콘 #강남건전지위치 #선릉역건전지#대치동유니콘 #강남바커스 #선릉바커스 #선릉역바커스 #강남룸클럽 #선릉룸클럽 #강남베터리 #강남바데리

    Date2026.10.05 Category데이터베이스 By괴랄한재규어89 Views1
    Read More
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 132 Next
/ 132


즐겨찾기 (가족)

JAESOO's HOMEPAGE


장여은 홈페이지


장여희 홈페이지


장여원 홈페이지


즐겨찾기 (업무)

알리카페 홀릭

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

말레이시아 KL Sentral 한국인 GuestHouse


즐겨찾기 (취미)

어드민아이디

유에코 사랑회

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

JServer.kr

제이서버 메타블로그

재수 티스토리


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

재수 강의 홈페이지


한소리


VTMODE.COM


숭실대 인공지능학과


숭실대 통신연구실


베너