K 정렬 수열
K-sorted sequence컴퓨터 과학에서 거의 정렬된 수열은 대략 정렬된 수열이라고도 하며 k k - 정렬된 도 합니다.거의 순서가 매겨진다는 것은 시퀀스의 어떤 요소도 시퀀스가 완전히 순서가 매겨진 상태에서 매우 멀리 떨어져 있지 않다는 것을 의미합니다.시퀀스가 완전히 정렬된 경우 시퀀스의 요소가 있어야 할 위치에 없을 수 있습니다.
거의 정렬된 시퀀스는 요소의 정확한 순서가 거의 중요하지 않을 때 특히 유용합니다.예를[1] 들어, 트위터는 거의 2초까지 트윗을 정렬하는데, 더 정확한 트윗은 필요하지 않기 때문이다.사실, 모든 컴퓨터를 정확하게 동기화하는 것은 불가능하기 때문에, 게시된 시간에 따라 모든 트윗을 정확하게 정렬하는 것은 불가능하다.이 아이디어는 Snowflake ID의 생성으로 이어졌다.
\ k - sequence k、 k \ k - sequence k k k의 순서를 변경하는 조작입니다. k - 정렬보다 효율적입니다.마찬가지로 시퀀스가 k k -sorted임을 시퀀스의 정렬이 쉬워집니다.따라서 프로그램이 kk-sorted 시퀀스를 입력 또는 출력으로만 해야 하는 경우 kk-sorted 시퀀스를 하면 시간을 절약할 수 있습니다.
시퀀스의 반지름은 사전 정렬성의 척도입니다.즉, 이 값은 완전히 정렬된 값을 얻기 위해 목록 내의 요소를 얼마나 이동해야 하는지를 나타냅니다.위의 두 번째까지 정렬된 트윗의 예에서는 반지름은 1초 동안의 트윗 수에 의해 제한된다.
정의.
k k가 경우 시퀀스 , 는 각 i및 i + j n\ 、 n ) k。즉, 거리가 k k 인 요소 쌍에 대해서만 시퀀스를 정렬해야 합니다.
의 반지름은ROUGH (됨{ displaystyle { text}ROUGH Par는 k(\}(로[3] 시퀀스가 kk) -sorted가 k(\ k입니다 .반지름은 사전 정렬의 척도입니다.
수열은 반경이 길이에 비해 작을 경우 거의 정렬되거나 대략적으로 정렬된다고 한다.
동등한 정의
시퀀스[, n [n})는 ({[ +,…, + k + 의 각 범위가 2k + 2인 경우에만k({[로 정렬됩니다.
특성.
n(\n의 모든 는 - 1) { ( - 정렬됩니다, [ [ <{ 0n . 0 입니다k k 정렬 시퀀스는 으로( 1){displaystyle 정렬되지만 반드시(- ){ - 정렬될 필요는 없습니다.
정렬된 시퀀스와의 관계
{ k} - sequence [, ,]{ [ _ {, \ , _ { n 정렬된 치환 _ { \ 1 , \ , _ k 입니다.
알고리즘
가 kk-sorted인지 확인
[,n})가 k k -sorted인지 아닌지는 스트리밍 알고리즘에 의해 선형 시간 및 일정 공간에서 확인할 수 있습니다.각 i < n-k \ 1 \ i< n - 에 대해max ( { j } \ j \ i )를 추적하고 + ( _ { j i )가되는 것을
시퀀스의 반지름 계산
시퀀스의 반지름 계산은 선형 시공간으로 계산할 수 있습니다.이는 max( j ( k i ) <max( ) \ style \ ( i - \ \(_ { } \ k \ i ) < \ ( _ { } \ k \ ) j 로 할 수 있기 때문입니다.
시퀀스의 반지름을 절반으로 줄이다
- [, , {= [ {, \,_ { }} ) {\ {\ {\{\ {\ {\ {\ {\ {\ {\ {\ \ style \ space space space space space space space space space space space space space space space space space space space space space space } space space space space space space space space } } } }
첫 로 [ , , k]{ \ displays = [ _ { , \ , b { k}} { k } - 가 [ , , { k에있는 경우 이 시퀀스가 분할되어 합니다.k + , , b k { [ b { + , \ , _ { } 를 된 순열로 정렬하는 액션을 콜 분할합니다.이는 먼저을 찾은 후 중앙값보다 작거나 큰지 여부에 따라 요소를 전반부 또는 후반부로 이동함으로써 선형 시간 내에 수행할 수 있습니다.
display{ \ '}는 요소의 블록을 [(- ) +,…, [ + , , 로 분할한 후 요소의 블록을 [ ) + ,k로 분할하여 얻을 수 있습니다.또한 각 의 [( - 1+ , 위치에 있는 요소들이 정의되어 있습니다.
에 대한 읽기 또는 쓰기 액세스 공유가 없는 { 프로세서를 하면 시퀀스의 각 파티션이 병렬로 발생할 수 있으므로 동일한 알고리즘을 O 시간 에 적용할 수 있습니다.
\ k \ sorted sequence 병합 중
의 k k [ 1 , , \^ {1} = [ { { }^{1} α [ , , 2]{ = [ { }^{ 2 } } ^{ 2 } } } } } } } } α α α α α α α α α α α α α 、 { m 、 { 2 、 { 2 、 { m 、 {
먼저 위의 알고리즘을 사용하여 두 시퀀스를 2k/ 정렬된 로 변환해야 합니다.
i \ \ ^ { } from it it it it it it it it it it it it it it it it it it it it it it it it{ \ obega에 추가하여 출력 시퀀스 \ }를 구축합니다.
If both 's are empty, then it suffices to return . Otherwise, let us assume that is empty and not , it suffices to remove the content of and ap { \ \ omega} 。1 \ displaystyle \^ { }이(가) 2 \ \^ {}이(가) 비어 있는 는 대칭적으로 유사합니다.
i\ ^ {가 비어 있지 않은 경우를 생각해 보겠습니다. 1 ( 1 11 1 ik / 1}=\ 1i\ k) A ( 2 ≤ 1 i k / 라고.를 < \ A < 다른 경우는 대칭적으로 유사하다고 가정합니다.1 ^{ )에서 / 1 (\을 (를) 하고 2 1 1j j / 2, 2 A (\displaystyle \ { _ { { }^{ }^{ } \ displaystyle 1 \ 로 이동합니다.
k-sorted 시퀀스 정렬
\ k \ _ {2} ( 위의 알고리즘을 적용하면 k \ k \ _ {2 의 순서를 정렬할 수 있습니다.시퀀셜 머신에서는 O ( n k ){ O ( \ k ) ( O ( \ k)프로세서를 하여O ( logk O ( )} 시간이 .
k - 시퀀스 표시
각 [ , , \alpha = [ _ { , \ displaystyle ,_ { n }는 반드시n { } - 이므로, halving 2 ( n 를 해도 k k -sorting은 O log ( / O )로 실행할 수 있습니다.이 알고리즘은 Par-optimal입니다.즉, 최악의 경우보다 복잡한 시퀀셜알고리즘은 존재하지 않습니다.
레퍼런스
- ^ @rk. "Announcing Snowflake". Twitter blog. Retrieved 26 April 2021.
- ^ Altman, Tom; Igarashi, Yoshihide (1989-08-25). "Roughly Sorting: Sequential and Parallel Approach". Journal of Information Processing. 12 (2): 154–158.
- ^ Estivill-Castro, Vladimir; Wood, Derick (October 1989). "A new measure of presortdness". Information and Computation. 83 (1): 111–119. doi:10.1016/0890-5401(89)90050-3.