다른 답변이 좋은 점을 제공하지만 여전히 약간 동의하지 않는다고 생각합니다. 그래서 저는이 시점에서 내 생각을 공유 할 것입니다.
요컨대, '있는 그대로'를 유지하는 것은 낭비되는 기회라고 생각합니다. 아마도 현재로서는 우리가 얻을 수있는 최선일 것이지만 이상적이지는 않습니다.
그러나 먼저 짧은 소풍이 필요하다고 생각합니다.
효과적인 알고리즘은 언제 있습니까?
Daniel Sank이 나에게 소수를 인수 분해하는 알고리즘이 있다면 어떻게해야하는지 물었을 때 106심각한 인스턴스의 테스트 세트에서 요인 속도를 높이기 위해 먼저 알고리즘 개선 때문 일지 모르지만 다른 요인 (기계 또는 구현) 때문인지 의심했습니다. 그러나 나는 지금 다른 반응을 보인다고 생각합니다. 밀리 초 내에 매우 많은 수를 고려할 수 있지만 매우 비효율적 인 간단한 알고리즘을 알려 드리겠습니다 .
- 세트를 피 (꽤 큰) 소수의.
- 계산 피2, 정확히 두 가지 요소가있는 모든 복합 재료 세트 피. 각 컴포지트마다 어떤 쌍의 프라임이 구성에 사용되는지 저장하십시오.
- 이제 인스턴스가 주어지면 피2간단히 표에서 인수 분해를보고보고하십시오. 그렇지 않으면 '오류'를보고하십시오
입력이있을 때만 제대로 작동하기 때문에이 알고리즘이 쓰레기라는 것이 분명합니다. 피2. 그러나 알고리즘을 블랙 박스로 지정 하고 입력을 통해서만 "일치로"테스트 할 때이를 확인할 수 있습니다.피? 물론 많은 예제를 시험해 볼 수는 있지만 매우 쉽게 만들 수 있습니다.피 입력에서 알고리즘이 효과가없는 매우 큰 피2 (아마도 우리는 해시 맵이나 무언가를 사용하고 싶을 것입니다).
따라서 우리의 쓰레기 알고리즘이 우연히 '기적적인'속도 향상을 보이는 것처럼 보일 수 있습니다. 물론, 위험을 완화 할 수있는 많은 실험 설계 기법이 있지만, 여전히 실패하지만 더 많은 예제가 우리를 속일 수없는 더 영리한 '빠른'알고리즘이 있습니다! (또한 악의적 인 연구원이 없다고 가정 하므로 문제가 더욱 악화됩니다!)
그래서 나는 "더 나은 성능 메트릭이있을 때 나를 깨워 줘"라고 대답 할 것입니다.
그렇다면 어떻게 더 잘할 수 있습니까?
'블랙 박스'알고리즘을 모든 경우에 대해 테스트 할 여유가 있다면 위의 방법으로 속일 수 없습니다. 그러나 실제 상황에서는 불가능합니다. (이것은 이론적 모델에서 수행 할 수 있습니다!)
대신 우리가 할 수 있는 것은 매개 변수가있는 실행 시간 (일반적으로 입력 크기에 대한)에 대한 통계 가설 을 만들어 이것을 테스트하고, 가설을 조정하고 널을 거부하는 것이 합리적으로 보일 때까지 가설을 조정하고 다시 테스트하는 것입니다. (내가 무시하고있는 다른 요인이있을 수 있습니다. 실제로는 수학자입니다. 실험 설계는 내 전문 지식에 포함되지 않습니다)
매개 변수화에 대한 통계적 테스트의 장점 (예 : 알고리즘 O ( n삼)? )은 모델이 더 일반적 이므로 이전 섹션 에서처럼 '속임수'가 더 어렵다는 것입니다. 불가능하지는 않지만, 이것이 합리적인지에 대한 최소한의 통계적 주장은 정당화 될 수 있습니다.
그래서 상수로 무엇을해야합니까?
내가 생각 에만 "라는109 speedup, wow! "는이 경우를 처리하는 나쁜 방법입니다. 그러나이 결과를 완전히 무시하는 것도 좋지 않습니다.
나는 호기심 상수를 예외 로 간주하는 것이 가장 유용하다고 생각합니다 . 즉, 그 자체로 추가 조사가 필요하다는 주장입니다. 나는 단순히 '우리의 알고리즘은 X 시간이 걸린다'보다 더 일반적인 모델을 기반으로 가설을 만드는 것이 좋은 도구라고 생각합니다. 따라서 여기서 CS 관습을 간단히 받아 들일 수는 없지만 상수에 대한 '경멸'을 완전히 무시하는 것도 나쁜 생각입니다.