답변:
이것은 실제로 몇 가지 방법론적이고 실용적인 답변이있는 깊은 문제입니다. 알고리즘 에 대해 알고 싶다고 가정합니다 . 주어진 입력에서 주어진 시스템에서 어떤 알고리즘이 더 잘 작동하는지 알고 싶다면 런타임을 측정하십시오. 주어진 알고리즘에 대한 컴파일러의 품질을 비교하려면 런타임을 측정하십시오. 알고리즘에 대해 배우려면하지 마십시오.
먼저 런타임을 사용하는 것이 좋지 않은 이유를 몇 가지 설명하겠습니다.
나는 이것이 런타임이 알고리즘을 비교하는 끔찍한 척도이며 알고리즘 런타임을 조사하기위한 일반적인 추상 방법이 필요하다는 것을 확신 해주기를 바랍니다.
질문의 두 번째 부분으로 넘어갑니다. 왜 우리는 비교 또는 유사한 기본 연산을 사용합니까?
분석적 견인 성
공식적인 분석을 원한다고 가정 할 수 있어야 합니다. 개별 진술을 계산하는 것은 매우 기술적이며 때로는 어려운 경우도 있습니다. 그럼에도 불구하고 어떤 사람들은 그것을한다 (예 : 크 누스). 런타임 을 지배 하는 명령문 만 계산하는 것이 더 쉽습니다. 같은 이유로, 우리는 종종 최악의 런타임을 조사 만합니다 (상한).
지배
선택한 작업 이 런타임을 지배 합니다. 그렇다고해서 단어 크기의 정수를 정렬 할 때 Quicksort와 같은 비교는 명확하지 않습니다. 그러나 그것들은 가장 자주 실행 되므로, 그것들을 계산함으로써 알고리즘에서 가장 많이 실행 된 부분이 얼마나 자주 실행되는지 계산합니다. 결과적으로 점근 적 런타임은 지배적 인 기본 작업의 수에 비례합니다. 우리가 비교 만 계산하더라도 Landau 표기법과 "런타임"이라는 단어를 사용하는 것이 편한 이유입니다.
하나 이상의 작업을 계산하는 것이 유용 할 수 있습니다. 예를 들어, 일부 Quicksort 변형은 다른 것보다 더 많은 비교를 수행하지만 스왑은 적습니다 (평균).
가치있는 것을 위해, 모든 이론을 다 수행 한 후 이론이 만든 예측이 올바른지 확인하기 위해 런타임을 다시 방문 할 수 있습니다. 그렇지 않은 경우 이론은 실용적이지 않으며 확장되어야합니다. 메모리 계층 구조는 가장 중요하지만 기본 분석에서는 누락 된 것 중 하나입니다.
이는 알고리즘을 실행하는 데 걸리는 총 시간이 다른 요인과 함께 실행되는 하드웨어에 의존하기 때문입니다. 하나는 Pentium 4에서 실행되고 다른 하나는 Core i7에서 실행되는 경우 두 알고리즘을 비교하는 것은 신뢰할 수 없습니다. 이뿐 만 아니라 동일한 컴퓨터에서 둘 다 실행했다고 가정 해 봅시다. 둘 다 같은 시간의 프로세서 시간을 가지고 있다는 말은 무엇입니까? 다른 프로세스가 알고리즘 중 하나의 프로세스보다 우선 순위가 높은 경우 어떻게됩니까?
이를 극복하기 위해이 전체 시간과 분리하여 알고리즘의 확장 정도를 기준으로 비교합니다. 연구 논문에 O (1) 또는 O (n ^ 2)와 같은 표기법이있을 수 있습니다. Big O 표기법을 참조하려면 약간 더 읽어야 할 수도 있습니다 .
다른 답변은 기본 연산 수로 런타임을 분석하는 이유를 설명하기 때문에 비교 가 많은 (전체는 아님) 정렬 알고리즘의 올바른 지표 인 몇 가지 이유를 설명 하겠습니다 .