홀수-짝수 정렬

Odd–even sort
홀수-짝수 정렬
Example of odd–even transposition sort sorting a list of random numbers
난수 목록을 정렬하는 홀수- 짝수 전환 정렬 예제.
클래스정렬 알고리즘
데이터 구조배열
최악의 경우 공연
베스트 케이스 공연
최악의 경우 공간 복잡성

컴퓨팅에서 홀수-짝수-짝수-짝수-짝수-짝수-짝수-짝수-짝수-짝수-짝수-짝수-짝수-짝수-짝수-짝수-짝수-짝수-짝수-짝수-짝수-짝수-짝수-짝수-짝수-짝수-짝수-짝[1][self-published source]그것은 버블 종류와 관련된 비교 종류로, 그것은 많은 특징들을 공유한다.리스트에 있는 인접 요소의 모든 홀수/짝수 인덱스 쌍을 비교함으로써 기능하며, 쌍이 잘못된 순서(첫 번째가 두 번째보다 큰 경우)에 있을 경우 요소가 전환된다.다음 단계는 (인접 요소들의) 짝수/이상 지수화된 쌍에 대해 이 과정을 반복한다.그런 다음 목록이 정렬될 때까지 홀수/ 짝수 및 짝수/이상한 단계를 번갈아 가며 진행한다.

프로세서 배열 정렬

프로세서당 하나의 값과 로컬 좌-우측 인접 연결만 있는 병렬 프로세서에서 프로세서는 모두 이웃과 동시에 비교 교환 작업을 수행하여 홀수-짝수 쌍과 짝수 쌍을 번갈아 사용한다.이 알고리즘은 1972년에 Habermann에 의해 원래 제시되었고 그러한 프로세서에 효율성이 있는 것으로 나타났다.[2]

알고리즘은 프로세서당 여러 항목의 경우까지 효율적으로 확장된다.Baudet-Stevenson 홀수- 짝수 병합 분할 알고리즘에서, 각 프로세서는 효율적인 정렬 알고리즘을 사용하여 각 단계에서 자체 하위 목록을 정렬하고, 각 단계에서 홀수-짝수-짝수-짝수 사이를 교대로 짝지은 이웃과 병합 분할 또는 전위-merge 작동을 수행한다.[3]

배쳐의 홀수-짝수 병합

관련되지만 더 효율적인 분류 알고리즘은 비교 교환 연산 및 완벽한 섞임 연산을 사용하는 Batcher 홀수 짝수 병합이다.[4]배쳐의 방식은 장거리 연결이 가능한 병렬 프로세서에 효율적이다.[5]

알고리즘.

버블포트처럼 단일 프로세서 알고리즘은 단순하지만 매우 효율적이지 않다.여기서 제로 기반 지수는 다음과 같이 가정한다.

기능을 하다 오드이븐소트(리스트를 작성하다) {   기능을 하다 바꾸다(리스트를 작성하다, i, j) {     시합을 하다 임시 변통하다 = 리스트를 작성하다[i];     리스트를 작성하다[i] = 리스트를 작성하다[j];     리스트를 작성하다[j] = 임시 변통하다;   }    시합을 하다 분류된 = 거짓의;   하는 동안에 (!분류된) {     분류된 = 진실의;     을 위해 (시합을 하다 i = 1; i < 리스트를 작성하다.길이 - 1; i += 2) {       만일 (리스트를 작성하다[i] > 리스트를 작성하다[i + 1]) {         바꾸다(리스트를 작성하다, i, i + 1);         분류된 = 거짓의;       }     }     을 위해 (시합을 하다 i = 0; i < 리스트를 작성하다.길이 - 1; i += 2) {       만일 (리스트를 작성하다[i] > 리스트를 작성하다[i + 1]) {         바꾸다(리스트를 작성하다, i, i + 1);         분류된 = 거짓의;       }     }   } } 

정확성 증명

