병리학 정렬
상사는 회사 응용 프로그램의 성능을 향상시키기 위해 정렬 알고리즘을 개발할 것을 요구했습니다. 그러나 응용 프로그램을 작성한 후에는 훨씬 더 빠르게 만들 수 없을 것입니다. 상사를 실망시키지 않기 위해 특정 데이터 세트에 대해 정렬하는 것보다 더 잘 작동하는 새로운 알고리즘을 개발하기로 결정했습니다. 물론 알고리즘이 일부 경우에만 작동한다는 것을 분명하게 알 수 없으므로 가능한 한 모호하게 만들려고합니다.
이 콘테스트의 목적은 다른 언어보다 특정 데이터 세트에서 더 나은 성능을 발휘하여 선택한 언어로 정렬 루틴을 작성하는 것입니다. 속도를 결정하는 분류가 구체적 일수록 좋습니다. 알고리즘은 어떤 종류의 정렬을 수행해야하므로 이미 완전히 정렬 된 데이터에 의존하는 알고리즘 (아무것도하지 않는 알고리즘) 또는 완전히 역순으로 정렬 된 데이터에 의존하는 알고리즘은 모두 유효하지 않습니다. 정렬 알고리즘은 모든 데이터 세트를 올바르게 정렬해야합니다.
루틴을 제시 한 후 특정 데이터 세트에서만 작동하는 이유에 대한 설명을 포함하고 하나 이상의 우수 (빠른) 데이터 세트와 하나의 불량 (느린) 데이터 세트에 대한 테스트 실행을 포함하십시오. 여기서 요점은 당신이 상사에게 당신이 더 나은 정렬 방법을 발견했다는 것을 증명할 수 있기 때문에 테스트 데이터가 많을수록 좋습니다. 물론 상사에게 좋은 데이터의 테스트 결과 만 보여 주므로 필요한 테스트 데이터의 결함이 너무 분명하지 않을 수 있습니다. 해당 언어에 해당되는 경우 알고리즘이 언어의 내장 정렬 알고리즘보다 빠르다는 것을 보여주십시오.
예를 들어, 삽입 정렬 알고리즘은 거의 정렬 된 데이터에서 삽입 정렬이 O (n)에 접근하기 때문에 이미 정렬 된 데이터는 양호하고 불량 데이터는 완전히 임의의 데이터 인 삽입 정렬 알고리즘을 제출할 수 있습니다. 그러나 상사는 아마도 모든 테스트 데이터가 거의 처음부터 정렬되어 있음을 알 수 있기 때문에 이것은 좋지 않습니다.
이것은 인기 경연 대회 이므로 7 일 (5 월 21 일) 후 가장 많은 표를 얻은 답변이 이깁니다.
아무도 나를 이길 수 없다면, 균일하게 분산 된 데이터 세트를 활용하는 커뮤니티 위키 답변을 제출하고 싶습니다.