5 개 요소를 정렬 (순서 정렬)하는 데 필요한 최소 비교 수


22

5 개의 요소를 정렬 (순서 정렬)하는 데 필요한 최소 비교 수를 찾고이 수의 비교를 사용하여 이러한 요소를 정렬하는 알고리즘을 고안하십시오.

해결책 : 5가 있습니다! = 120 개의 가능한 결과. 따라서 정렬 절차를위한 이진 트리의 수준은 7 단계 이상입니다. 실제로 ≥ 120은 h ≥ 7을의미합니다. 그러나 7 번의 비교로는 충분하지 않습니다. 5 개의 요소를 정렬 (순서 정렬)하는 데 필요한 최소 비교 수는 8입니다.2hh

내 실제 질문은 다음과 같습니다 .8 비교에서 알고리즘을 찾았지만 7 비교에서 수행 할 수 없다는 것을 어떻게 증명할 있습니까?


답변:


27

해결책이 잘못되었습니다. 깊이 [1; 2 초 동안 5.3.1]은 단지 7 개의 비교만으로 5 개의 값을 분류 할 수 있음을 보여준다.

답은 일반적인 알고리즘이 아니라 맞춘 방법 입니다. 또한 좋지 않습니다. 이것은 개요입니다 :n=5

  1. 처음 두 쌍을 정렬하십시오.

  2. 쌍을 각각 더 큰 요소로 주문하십시오.

    결과를 라고 부릅니다 . 우리는 a < b < dc < d를 알고 있습니다.[a,b,c,d,e]에이<<기음<

  3. [ a , b , d ]에 삽입하십시오 .이자형[에이,,]

  4. 3 단계 결과에 를 삽입하십시오 .기음

첫 번째 단계는 두 가지 비교를 명확하게 수행합니다. 두 번째 단계는 하나뿐입니다. 마지막 두 단계는 각각 두 가지 비교를 수행합니다. 두 경우 모두 3 요소 목록에 삽입하고 (4 단계의 경우 에서 c 가 현재 목록의 마지막 요소보다 작다는 것을 알 수 있음 ) 먼저 중간 요소와 비교하십시오. 총 7 개의 비교가 이루어집니다.기음<기음

이 "좋은"의사 코드를 작성하는 방법을 보지 못 했으므로 테스트 된 (그리고 잘 읽을 수있는) 구현에 대해서는 여기 를 참조 하십시오 .


  1. 박사 HB Demuth의 논문 (Stanford University) (1956)

    HB Demuth (1985)의 전자 데이터 정렬 참조

  2. 정렬 및 검색 : Donald E. Knuth; 컴퓨터 프로그래밍 Vol. 3 (1998 년 2 판)

5
이 테스트는 불가능하다는 것을 보여주는 5 가지 포인트를 제공합니다. 답을 얻는 데 얼마나 많은 점수가 있는지 궁금합니다 :-) (테스트가 잘못 될 수 없기 때문에 아마도 0입니다).
gnasher729

0

비교 기반 정렬에 대한 이론적 인 하한은 log(n!) 입니다. 즉, < 또는 > 비교 만 사용하여 n 항목 을 정렬하려면 최소한 n 의 밑이 2 인 로그가 필요합니다 ! 따라서 log ( 5 ! ) 6.91 작업입니다.<>n!log(5!)6.91

5!=120 부터 ! = 12027=128 이면 이진 결정 트리를 사용하여 7 개의 비교에서 5 개의 항목을 정렬 할 수 있습니다. 트리는 120 개의 순열 중 정확히 어떤 순열을 찾은 다음 스왑을 정렬하는 데 필요합니다.

예쁘거나 짧은 코드는 아니며 코드 생성 방법을 사용하여 의사 결정 트리와 스왑을 작성하는 것이 아니라 직접 작성해야합니다. 5 개 항목의 가능한 순열에 대해 작동하므로 7 개 이하의 비교에서 5 개 항목을 정렬 할 수 있음을 증명합니다.


내가 기억할 수있는 한, 이론적 인 하한은 점근 적 하한을 나타 냅니다 (즉, ). 상수 계수가 1이라는 것을 절대 확신하십니까? Ω(nlogn)
dkaeae

최악의 경우 이론상 하한은 ceil (log2 (n!))입니다. 왜냐하면 정확히 n이 있기 때문입니다! 순열과 k 비교가 있으면 2 ^ k ≥ n!이 필요합니다. 그것은 상수 요소 1이 아니라 정확합니다.
gnasher729

