본문 바로가기
[개발] 알고리즘

시간복잡도

by Devsong26 2023. 12. 13.

시간 복잡도(Time Complexity)는 프로그래밍에서 알고리즘의 효율성을 측정하는 방법 중 하나입니다. 구체적으로, 시간 복잡도는 어떤 알고리즘이 문제를 해결하는 데 얼마나 많은 시간이 소요되는지를 나타내는 지표입니다. 이는 일반적으로 알고리즘에 입력되는 데이터의 크기에 따라 어떻게 변화하는지를 나타냅니다.

시간 복잡도를 이해하기 위해서는 다음의 개념들을 알아야 합니다:

  • 빅 오 표기법 (Big O Notation)
    • 가장 널리 사용되는 시간 복잡도 표현 방법으로, 최악의 경우를 나타냅니다. 예를 들어, O(n)은 알고리즘이 입력 데이터의 크기(n)에 비례하여 실행 시간이 증가한다는 것을 의미합니다.
  • 상수 시간 (Constant Time) - O(1)
    • 입력 데이터의 크기와 상관없이 알고리즘의 실행 시간이 일정한 경우입니다. 예를 들어, 배열에서 특정 인덱스의 요소에 접근하는 것은 상수 시간에 이루어집니다.
  • 선형 시간 (Linear Time) - O(n)
    • 알고리즘의 실행 시간이 입력 데이터의 크기에 직접 비례하는 경우입니다. 예를 들어, 배열을 순회하는 것은 선형 시간에 이루어집니다.
  • 로그 시간 (Logarithmic Time) - O(log n)
    • 이진 검색과 같이, 알고리즘이 실행될 때마다 입력 데이터의 크기를 특정 비율로 줄여나가는 경우입니다.
  • 이차 시간 (Quadratic Time) - O(n²)
    • 알고리즘의 실행 시간이 입력 데이터의 크기의 제곱에 비례하여 증가하는 경우입니다. 예를 들어, 간단한 중첩 루프가 이에 해당합니다.
  • 지수 시간 (Exponential Time) - O(2^n)
    • 알고리즘의 실행 시간이 데이터 크기의 지수 함수로 증가하는 경우입니다. 일부 복잡한 문제들이 이 범주에 속합니다.

 


시간 복잡도를 효율적으로 평가하는 것은 알고리즘을 선택하고 최적화하는 데 매우 중요합니다. 더 효율적인 알고리즘은 일반적으로 더 빠른 실행 시간과 더 낮은 리소스 사용을 의미합니다.