Programming/Algorithm

알고리즘 효율성

ParkJinseok 2021. 10. 10. 00:04

알고리즘 효율성 분석

    • 시간 효율성
      • 가장 중요한 평가 요소
      • 실제 실행 시간을 측정할 수도 있지만, 대부분은 이론적으로 복잡도를 분석하는 방법을 사용함
    • 공간 효율성
      • 컴퓨터 메모리를 얼마나 사용하는지를 측정
    • 알고리즘의 효율성 평가를 하려면 직접 구현하고, 동일한 조건의 하드웨어에서 동일한 OS, 소프트웨어를 사용하는 등의 조건이 많이 따른다
      따라서, 일반적으로 이론적으로 알고리즘의 복잡도를 분석하는 방법이 주로 사용된다.
    • 알고리즘의 복잡도를 분석하기 위해 반드시 확인해야하는 사항들
      • 알고리즘의 입력의 크기?
      • 복잡도에 영향을 미치는 가장 핵심적인 기본 연산은 무엇인가?
        • ex)다중 루프의 경우 가장 안쪽의 연산
      • 입력의 크기가 증가함에 따라 처리시간은 어떤 형태로 증가하는가?
      • 입력의 특성에 따라 알고리즘 효율성에는 어떤 차이가 있는가?

복잡도 함수와 증가 속도

    • 기본 연산이 실행되는 전체 횟수는 입력의 개수 n에 영향을 받는데, 연산의 수를 n의 함수로 나타낸 것을 시간 복잡도 함수라고 하고 T(n)이라고 표기함
    • 알고리즘의 효율성 분석은 충분히 큰 (n > n0) 입력에 대해서만 관심이 있음
    • 입력의 크기가 무한대로 커짐에 따라 실행시간의 증가 속도(Order of growth)에만 관심이 있음
    • 알고리즘을 구현하지 않고도 모든 입력에 대해 실행 하드웨어나 소프트웨어 환경과 관계없이 효율성 평가를 할 수 있음

최선,최악,평균적인 효율성

    • 최선의 경우(Best case)
      • 실행시간이 가장 적은 경우를 의미함
      • 알고리즘 분석에서는 큰 의미가 없음
    • 평균적인 경우(Average case)
      • 알고리즘의 모든 입력을 고려하고 각 입력이 발생할 확률을 고려한 평균적인 실행시간을 의미함
      • 모든 입력을 고려해야 하기때문에 정확히 계산하기가 어려움
    • 최악의 경우(Worst case)
      • 입력의 구성이 알고리즘의 실행시간을 가장 많이 요구하는 경우를 의미함
      • 알고리즘에 가장 불리한 입력 데이터를 사용하는 최악의 경우에 대한 성능이 가장 중요하게 사용됨
      • ex)자율주행 자동차나 항공 관제업무에 사용되는 알고리즘은 아무리 불리한 입력이 들어오더라도 일정한 시간안에 반드시 계산이 끝나야 사고 발생을 막을 수 있다

'Programming > Algorithm' 카테고리의 다른 글

억지 기법과 완전 탐색  (0) 2021.10.19
점근적 성능 분석 방법  (0) 2021.10.12
기본적인 자료구조  (0) 2021.10.07
문제의 유형들  (0) 2021.10.06
문제 해결 과정  (0) 2021.10.06