시간 복잡도(Time Complexity)

2025. 6. 5. 23:35·algorithm

시간 복잡도?

모든 환경적인 요인(언어, 컴퓨터 스펙 등)은 고려하지 않고 오로지 알고리즘 자체에 대한 수행시간의 개념 = 시간 복잡도

Algorithm의 수행시간을 이론적으로 분석하기 위한 개념

왜 필요한가?

같은 문제를 푸는 여러 알고리즘 중에 가장 빠르게 해결할 수 있는 알고리즘은 무엇인가에 대한 기준으로 사용!

빅오 표기법(Big-Oh Notation)

두 함수 간의 관계를 나타내는 표기법

  • f(n) <= O(g(n)) -> worst
    • 함수f의 증가속도가 g보다 빠르지 않다(즉 비슷하거나 느리다)
    • f가 아무리 늦어도 g보단 빠르다 -> 최소 g만큼의 성능
  • f(n) >= Ω(g(n)) -> best
    • 함수f의 증가속도가 g보다 느리지 않다(즉 비슷하거나 빠르다)
    • f가 g만큼 될 수도 있다 -> 최대 g만큼의 성능
  • f(n) = Θ(g(n))
    • 함수f의 증가속도가 g와 비슷하다

만약 $f(n)=log n, g(n)=n^2$ 이라면 f는 g보다 증가하는 기울기가 작기 때문에 f(n) < g(n)이다. 그렇다면 f(n) = O(g(n))으로 쓸 수 있다

함수의 빠르기
$$
1 < log(log n) < log n < (log n)^2 < n^{1/2} < n < n log n < n^2 < n^3 < 2^n < n! < n^n
$$

예를 들어 선택 정렬 알고리즘의 시간 복잡도를 분석해보면

void selection_sort(int A[], int n){
    for(int i=0; i<n-1; i++){ //3
        int indexMin = i;
        for(int j=i+1; j<n; j++){ //(n-i-1)*6 + 1
            if(A[j] < A[indexMin]) indexMin= j;
        }
        int temp = A[indexMin];
        A[indexMin] = A[i];
        A[i] = temp; //6
    }
}

worst case: 3 + (n-i+1)*6 + 1 + 6 = $\sum_{i=0}^{n-2} 6(n-i)$ + 16 = 16(n-1) + 3n(n+1) -6

어차피 무한히 진행된다면 큰 수만 영향을 끼치기 때문에 빅오표기로 바꾸면 O($n^2$)

이런 연산을 줄이면 반복문은 n번의 수행을 하고 나머지는 상수의 수행을 한다고 생각해서 추상화하면 방금과 같이 n x n + 상수 이므로 O($n^2$)

'algorithm' 카테고리의 다른 글

Dynamic Programming (동적계획법)  (0) 2025.06.06
Backtracking  (0) 2025.06.06
Divide and Conquer(D&C) 기법을 사용한 알고리즘  (0) 2025.06.06
시간 복잡도 분석 연습  (0) 2025.06.06
Recursion(재귀) algorithm 과 D&C(분할과 정복) 시간복잡도 분석  (0) 2025.06.06
'algorithm' 카테고리의 다른 글
  • Backtracking
  • Divide and Conquer(D&C) 기법을 사용한 알고리즘
  • 시간 복잡도 분석 연습
  • Recursion(재귀) algorithm 과 D&C(분할과 정복) 시간복잡도 분석
chanhuy
chanhuy
  • chanhuy
    차늬
    chanhuy
  • 전체
    오늘
    어제
    • 분류 전체보기 (34)
      • algorithm (9)
      • Python (2)
      • database (8)
      • csts (3)
      • Operating System (0)
      • 오픈소스SW (1)
      • Git & Github (4)
      • 프로젝트 회고 (3)
      • 정보처리기사 (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    COMMIT
    dynamic programming
    Git
    algorithm
    backtracking
    Reduction
    Python
    graph algorithms
    프로젝트후기
    오픈소스SW
    시간복잡도
    pl/sql
    index
    recursion
    알고리즘
    D&C
    greedy
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
chanhuy
시간 복잡도(Time Complexity)
상단으로

티스토리툴바