나는 Batcher Sort의 개념을 파악하려고합니다. 그러나 필자가 온라인에서 찾은 대부분의 자료는 전적으로 또는 저급 의사 코드에 초점을 맞 춥니 다. 증명을보기 전에 Batcher Sort가 어떻게 작동하는지 이해하고 싶습니다. 어떤 사람이 지나치게 장황한 가상 코드없이 배터 정렬이 작동하는 방식 (특히 병합)에 대한 높은 수준의 개요를 제공 할 수 있습니까 (구현하지 않고 배지 정렬에 대한 아이디어를 원합니다). 감사!Batcher Merge는 어떻게 높은 수준에서 작동합니까?
1
A
답변
1
배터의 정렬은 배터의 병합과 병합됩니다.
두 개의 배열 A와 B를 병합하려면 Batcher의 병합에서 A를 B와 역순으로 병합하여 비트 배열을 만듭니다. 그런 다음 Batcher의 격렬한 정렬을 적용합니다.
배터의 격렬한 정렬은 퀵 소트의 사촌입니다. 이 배열은 배열을 두 개의 반으로 나눕니다. 첫 번째 반의 요소가 두 번째 요소의 요소보다 크지 않도록 교체합니다. 반올림을 반복적으로 정렬합니다.
배열을 회전시켜 요소가 증가하거나 감소 할 수있는 경우 배열은 비트닉입니다. 뻔뻔스러운 종류의 제로 원론에 따르면, 제로 원 입력에 대한 정확성을 증명하는 것만으로도 충분하며, 이제 우리는 그 가정을합니다. 가능성은
0^a 1^b 0^c = 0 ... a copies ... 0 1 ... b copies ... 1 0 ... c copies ... 0 (rotate right by c positions)
및 A, B, C가 음이 아닌 정수
1^a 0^b 1^c (rotate left by a positions)
이다.
A = 0^w
B = 1^x 0^y 1^z
또는
A = 0^w 1^x
B = 1^y 0^z
또는
A = 0^w 1^x 0^y
B = 1^z
또는 다른 세 다음 바이 토닉 정렬 처음 두 동일한 크기의 이러한 배열은 몇 가지 가능성이있다 A 및 B. 절반 분할 0과 1은 바뀌 었습니다. Batcher의 통찰력은 A [i], B [i]에 모든 i에 대한 비교기를 적용함으로써 A가 모두 0이고 B가 비트닉이거나 A가 비트닉이고 B가 모두 1 인 것입니다. 어느 쪽이든, 재귀 적 정렬에 대한 전제 조건이 충족됩니다.
유일한 사소하지 않은 경우가
A = 0^w 1^x
B = 1^y 0^z
하고 보완
이다. w> = y이면 A, B가A = 0^(w+x)
B = 1^y 0^(w-y) 1^x
이됩니다. 따라서 A는 모두 0이고 B는 비트입니다. w < y이면,
A = 0^w 1^(y-w) 0^z
B = 1^(y+z)
이므로 B는 모두 1이고 A는 비트 음입니다. 우리가 재귀 적으로 A와 B를 정렬하면, 그것들의 연결은 정렬 된 배열입니다.
관련 문제
- 1. 주소 지정 모드는 실제 수준에서 어떻게 작동합니까?
- 2. 높은 수준에서 사용할 데이터베이스 격리 수준을 어떻게 지정합니까?
- 3. 참조 및 네임 스페이스는 어떻게 작동합니까?
- 4. OS 수준에서 수면은 어떻게 구현됩니까?
- 5. .NET : .config 파일은 어떻게 작동합니까?
- 6. 어떻게 작동합니까?
- 7. 어떻게 작동합니까?
- 8. 어떻게 작동합니까?
- 9. PHP max_execution_time은 어떻게 작동합니까?
- 10. 이 어셈블리는 어떻게 작동합니까?
- 11. 경로 찾기 소프트웨어는 어떻게 작동합니까?
- 12. Qt 질문 : 신호와 슬롯은 어떻게 작동합니까?
- 13. 안드로이드 소프트웨어 스택은 어떻게 작동합니까?
- 14. Gmail 스팸 필터는 어떻게 작동합니까?
- 15. std :: merge는 2 mmaped 배열을 사용합니까?
- 16. JPA Hibernate merge는 update 대신 insert를 수행한다.
- 17. .net 4.0 [named] 튜플이 어떻게 작동합니까?
- 18. 고정 문서 인쇄는 어떻게 작동합니까?
- 19. 메모리 조각 모음 소프트웨어. 어떻게 작동합니까? 작동합니까?
- 20. LINQ는 내부적으로 어떻게 작동합니까?
- 21. 파이썬없이 수은이 어떻게 작동합니까?
- 22. NHibernate 플러시 - 어떻게 작동합니까?
- 23. 카테고리는 어떻게 작동합니까?
- 24. OnLive : 어떻게 작동합니까?
- 25. XNA MathHelper.SmoothStep? 어떻게 작동합니까?
- 26. 디버거는 어떻게 작동합니까?
- 27. TABLE은 AHDL에서 어떻게 작동합니까?
- 28. 세션과 쿠키는 어떻게 작동합니까?
- 29. substring()은 어떻게 작동합니까?
- 30. .htaccess 리디렉션이 어떻게 작동합니까?