-1

나는 퀵 정렬을 생각하고 있었다. 중간 요소 인 요소를 피벗으로 선택합니다. 피벗을 나머지 4 개 항목과 비교하여 두 개의 파일을 정렬합니다. 이 더미들 각각은 1 개의 비교로 분류 될 수 있습니다. 내가 끔찍한 실수를하지 않는 한, 5 항목은 6 번의 비교로 완전히 정렬되었으며 작업을 수행하는 데 필요한 비교 횟수는 가장 적습니다. 원래의 질문은 5 개의 요소를 정렬하는 데 가장 적은 수의 비교를 찾는 것입니다.


1
하나의 비교에서 3 개의 요소 더미를 어떻게 정렬 할 수 있습니까?
xskxzr

무슨 3 요소 더미에 대해 이야기하고 있습니까? 내가 위에서 설명한 것은 첫 번째 통과 후 2 개의 요소로 된 2 개의 더미를 생성합니다.
scottyc

임의 요소를 피벗으로 사용한다고 생각했습니다. 4 가지 비교에서 중간 요소를 피벗으로 어떻게 선택할 수 있습니까?
xskxzr

그것은 내가 말하는 것이 아닙니다. 위에서 "5! = 120 .... 이진 의사 결정 트리를 사용하면 7 개의 비교에서 5 개의 항목을 정렬 할 수 있습니다." 요소의 순열 수는 120 개이지만 quicksort를 실행하는 임의의 샘플은 작업을 수행하는 데 6 개만 소요 되었기 때문에 6 개의 비교 만있는 분기가 있어야합니다. 120 개의 순열 중 하나는 정렬 된 목록에 대한 것입니다. 해당 브랜치는 4 개의 비교 만 포함 할 수 있습니다.
scottyc

-2

알고리즘을 테스트 할 수 있으면 모든 숫자 조합에서 알고리즘을 테스트하십시오. 숫자가 많은 경우 임의의 조합을 많이 테스트하십시오. 정확하지는 않지만 모든 조합보다 빠릅니다.

최소
a <b <c = 2
a <b <c <d = 3
a <b <c <d <e = 4

극대
3 ^ 3
4 ^ 4
5 ^ 5

4 개의 숫자에 대해 중간 사용 3-6에 삽입합니다.
4 개의 숫자에 4-5를 병합합니다.
위키에 의한 최소 비교는 4 개의 숫자에 대해 5입니다. :) 5는 7입니다. 여전히 8을 사용합니다.
https://ko.wikipedia.org/wiki/Comparison_sort#Number_of_comparisons_required_to_sort_a_list
비교 전에 모든 것을 알고 있다면 비교를 통해 내려갈 수 있습니다. 4 개의 숫자에 대한 내 평균은 모든 조합 3.96 / 1024입니다.


2
이것은 질문에 대답하지 않습니다. 이 질문은 7 가지 비교 만 사용하여 정렬 할 수있는 방법이 없다는 것을 증명하는 방법을 묻습니다. 접근 방식을 사용하려면 최대 7 개의 비교를 사용하는 모든 알고리즘을 열거해야합니다. 합리적인 시간에 열거하기에는 너무 많은 알고리즘이 있다고 생각합니다. 어쨌든, 기존 답변에 어떤 추가 사항이 있는지 알 수 없으므로 이미 질문에 대한 완전한 답변을 제공했습니다. 새로운 것을 추가 할 수있는 질문에 대답하는 데 집중하는 것이 좋습니다.
DW

추가는 alg에 대한 그래픽과 팁입니다. cmp 이전의 cmp 값을 예측합니다. 그리고 그의 최소값은 7, 다른 소스 8, 실제 최소값입니다. 4입니다 !!! 4는 오름차순으로 만 작동합니다. 예 1 : 00000 01234 43210 10000 ... 예 2 : 중간에 삽입 : 43210, 4 시작, 3, cp 4> 3, 2, cp 4> 2, cp 3> 3, 1, cp (mid) 3> 1, cp 2> 1, 0, cp (mid) 3> 0, cp 2> 0, cp 1> 0 ... 8 cmp를 얻습니다. 7은 conncrete order 또는 alg에 가능합니다. 내 페이지에서 4 개의 숫자를 찾을 수 있습니다 mlich.zam.slu.cz/js-sort/x-sort-x2.htm , 평균 3.96. 최소 최대 3-6. 5를 바꾸고 그의 alg를 시험 할 수 있습니다.
피터 Mlich
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.