병합 삽입 정렬
Merge-insertion sort컴퓨터 공학에서, 병합 삽입 분류 또는 포드-존슨 알고리즘은 L. R. 포드 주니어와 셀머 M. 존슨에 의해 1959년에 출판된 비교 분류 알고리즘이다.[1][2][3][4]이전에 가장 잘 알려진 알고리즘,[5] 이진 삽입 정렬 및 병합 정렬보다 최악의 경우 비교를 적게 사용하며,[1] 20년 동안 가장 적게 알려진 비교를 가진 정렬 알고리즘이었다.실제적인 의미는 아니지만 최소 비교 횟수로 분류하는 문제와 관련하여 이론적 관심사로 남아 있다.[3]같은 알고리즘은 스타니스와프 트라이부바와와 크젠 핑에 의해서도 독자적으로 발견되었을지도 모른다.[4]
알고리즘.
병합 삽입 정렬은 요소의 입력 에서 다음 단계를 수행하십시오.[6]
- 의 요소를 로 n/ 쌍의 원소로 그룹화하여, 원소의 수가 홀수일 경우 하나의 원소가 손상되지 않도록 하십시오.
- n / 을 (를) 쌍당 하나씩 비교하여 각 쌍의 두 요소 중 더 큰 요소를 확인하십시오.
- 각 쌍에서 더 큰 원소를 / ⌋ 재귀적으로 정렬하여 요소의 n/ 의 정렬된 시퀀스 을 오름차순으로 만드십시오.
- 의 첫 번째 및 가장 작은 요소와 쌍을 이룬 요소를 S 의 시작 부분에 삽입하십시오
- 아래에서 특별히 선택한 순서와 X∖ 2}의 나머지 -1} 요소를 한 번에 하나씩 S}에 삽입하십시오각 가삽입되어야 하는 위치를 하려면 S {\displaystyle 아래 설명 참조)의 하위 항목에서 이진 검색을 사용하십시오.
이 은 검색되는 부속품의 길이가 2의 전력보다 1보다 작을 때 S 에 요소를 삽입하는 데 사용되는 이진 검색이 (최악의 경우 분석의 관점에서) 가장 효율적이라는 점을 이용하기 위해 설계되었다.이는 이러한 길이에 대해 검색의 모든 결과는 서로 동일한 수의 비교를 사용하기 때문이다.[1]이러한 길이를 생성하는 삽입 순서를 선택하려면 위의 개요 4단계(남은 요소를 삽입하기 전에) 뒤에 정렬된 S 을(를) 고려하십시오. 는 이 정렬된 시퀀스의 요소를 나타내도록 하십시오.그러므로,
여기서 3이 (가) 있는 각 요소 x 은(는) 아직 삽입되지 않은 y< x i와 쌍을 이룬다.( 2 1 displaystyle 2}}개가 서로 쌍으로 이루어졌기 때문에 y displaystyle {1} 또는 y {\ x_2}}의 요소가 없다.) 이 (가) 홀수인 경우, 손상되지 않은 요소도 쌍체 요소의 인덱스보다 큰 로 가 매겨져야 한다.그러면 위의 개요의 마지막 단계를 다음과 같은 단계로 확장할 수 있다.[1][2][3][4]
- 삽입되지 않은 요소 를 연속 인덱스가 있는 그룹으로 분할하십시오.첫 번째 그룹에는 3 와 두 개의 요소가 있으며, 인접한 두 그룹마다 크기 합이 두 개의 힘의 순서를 형성한다.따라서, 집단의 크기는: 2, 2, 6, 10, 22, 42, ...
- 삽입되지 않은 요소를 그룹별로 정렬(소형 인덱스부터 대형 인덱스까지)하되, 각 그룹 내에서는 대형 인덱스에서 소형 인덱스까지 정렬한다.따라서 순서는 다음과 같이 된다.
- 순서를 사용하여 y i 요소를 {에 삽입하십시오 각 y 에 대해 의 부터 x 까지 이진 검색을 사용하여 를 삽입할 위치를 결정하십시오..
분석
C( ) 은 (는) 요소를 정렬할 때 최악의 경우 병합 삽입 정렬이 수행하는 비교 수를 나타낸다.이 비교 횟수는 다음과 같은 세 항의 합으로 나눌 수 있다.
- 쌍 간의 n /2 {\ n 비교,
- ( / ) C 재귀 호출에 대한 비교 및
- 나머지 요소를 삽입하는 데 사용되는 이항 삽입에 대한 일부 비교 수입니다.
세 번째 항에서, 첫 번째 그룹의 원소에 대한 최악의 경우 비교 횟수는 두 가지인데, 각각 길이가 최대 S 에 삽입되기 때문이다. 을(를) 3개 요소 부분 ,)에 삽입한다Then, is inserted into some permutation of the three-element subsequence , or in some cases into the two-element subsequence . Similarly, the elements 번째 그룹의 y_{와 y 5 y_}}는 각각 3가지 비교를 사용하여 최대 7개까지 길이로 배열되어 삽입된다.왜냐하면 각각의 길이가 연속으로 말미암아, 대부분의 2에 삽입되면 더 일반적으로, 비교의 i의 요소에 대한 최악의 번호는 나는 + 1{\displaystyle를 i+1}, th그룹{\displaystyle 나는}나는 및 1− 1{\displaystyle 2^{i+1}-1}.[1][2][3][4]까지 가산 수 비교할 때 사용하는 모든 요소와 해결하자는 거죠.그 결과ingreative responsion, 이 분석은 공식을[7] 하는 C() 의 값을 계산하는 데 사용될 수 있다
= ,,…{\의 경우 비교 횟수는 다음과 같다[1].
기타 비교 유형과의 관계
알고리즘은 재귀 호출 전에 수행하는 초기 비교(임의적인 항목 준비 및 각 쌍 비교)가 병합 정렬의 초기 비교와 동일한 반면, 재귀 호출 후 수행하는 비교(이항 검색을 사용하여 요소를 하나씩 a에 삽입)는 것이기 때문에 병합 삽입 정렬이라고 불린다.정렬된 목록) 삽입 정렬과 같은 원리를 따른다.그런 의미에서 병합 정렬과 삽입 정렬을 모두 결합한 하이브리드 알고리즘이다.[9]
작은 입력( n= 의 경우 비교 횟수는 n 2 -1 \}n 그러나 입력 값이 클 경우 병합-삽입 알고리즘에 의한 비교 횟수가 이 하한보다 크다.또한 병합 삽입 정렬은 최악의 경우 이진 삽입 정렬 또는 병합 정렬에 의해 수행된 비교를 계산하는 정렬 번호보다 더 적은 비교를 수행한다. 번호는 n 2 -n-. n{\n\2}과 2 2n - n {\2}n-n} 사이에서 변동하며, 선행 항은 동일하지만 저차 선형 항에서는 더 나쁜 상수 요인이다.[1]
때마다 n22{20\leq n\leq 22\displaystyle}≤며 20년 동안 가장 적은 비교와 ≤ 46{\displaystyle n\leq 46}.[10][11]을 알고 있다 15{\displaystyle n\leq 15}또는 20≤ n≤, merge-insertion n{n\displaystyle}항목에 대한 최소 가능한 비교와 Merge-insertion는 정렬 알고리즘입니다. 것이었습니다모든 입력 길이에 대해 알려진 비교가 가장 적은 정렬 알고리즘.그러나 1979년 Glenn Manacher는 다른 분류 알고리즘을 발표했는데, 이 알고리즘은 많은 입력값을 위해 비교를 더 적게 사용했다.[3][5]모든 에 대해 정렬에 정확히 얼마나 많은 비교가 필요한지는 아직 정확히 알려지지 않았지만 Manacher의 알고리즘과 이후 기록을 깨는 정렬 알고리즘은 모두 병합 삽입 정렬 아이디어의 수정을 사용했다.[3]
참조
- ^ a b c d e f g Ford, Lester R. Jr.; Johnson, Selmer M. (1959), "A tournament problem", American Mathematical Monthly, 66: 387–389, doi:10.2307/2308750, MR 0103159
- ^ a b c Williamson, Stanley Gill (2002), "2.31 Merge insertion (Ford–Johnson)", Combinatorics for Computer Science, Dover books on mathematics, Courier Corporation, pp. 66–68, ISBN 9780486420769
- ^ a b c d e f Mahmoud, Hosam M. (2011), "12.3.1 The Ford–Johnson algorithm", Sorting: A Distribution Theory, Wiley Series in Discrete Mathematics and Optimization, vol. 54, John Wiley & Sons, pp. 286–288, ISBN 9781118031131
- ^ a b c d Knuth, Donald E. (1998), "Merge insertion", The Art of Computer Programming, Vol. 3: Sorting and Searching (2nd ed.), pp. 184–186
- ^ a b Manacher, Glenn K. (July 1979), "The Ford-Johnson Sorting Algorithm Is Not Optimal", Journal of the ACM, 26 (3): 441–456, doi:10.1145/322139.322145
- ^ 포드&존슨(1959)의 원래 설명은 원소를 내림차순으로 정렬했다.여기에 나열된 단계는 Knuth(1998)의 설명에 따라 출력을 반대로 한다.결과 알고리즘은 동일한 비교를 하지만 대신 오름차순을 생성한다.
- ^ 크누스(1998)는 합계 공식을 1960년 A의 박사 학위논문으로 인정한다.하디안의근사 공식은 포드&존슨(1959년)이 이미 제공한 것이다.
- ^ Guy, Richard K.; Nowakowski, Richard J. (December 1995), "Monthly Unsolved Problems, 1969-1995", American Mathematical Monthly, 102 (10): 921–926, doi:10.2307/2975272
- ^ 크누스(1998), 페이지 184 : "합병하는 측면과 삽입하는 측면도 있기 때문에, 우리는 병합 삽입이라고 부른다."
- ^ Peczarski, Marcin (2004), "New results in minimum-comparison sorting", Algorithmica, 40 (2): 133–145, doi:10.1007/s00453-004-1100-7, MR 2072769
- ^ Peczarski, Marcin (2007), "The Ford-Johnson algorithm still unbeaten for less than 47 elements", Information Processing Letters, 101 (3): 126–128, doi:10.1016/j.ipl.2006.09.001, MR 2287331