Algorithm : efficiency, analysis and order

LeemHyungJun·2023년 3월 14일
0

Algorithm

목록 보기
1/10

차수(Order)

복잡도 함수 표기법

  • asymptotic
    • 점근적
    • f(n)f(n) 의 asymptotic behavior는 n이 큰 수가 될 때의 f(n)f(n)이 갖는 특성
    • ex) f(n)=1nf(n) = \frac{1}{n} 일 때 limn1n=0\lim_{n\to\infty} \frac{1}{n} = 0

1. Big O notation -> O()O()

  • asymptotic upper bound (점근적 상한)
  • 정의: 주어진 복잡도 함수 f(n)f(n)에 대하여 g(n)O(f(n))g(n)\in O(f(n)) 이면 nNn\ge N인 모든 정수 nn에 대하여 0g(n)c×f(n)0 \le g(n) \le c \times f(n) 이 성립하는 양의 실수 cc와 음이 아닌 정수 NN이 존재한다.
  • 입력의 크기 nn에 대해서 해당 함수를 사용하는 알고리즘의 수행시간은 아무리 늦어도 cf(n)cf(n)이 된다. -> cf(n)cf(n) 보다 절대로 느릴 수 없다.
  • ex1) n2+10nO(n2)n^2 + 10n \in O(n^2) 성립 (c=2,N=10)c=2, N=10) 인 경우
    ex2) n3O(n2)n^3 \in O(n^2) 은 성립하지 않음

2. Omega notation -> Ω()\Omega()

  • asymptotic lower bound (점근적 하한)
  • 정의: 주어진 복잡도 함수 f(n)f(n)에 대하여 g(n)O(f(n))g(n)\in O(f(n)) 이면 nNn \ge N인 모든 정수 nn에 대하여 g(n)c×f(n)0g(n) \ge c \times f(n) \ge 0 이 성립하는 양의 실수 cc와 음이 아닌 정수 NN이 존재한다.
  • 입력의 크기 nn에 대해서 해당 함수를 사용하는 알고리즘의 수행시간은 아무리 빨라도 cf(n)cf(n) 밖에 되지 않는다. -> cf(n)cf(n)보다 절대로 더 빠를 수 없다.
  • ex1) n2+10nΩ(n2)n^2 + 10n \in \Omega(n^2) 성립 (c=1,N=0c=1, N=0) 인 경우

3. Theta notation -> Θ()\Theta()

  • asymptotic tight bound
  • 정의: 주어진 복잡도 함수 f(n)f(n)에 대해서 Θ(f(n))=O(f(n))Ω(f(n))\Theta(f(n)) = O(f(n)) \cap \Omega(f(n))
    nNn \ge N인 모든 정수 nn에 대하여 c×f(n)g(n)d×f(n)c \times f(n) \le g(n) \le d \times f(n) 이 성립하는 양의 실수 ccdd, 음이 아닌 정수 NN이 존재한다.
  • Omega와 Big O를 둘 다 만족하는 것
    ex) T(n)=n(n1)2T(n)=\frac{n(n-1)}{2} : O(n2)O(n^2) 이면서, Ω(n2)\Omega(n^2)이다.
    -> 따라서 Θ(n2)\Theta(n^2)이다.

4. Small O notation -> o()o()

  • upper bound that is not asymptotically tight
  • 복잡도 함수 끼리의 관계를 나타내기 위한 표기법
  • 정의: 주어진 복잡도 함수 f(n)f(n)에 대하여 g(n)o(f(n))g(n) \in o(f(n)) 이면 모든 양의 실수 cc에 대해, nNn \ge N인 모든 nn에 대해서 0g(n)c×f(n))0 \le g(n) \le c \times f(n)) 이 성립하는 음이 아닌 정수 NN이 존재한다.
  • Big O랑 같지만 다른 점은 모든 양의 실수 cc에 대해 성립한다는 점!
  • g(n)o(f(n))g(n) \in o(f(n))g(n)g(n)cf(n)cf(n)보다 훨씬 낫다는 의미
  • ex1) no(n2)n \in o(n^2) 성립(n>10000n>10000)인 경우
    ex2) no(5n)n \in o(5n) 성립하지 않음

5. Small Omega notation -> ω()\omega()

  • lower bound that is not asymptotically tight

Big O VS Small O

  • Big O: 실수 c>0c>0 중에서 하나만 성립해도 된다.
  • Small O: 모든 실수 c>0c>0에 대해서 성립해야 한다.

복잡도 함수 순서 나열

k>j>2k>j>2이고, b>a>1b>a>1 일때
Θ(logn)\Theta(logn), Θ(n)\Theta(n), Θ(nlogn)\Theta(nlogn), Θ(n2)\Theta(n^2), Θ(nj)\Theta(n^j), Θ(nk)\Theta(n^k), Θ(an)\Theta(a^n), Θ(bn)\Theta(b^n), Θ(n!)\Theta(n!)

  • 이때 g(n)g(n)f(n)f(n)보다 왼쪽에 존재하면, 무조건 g(n)o(f(n))g(n)\in o(f(n))이다.
  • c0, d>0c\ge 0,\ d>0, g(n)O(f(n))g(n)\in O(f(n)) and h(n)Θ(f(n))h(n)\in \Theta(f(n))이면,
    c×g(n)+d×h(n)Θ(f(n))c\times g(n) + d\times h(n)\in\Theta(f(n))

극한 이용하여 차수 구하기

limng(n)f(n)={c>0이면g(n)Θ(f(n))0이면g(n)o(f(n))이면f(n)o(g(n))\lim_{n \to \infty}\frac{g(n)}{f(n)}= \begin{cases} c>0이면 & g(n)\in\Theta(f(n)) \\ 0이면 & g(n)\in o(f(n))\\ \infty 이면 & f(n)\in o(g(n)) \end{cases}

로피탈 법칙

limng(n)f(n)=limn(g(n)f(n))lim_{n \to \infty}\frac{g(n)}{f(n)}=lim_{n \to \infty}(\frac{g'(n)}{f'(n)})

0개의 댓글