백준 알고리즘 기초 강좌

1장 알고리즘과 입출력 - (2) 시간 복잡도

살구르 2017. 7. 12. 17:38

1. 시간 복잡도

-시간 복잡도를 이용하면 작성한 코드가 시간이 얼마나 걸릴지 예상할 수 있음

-표기법으로 대문자 O 사용

-영어로는 Big O Notation

-입력의 크기에 대해서 시간이 얼마나 걸릴지 나타내는 방법

-최악의 경우에 시간이 얼마나 걸릴지 나타내야 함


[구현 방법에 따른 시간 복잡도]

(예 - 1부터 N까지의 합)

1)O(N)

for(int i=1;i<=N;i++)

sum+=i;


2)O(1)

sum=N*(N+1)/2;


3)O(N^2)

for(int i=1;i<=N;i++){

for(int j=1;j<=N;j++){

if(i==j) sum+=j;

}

}


2. 시간 복잡도 안에 가장 큰 입력 범위를 넣었을 때, 1억이 1초 정도 

-1억=10^8=약 1초


3. 대표적인 시간 복잡도와 1초가 걸리는 대략적인 입력의 크기 N

-O(1)       

-O(logN)

-O(N)        : 10^8(=1억)

-O(NlogN)  : 5*10^6(=500만)

-O(N^2)    : 10^4(=1만)

-O(N^3)    : 5*10^2(=500)

-O(2^N)    : 20                ex) 크기가 N인 집합의 부분 집합(원소가 N개인 집합이 있고 그 집합의 부분집합의 수 -> 2^N)

-O(N!)       : 10                ex) 크기가 N인 순열(줄 세우는 경우의 수)


-예를 들어 어떤 알고리즘 문제를 푸는데 사용한 알고리즘의 시간복잡도가 O(N^2) 이라면

 입력의 크기 N의 범위가 10^4을 훨씬 넘어가게 되면, 시간 제한이 1초인 경우 다른 알고리즘을 생각해봐야 함


4. 시간 복잡도 계산 시 주의사항

-Big O Notation에서 상수는 버림 

 ex) O(3N^2) = O(N^2)

O(5)=O(1)

-두 가지 항이 있을 때, 변수가 같으면 큰 것만 빼고 다 버림

 ex) O(N^2+N) = O(N^2)

      O(N^2+NlogN) = O(N^2)

-두 가지 항이 있는데 변수가 다르면 놔둠

 ex) O(N^2+M)