우리는 목록 정렬한다고 가정 의 n 개의 실수를. 우리가 정렬 할 수있는 블랙 박스가 있다고 가정합니다 √실수 n 개 . 이 블랙 박스를 사용하면 얼마나 많은 이점을 얻을 수 있습니까?
예를 들어 숫자 만 블랙 박스에 전화합니까? 내가 찾은 최고의 알고리즘은 블랙 박스에 대한n 개의호출을사용합니다. 그러나 나는 그것을 더 향상시킬 수 없었습니다. 다음은 merge-sort와 비슷한 알고리즘입니다.
먼저 목록 를 √ 로 분할하십시오. 은s1,s2,을나열합니다. . . ,s √대략√의 n 사이즈 그런 다음 √를 사용하십시오. 블랙 박스를 호출하여이 목록을 정렬합니다. 마지막으로 다음과 같이 블랙 박스를 사용하여 정렬 된 목록을 병합하십시오.
목록의 가장 작은 요소를 새 목록 에 넣고 블랙 박스를 호출하여 정렬하십시오. 안의 숫자는 L [ 1 ] (제 1 및 작은 원소 L가 )의 최소 수있을 것이다 S . 출력리스트의 첫 번째 위치에 넣을 수 있습니다.
요소를 가정하면로부터 선택되어 S 개의 J , 우리는 대체 L [ 1 ] 정렬리스트의 두 번째 최소의 요소 S J , 다시 두 번째 최소의 부재를 계산하는 데에 블랙 박스를 실행 S를 .
모든 요소가 정렬 될 때까지 계속합니다. 이 부분에 대한 총 블랙 박스 통화 수는 . 따라서 전체 총 통화 수는n입니다.
반면에 다음과 같이 정렬에 필요한 숫자 비교에서 하한을 사용하여 하한을 얻을 수있는 것처럼 보입니다. √를 사용하여 블랙 박스를 구현할 수 있습니다비교. o로문제를 해결할 수 있다면( √블랙 박스를 호출하고 선형 시간으로 병합하면 불가능한o(nlgn)비교로n개의실수를정렬 할 수 있습니다.
블랙 박스에서 사용되는 많은 비교가 공유되므로 우리의 주장에 다시 설명되기 때문에 이 블랙 박스 호출 횟수의 하한 임을 증명할 수 있다고 생각 합니다.
업데이트 : 다른 게시물에서 알 수 있듯이 도 달성 할 수 있습니다.