Computer-Science

알고리즘과 문제해결


알고리즘이란?

성능 분석

공간 복잡도 (space complexity)

알고리즘을 실행시켜 완료하는데 필요한 총 저장 공간

시간 복잡도 (time complexity)

알고리즘을 실행시켜 완료하는데 걸리는 시간

함수 호출의 Mechanism 7단계

  1. Instruction pointer를 1 증가 후 스택에 push
    • 1 증가하는 것은 그 다음 명령어를 기억하겠다는 의미
  2. 스택에 ‘return type’용 공간을 push
    • return type : int - 4byte, short - 2byte, Person - 100byte 등
  3. 호출된 함수로 제어이동 (Jump)
  4. 현 상태의 스택의 top을 ‘stack frame’이라는 특수 포인터로 유지 한다.
    지금부터 리턴할 때까지 스택에 push되는 것을 이 함수의 “local”이라고 볼 수 있다.
  5. 함수를 부를때 사용된 인자들을 스택에 push
  6. 함수 실행 시작
  7. 함수 내부에 선언된 로컬변수들을 스택에 push

점근식 표기법

Big O 표기법

점근적 상한 (Asymptotic Upper Bound)


위 그래프에서 $N$은 입력의 개수, $c$는 계수를 의미한다. ✩

Tight Upper Bound

Big O 표기법 : 증명 ✩

  1. 부등식을 세워라
    • e.g., $n^2 + 10n \geq c \cdot n^{2}$
  2. 부등식을 만족하는 $c$, $N$을 pick!
  3. Verify
예시

$n^{2} + 10n \in O(n^{2})$

Asymptotic Analysis

대표적인 복잡도 카테고리

Polynomial Time

Exponential Time

Ω 표기법

스크린샷 2022-04-14 오후 10 05 25

Summary ✩

IMG_5B36BB702193-1

순환 (recursion)

순환 함수의 예

BinarySearch(a[], key, left, right)
    // a[mid] = key인 인덱스 mid를 반환
    if (left  right) then {
        mid  (left + right) / 2;
        case {
            key = a[mid] : return (mid);
            key < a[mid] : return (BinarySearch(a, key, left, mid-1));
            key > a[mid] : return (BinarySearch(a, key, mid+1, right));
        }
    }
    else return -1; // key 값이 존재하지 않음
end BinarySearch()

Master Theorem

$T(n) = a \cdot T(\frac{n}{b}) + f(n)$와 같은 모양을 가진 점화식은 마스터 정리에 의해 바로 분석할 수 있다

  1. $T(n) = a \cdot T(\frac{n}{b}) + f(n)$
  2. $h(n) = n^{log_b a}$
  3. $f(n)$과 $h(n)$ 비교
    • if $f(n) < h(n)$, then $O(T(n)) = h(n)$
    • if $f(n) = h(n)$, then $O(T(n)) = h(n) \cdot \log n$
    • if $f(n) > h(n)$, then $O(T(n)) = f(n)$

제약 조건 ✩

  1. $f(n)$은 asymptotically positive function (양의 함수) 이어야 한다.
  2. $a \geq 1$ and $b > 1$이어야 한다.
  3. the regularity condition that $a \cdot f(\frac{n}{b}) \leq c \cdot f(n)$ for some constant $c < 1$
    • $f(n)$이 지수함수, $\cos$ 함수, $\sin$ 함수 등이 되어서는 안 됨
  4. $T(n) = aT(\frac{n}{b}) + n^k \log ^p (n)$의 형태일 때는 Adavanced Master Theorem을 적용해야 함

Adavanced Master Theorem

where $a \geq 1$, $k \geq 1$ is a real number

\[T(n) = \Theta ( n^{ \log_{k} a })\] \[T(n) = \begin{cases} \Theta ( n^{ \log_{k} a } \log^{p+1}(n)) & p>-1 \newline \Theta ( n^{ \log_{k} a } \log\log n) & p=-1 \newline \Theta ( n^{ \log_{k} a }) & p<-1 \end{cases}\] \[T(n) = \begin{cases} \Theta ( n^{k} \log^{p}(n)) & p \geq 0 \newline \Theta ( n^{k}) & p<0 \end{cases}\]