자료구조

1. 자료구조와 알고리즘 - (2) 알고리즘의 성능분석

젼젼39 2025. 6. 29. 15:13

* 알고리즘의 성능 분석

    - 실행 시간이 짧으면서 컴퓨터의 자원들을 적게 사용하는 것이 효율적인 알고리즘
    - 시간 효율성, 공간 효율성

    - 1) 실행 시간을 측정
    - 2) 알고리즘의 복잡도를 분석

 

1. 실행시간 측정

    - 가장 단순하지만 확실한 방법

    - 실행시간 = 종료 시각 현재 시각

    - 시각 측정 : C언어에서 clock() 함수
        - 시스템의 현재 시각 반환(CLOCKS_PER_SEC 단위)

-  문제점

    (-) 반드시 구현해야 함
    (-)같은 조건의 하드웨어, 소프트웨어 환경 사용
    (-) 동일한 프로그래밍 언어(컴파일 방식 / 인터프리터 방식)
    (-) 성능 평가를 한 데이터에 대해서만 유효

 

2. 알고리즘의 복잡도 분석

    - 구현하지 않고 알고리즘의 효율성 평가하는 방법

    - 처리시간을 직접 측정하는 대신 알고리즘의 연산횟수를 대략적으로 계산
        - 대입, 사칙연산 다 각각 1으로 보고, 줄 별로 횟수 더함반복되면 n곱해서 더함

* 복잡도의 점근적 표기
    : 복잡도 함수를 최고차항만 계수 없이 취해 단순하게 표현

[1] 빅 오

    : O(g(n)) = 증가 속도가 g(n) 과 같거나 낮은 모든 복잡도 함수를 모두 포함
        //복잡도 함수가 2n + 1 이면, 이 알고리즘은 O(n) 에 속함, O(n)이다
        //2n + 1 의 증가 속도가 n과 같기 때문

    - 어떤 경우에도 n에 비례하는 시간 내에는 반드시 완료된다는 뜻임

    - O(n^2)에는 2n – 3 이것도 포함됨. 2n-3의 증가 속도는 n^2보다 느리기 때문

    - 빅오 = 처리시간의 상한, upperbound

    1 < log n < n(<- 선형시간… n에 비례하는 시간 걸림) < n log n < n^2 < n^3 < 2^n < 3^n < n!

[2] 빅 오메가

    : Ω(g(n)) = 증가 속도가 g(n)과 같거나 높은 모든 복잡도 함수 = 복잡도 함수의 하한 = lowerbound

    - Ω(g(n^2)) = 아무리 빨리 처리하더라도 n^2 이상의 시간은 반드시 걸린다
        = n^3도 Ω(n^2)에 포함됨

[3] 빅 세타

    : Θ(g(n)) = 증가 속도가 g(n)과 같은 복잡도 함수들만을 포함함 = 상한인 동시에 하한인 경우
        = 시간 복잡도를 정확히 계산할 수 있다면 세타를 사용,
            정확히 분석하기 어렵다면 상한을 구해 빅 오 표기법으로 나타내거나 하한을 구해 빅 오메가로

    //일반적으로는 최악의 상황을 고려한 해결책 찾기 때문에 빅 오 표기법을 주로 사용함