여기서는 점근 분석에 의해 입력의 크기가 무한대로 진행됨에 따라 알고리즘의 동작을 의미한다고 가정합니다.
우리가 점근 분석을 사용하는 이유는 실제로 알고리즘의 동작을 예측하는 데 유용 하기
때문입니다 . 예측은 예를 들어 어떤 알고리즘을 사용해야하는지에 대한 알고리즘이 다른 경우에 결정을 내릴 수있게합니다. (유용하다고해서 항상 올바른 것은 아닙니다.)
실제 세계의 단순화 된 모델에 대해서도 같은 질문을 할 수 있습니다. 현실 세계의 단순화 된 수학적 모델을 사용하는 이유는 무엇입니까?
물리학에 대해 생각하십시오. 고전적인 뉴턴 물리학은 현실 세계를 예측하는 데 상대 론적 물리학만큼 좋지 않습니다. 그러나 자동차, 초고층 빌딩, 잠수함, 비행기, 다리 등을 만들기에 충분한 모델입니다. 위성을 만들거나 우주 탐사선을 명왕성에 보내거나 움직임을 예측하려는 경우와 같이 충분하지 않은 경우가 있습니다. 별이나 행성과 같은 거대한 천체 또는 전자와 같은 초고속 물체.
모델의 한계가 무엇인지 아는 것이 중요합니다.
일반적으로 현실 세계의 근사치입니다.
실제로 우리는 더 나은 점근 분석을 가진 알고리즘이 실제로 더 잘 작동한다는 것을 종종 알 수 있습니다. 알고리즘이 더 나은 점근 적 행동을 갖는 경우는 드물기 때문에 입력이 충분히 클 수있는 경우 일반적으로 알고리즘 행동의 첫 번째 예측으로 점근 적 분석에 의존 할 수 있습니다. 입력이 작다는 것을 알고 있다면 그렇지 않습니다. 원하는 성능에 따라보다 신중한 분석이 필요할 수 있습니다. 예를 들어 입력 분포에 대한 정보가있는 경우 알고리즘에 제공되는 목표를 달성하기 위해보다 신중한 분석을 수행 할 수 있습니다 (예 : 99에서 빠르게) 입력의 %). 요점은 첫 단계로서 점근 분석은 좋은 출발점입니다. 실제로 성능 테스트도 수행해야하지만 자체 문제도 있음을 명심해야합니다.
실제로 계산하는 것은 비교적 간단합니다.
일반적으로 알고리즘의 점근 적 복잡성에 대해 적어도 좋은 범위를 계산할 수 있습니다. 간단히하기 위해 모든 입력에서 다른 알고리즘보다 우수한 알고리즘 가 있다고 가정합니다 . 가 다른 사람보다 낫다 는 것을 어떻게 알 수 있습니까? 우리는 점근 적 분석을 수행하고 있음을 알 수A AAAA더 나은 점근 적 복잡성이 있습니다. 모든 입력에서 다른 것보다 낫지 않은 것은 무엇입니까? 그러면 더 까다로워지고 우리가 관심있는 것에 달려 있습니다. 큰 입력이나 작은 입력에 관심이 있습니까? 큰 입력에 관심이 있다면 알고리즘이 더 나은 점근 적 복잡성을 갖지만 우리가 관심을 갖는 큰 입력에서 최악의 행동을하는 것은 일반적이지 않습니다. 작은 입력에 대해 더 신경 쓰면 점근 분석은 그다지 유용하지 않을 수 있습니다. 관심있는 입력에 대한 알고리즘의 실행 시간을 비교해야합니다. 실제로 복잡한 요구 사항이있는 복잡한 작업의 경우 점근 분석이 유용하지 않을 수 있습니다. 알고리즘 교과서에서 다루는 간단한 기본 문제의 경우 매우 유용합니다.
간단히 말하면 점근 적 복잡성은 간단한 기본 작업 (알고리즘 교과서의 문제)에 대한 실제 알고리즘 복잡도의 근사치를 계산하기가 비교적 쉽습니다. 보다 복잡한 프로그램을 구축함에 따라 성능 요구 사항이 변경되고 더욱 복잡해져 점근 분석이 유용하지 않을 수 있습니다.
알고리즘의 성능을 예측하고 비교하기 위해 점근 분석을 다른 접근법과 비교하는 것이 좋습니다. 일반적인 접근법 중 하나는 랜덤 또는 벤치 마크 입력에 대한 성능 테스트입니다. 예를 들어 SAT 해석과 같이 휴리스틱을 사용하는 경우 점근 적 복잡성을 계산하는 것이 어렵거나 실현 불가능한 경우가 일반적입니다. 또 다른 경우는 프로그램의 성능이 외부 요인에 의존하는 경우와 같이 요구 사항이 더 복잡한 경우이며, 목표는 일정 시간 제한 (예 : 사용자에게 표시되는 인터페이스 업데이트에 대해 생각)에서 99 %의 일정 시간 내에 완료되는 것이있을 수 있습니다. 입력.
그러나 성능 분석에도 문제가 있음을 명심하십시오. 그것은 수학에 대한 수혜자에게 성능에 대해 더 적은 것을 제공하지는 않습니다. 실제로 알고리즘에 제공 될 모든 입력에 대해 성능 테스트를 수행합니다 (종종 계산이 불가능합니다). 우리는 무작위 표본 또는 우리가 암시하는 벤치 마크에 대해에 테스트하면 가정 몇 가지 규칙
알고리즘의 성능에 대한을, 즉 알고리즘은 성능 테스트의 일부가 아닌 다른 입력에 유사하게 수행합니다.
성능 테스트의 두 번째 문제는 테스트 환경에 따라 다릅니다. 즉, 프로그램의 성능은 입력만으로 결정되는 것이 아니라 외부 요인 (예 : 머신 유형, 운영 체제, 코딩 알고리즘의 효율성, CPU 사용률, 메모리 액세스 시간 등)에 의해 결정됩니다. 같은 기계에서 테스트합니다. 여기서도 성능 테스트가 수행되는 특정 환경이 프로그램을 실행할 수있는 모든 환경에서 성능 테스트를 수행하지 않는 한 (그리고 정렬을 실행할 수있는 기계를 어떻게 예측할 수 있는지를 제외하고) 실제 환경과 유사하다고 가정합니다. 알고리즘을 10 년 만에?).
MergeSort ( ) 의 점근 적 실행 시간을 계산하고 이를 SelectionSort ( ) 또는 BinarySerch ( 의 실행 시간과 비교하는 것과 비교하십시오. )를 LinearSearch ( )와 함께 사용하십시오 .Θ ( n 2 ) Θ ( lg n ) O ( n )Θ(nlgn)Θ(n2)Θ(lgn)O(n)