티스토리 뷰

반응형

Big-O(또는 Big-Oh) notation은 알고리즘의 시간 복잡도를 나타내는 표기법이며,알고리즘 최악의 경우 복잡도를 측정한다.나타내는 표현방식은 O(f(n))으로 나타내는데 여기에서 n은 입력의 개수를 나타낸다.

x축을 "자료입력 개수", y축을 "시간"

1) 빅 오 표기법

알고리즘의 복잡도를 판단하는 척도로는 시간복잡도(실행시간)와 공간 복잡도(실행공간) 두가지가 있는데, 빅 오 표기법은 시간복잡도를 다룬다.

빅 오 표기법을 고민할 때 가장 대표적으로 생각해야 할 질문이 "n이 무한으로 접근하면 무슨 일이 일어날까?"
대표적은 O(n)에 대해 예를 통해 이해해보자. 

O(n)의 시간 복잡도

O(n)은 선형시간이고, 위의 예에서 최악의 경우 i는 0부터 n-1까지 n번의 연산을 수행해야 한다. 

이를 이해했다면 다음은 O(n²), O(n³)의 시간복잡도를 살펴보자.

왜냐하면 n을 입력개수라고 했을 때 입력개수 대비 시간이 더 오래걸리기 때문에 그래프 상으로 봤을 때에도 비효율적이라고 할 수 있다. 

로그의 시간 복잡도의 효율은 백만개의 항복 이상의 큰 입력이 있는 경우에 분명하다.n이 백만이라고 하더라도 log2(1,000,000) = 19.9315…이기 때문에 단지 19개의 항목만을 출력한다.

여기까지 이해했다면 빅오 표기법 규칙은 쉽게 이해할 수 있다.혹은 "극한"의 성질을 이해하면 된다.

 

알고리즘의 시간 복잡도를 f(n)이라고 표현했을 때, n은 입력 개수를 나타낸다.

f(n)time : 필요한 시간
f(n)space : 필요한 공간(추가적인 메모리)

알고리즘의 분석 목표는 f(n)을 계싼함으로써, 알고리즘의 효율성을 제대로 이해하는 것이다. 하지만 f(n)을 계산함으로써, 알고리즘의 효율성을 제대로 이해하는 것이다. 

2) 계수 법칙

상수 k>0인 경우 f(n)이 O(g(n))이면 kf(n)은 O(g(n))이다.

위의 예시에서 case1의 시간복잡도는 f(n)=n, case2에서의 시간복잡도는 5f(n)이다. 
(for문이 각각 0에서  n까지, 0에서 5n까지 실행되기 때문이다.)

하지만 n이 무한대로 커진다면 또는 아주 큰 수에 가까워진다면 계수가 존재한다고 해도 무한대로 나아가는 것은 다름없다.
따라서 이 둘의 결과값 즉 시간복잡도는 O(n)으로 동일하다. 

2) 합의 법칙

f(n)이 O(h(n))이고 g(n)이 O(p(n))이라면 f(n) + g(n)은 O(h(n)+p(n))

위의 예에서 첫번째 for문은 f(n)=n에 해당하고, 일곱번째 줄은 f(n)=5n애 해당한다.
이로 인한 결과값은 n + 5n = 6n 이다. 
따라서 이것 또한 n이 무한대로 커진다는 사실은 다름이 없으므로 이 것의 시간복잡도는 O(n) = n 이다.

3) 곱의 법칙

f(n)이 O(h(n))이고 g(n)이 O(p(n))이면 f(n)g(n)은 O(h(n)p(n))

이전의 O(n²), O(n³) 을 생각하면 된다. 위의 예에서 결과값은 f(n) = n*5n 이다. 내부 loop에 의해 5n번 실행되고 내부loop는 외부 loop에 의해 n번 실행되기 때문이다. 

따라서 결과는 5n²번 연산이 일어난다. 즉 이것의 결과값은 O(n) = n²이 된다. 

3) 전이 법칙

f(n)이 O(g(n))이고 g(n)이 O(h(n))이면 f(n)은 O(h(n))

3) 다항 법칙

f(n)이 3(k)차 다항식이면 f(n)은 O(n³(k))

f(n)이 2차 다항식이기 때문에 (네번째 줄이 n*n회 실행되기 때문) O(n) = n² 이 된다. 

정리

  • 빅오표기법은 알고리즘의 효율을 분석하고 비교하는 데 매우 중요하다. 
  • 우선 빅오를 분석하기 위해서는 코드를 살펴보고, 빅오 표기법을 단순화하고 위의 법칙들을 적용해야 한다. 

반응형

'알고리즘 > 개념정리' 카테고리의 다른 글

거품 정렬(Bubble Sort)  (1) 2023.08.22
스택 & 큐  (0) 2023.02.07
백트래킹  (0) 2022.12.30
완전탐색  (2) 2022.12.30
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함