우선, 두 알고리즘 모두 모든 입력에 대해 "작동"합니다. 문제는 성능에 관한 것입니다.
그 질문에 대한 답은 엉터리입니다. 하나의 알고리즘이 다른 알고리즘보다 점진적으로 더 효율적이라고 말하는 한 가지 방법은 입력 크기가 클수록 더 효율적인 알고리즘이 일반적으로 추상 계산에 의해 더 적은 "계산 단계"를 취할 수 있도록 (문제 별) 입력 크기가있는 경우입니다. 비교 횟수.
대답의 아이디어는 점진적으로 더 효율적인 알고리즘 이 입력 크기보다 더 많은 단계를 여전히 요구할 수 있다는 것입니다. 수 점근 적으로보다 효율적인 알고리즘은 모든 입력에 대한 적은 단계를 필요로하는 경우가 있지만, 일반적으로하지 않습니다이 경우 연습에있을 필요가 없습니다. 은 "올바른"대답을 더 잘 표현 될 것입니다 그래서 " 제외한 모든 입력을위한 더 나은 선택이 될 것입니다 가능성이 작은 입력".X
그래도 문구는 그렇게 크지 않습니다. 우선, 어떤 알고리즘이 "더 나은 선택"인지 결정하는 데 더 많은 요소가 있지만,이 경우 의도가 충분히 명확하다는 것을 알려 드리겠습니다. 실제 문제는 "작은"및 "큰"입니다. 내가 가장 좋아하는 논문 중 하나는 모든 잘 정의 된 문제에 대한 가장 빠르고 가장 짧은 알고리즘입니다 . 이 논문은 소정의 알고리즘을 설명 어떤 기능의 사양 및 그것의 해당 함수를 계산할 것이다 다항식 시간 내에 계산 될 수 있음을 증명 최적 의 요소 내에 시간 복잡도를 플러스 첨가제 용어. 예를 들어, 함수 사양으로 거품 정렬 구현을 제공하고 라는 간단한 증거를 제공 한 경우5O(n2), 그것은 정렬 알고리즘을 생성합니다 . 사실이었다 알고리즘 생성 할 여기서, 의 상수 인자였다 점근 * 최적 알고리즘. 이것은 놀랍습니다. 한 가지 문제가 있습니다. 상수 항 – 숨겨져O(nlgn)5cnlgn+o(nlgn)co(nlgn)이 예에서 – 거의 모든 실제 문제에 대해 알고리즘을 거의 완전히 실행할 수 없게 만듭니다. "완전히 불가능하다"는 것은 무엇을 의미합니까? 나는 그 알고리즘이 완성되기 전에 우주의 열 사망이 여러 번 일어날 것이라는 것을 의미합니다. 그럼에도 불구하고 적절하게 "큰"입력의 경우 버블 정렬보다 빠릅니다. 내 요점은 계산하는 것은 물론 "적절하게 큰"입력으로 어떤 방법으로도 실제로 적을 수 없다는 것입니다.
어쨌든, 정답은 어떻게 말해야합니까 : " 는 충분히 큰 입력에서 보다 적은 단계를 요구합니다 ". 적용 할 수있는 "단계"라는 개념이 여러 개 있기 때문에 여전히 모호합니다. 알고리즘은 하나의 메트릭으로 더 효율적이고 다른 메트릭으로는 덜 효율적일 수 있습니다. 이 표현은 "더 나은 선택"의 가치 판단을 피합니다. 캐시 효율이나 구현의 단순성과 같은 일정한 요소 / 조건이 지정 될 때 무조건 덜 효율적인 알고리즘 또는 덜 효율적인 알고리즘을 선택해야하는 많은 이유가 있습니다.XY
* 여기에는 미묘한 부분이 있습니다. 점진적으로 최적 인 알고리즘은 점진적으로 비 최적화 된 알고리즘보다 더 나쁜 상수 계수 가질 수 있습니다 . 나는 그것이 무의식적으로 최적의 알고리즘에 대해 의 최고의 가치를 가질 것이라고 생각 하지만, 점근 효율의 약간의 이득을 짜기 위해 엄청난 복잡성이 추가되어 상수 요소를 크게 증가시키는 것으로 생각할 수 있습니다.cc