클레임: ,.. . }, 을(를) <에 의해 순서가 되는 데이터로 한다.홀수-짝수 정렬 알고리즘은 이 데이터를 패스 단위로 올바르게 정렬한다.(여기서 패스는 홀수-짝수 또는 짝수-짝수 비교의 전체 시퀀스로 정의된다.패스 1: 홀수-짝수, 패스 2: 짝수-이상수 등 순서에 따라 패스가 발생한다.

증명:

이 증거는 토마스 워쉬에 의해 느슨하게 근거하고 있다.[6]

정렬 알고리즘은 비교-스왑 연산만을 포함하며, 망각(데이터에 따라 비교-스왑 연산의 순서가 달라지지 않음)하므로 Knuth의 0-1 정렬 원리에 의해 각각 가 0 또는 1일 때 정확성을 확인하는 것으로 충분하다.[7][8] 1s가 있다고 가정하십시오.

가장 오른쪽 1은 짝수 또는 홀수 위치에 있을 수 있으므로 첫 번째 홀수-짝수 패스에 의해 이동되지 않을 수 있음을 관찰하십시오.그러나 첫 번째 홀수-짝수 패스가 지나면 가장 오른쪽 1은 짝수 위치에 있게 된다.나머지 패스를 모두 통과하면 오른쪽으로 이동한다는 것이다.가장 오른쪽이 e{\displaystyle e}보다 크거나 같은 위치에서 시작되므로 최대 n-e{\displaystyle n-e}단계까지 이동해야 한다.따라서 가장 오른쪽 1을 올바른 위치로 이동하려면 n - + {\1}의 패스가 필요하다.

자, 두 번째 오른쪽 1을 생각해 보십시오.두 번의 통과 후, 오른쪽의 1은 적어도 한 단계 이상 오른쪽으로 움직였을 것이다.그 뒤에 남은 모든 패스에 대해 두 번째 오른쪽 패스를 오른쪽 패스로 볼 수 있다.두 번째 1은 적어도 e-1{\displaystyle e-1}위치에서시작하여 최대 n-1{\displaystyle n-1}의위치로이동해야하므로 최대(n-1)-(e-1))n-e-e-e-displaystyle(n-1)=n-e}단계까지이동해야 한다 우측.최대 2회 통과 후, 가장 오른쪽 1은 이미 이동하였으므로 두 번째 가장 오른쪽 1의 진입은 0이 된다.따라서 처음 두 번 이후 모든 패스에 대해 두 번째 오른쪽 가장 오른쪽 1이 오른쪽으로 이동한다.따라서 두 번째 우측 1을 올바른 위치로 이동하려면 최대 -+ 통과해야 한다.

이러한 방식으로 계속 진행하면 유도에 i{\i} -th번째 오른쪽 가장자리 1이 - e+ 패스에서 올바른 위치로 이동되었음을 알 수 있다. 이후 n - + e = n {\ 에서 ii-th번째 오른쪽 가장자리 1이 올바른 위치로 이동된 것이 뒤따른다.따라서 목록은 패스로 올바르게 정렬된다.QED.

각 패스는 ( n) 개의 스텝을 밟기 때문에 이 ( 2) {\^{2 복잡성을 가진다.

참조

  1. ^ Phillips, Malcolm. "Array Sorting". Homepages.ihug.co.nz. Archived from the original on 28 October 2011. Retrieved 3 August 2011.
  2. ^ N. Haberman(1972) "병행적 이웃 분류(또는 유도 원리의 영광)", CMU 컴퓨터 과학 보고서(기술 보고서 AD-759 248, 국가 기술 정보 서비스, 미국 상무부, 5285 Port Rod 스프링필드 VA 22151로 사용 가능).
  3. ^ Lakshmivarahan, S.; Dhall, S. K. & Miller, L. L. (1984), Alt, Franz L. & Yovits, Marshall C. (eds.), "Parallel Sorting Algorithms", Advances in Computers, Academic Press, 23: 295–351, doi:10.1016/S0065-2458(08)60467-2, ISBN 978-0-12-012123-6
  4. ^ Sedgewick, Robert (2003). Algorithms in Java, Parts 1-4 (3rd ed.). Addison-Wesley Professional. pp. 454–464. ISBN 978-0-201-36120-9.
  5. ^ Kent, Allen; Williams, James G. (1993). Encyclopedia of Computer Science and Technology: Supplement 14. CRC Press. pp. 33–38. ISBN 978-0-8247-2282-1.
  6. ^ "Five Lectures on CA" (PDF). Liinwww.ira.uka.de. Retrieved 2017-07-30.
  7. ^ Lang, Hans Werner. "The 0-1-principle". Iti.fh-flensburg.de. Retrieved 30 July 2017.
  8. ^ "Distributed Sorting" (PDF). Net.t-labs.tu-berlin.de. Retrieved 2017-07-30.