범위 모드 쿼리
Range mode query![]() | 이 기사는 대부분의 독자들이 이해하기에는 너무 전문적일 수 있다.. (2014년 4월) ( 템플릿메시지 및 시기 ) 세부사항을 할 수 해 |
데이터 구조에서 범위 모드 쿼리 문제는 입력의 연속된 서브셋의 모드를 요구하는 쿼리에 효율적으로 응답하기 위해 일부 입력 데이터에 데이터 구조를 구축하도록 요구합니다.
문제문
A[ : ] [ 1,2,. ,]{ [ 1 : n ]= [_ {2 , , _ {} { (, : )}의 쿼리에 응답합니다의 =[ , , . , s 의 모드 d e () {mode () } { S [ s _ {1} ,_ {2} , s {} }는 {{보다 크거나 그 의 주파수가 표시됩니다. { 예를 들어 S [ ,,,,, S = [, 4 이면 (S ) s.이 문제에서 쿼리는 [ : j] [ , +1 ,. , ]([ i : ], { a { }, + , ... , 모드를
정리 1
스타일 와 B B를 임의의 멀티셋으로 .c{\c}가 AB {\ A B 및 c A일 c {\ c는B 입니다.
증명
A B( C = A = A \ C= A \ B ) 、 c ( style f { } )의 를 C \ C 로 .따라서 C{ c 가 B의 가 가정합니다. {\는B{\ B의 모드이며 {\ b는 A {\c A의 이므로 > {따라서 b b는 되는 C) 모드여야 합니다.
결과.
공간 | 쿼리 시간 | 제약 사항 | 원천 |
---|---|---|---|
[1] | |||
w는 단어 크기입니다. | [1] | ||
[2] | |||
[1] | |||
[2] |
하한
각각\w 비트의을 하는 데이터 구조에서는 범위 모드 [3]쿼리에 응답하기 위해 ( " log"( /)\ \ left ( { \ \ } { \ ( Sw / n )이 필요합니다.
이는 일정한 시간 쿼리 시간과 선형 공간을 제공하는 솔루션이 있는 범위 최소 쿼리 등 다른 범위 쿼리 문제와 대조됩니다.이는 모드 문제의 경도에 기인합니다.A : { A [ :] the the theA [ + : { A + : 의 를 알고 있어도, A[ :의 의 모드를 간단하게 계산하는 방법은 없기 때문입니다. [ + : A + : ]}가 모드가 될 수 있습니다.를 들어, d (A[ : j] ) { [ j + 1 : = { mode ( A[j +1 :k { ( [ + : ) }의 주파수는 a})이며 j])에 a}-1의 c)가 수 있습니다\notc\not 단,[ :k ](\ [i : k 의 는 a { a} b { b의 주파수보다 높기 에 { c}는e [ i :k a b {\ b 입니다.
제곱근 쿼리 시간을 갖는 선형 공간 데이터 구조
Chan [1]등의 방법.는 O+ O 과 O 쿼리 시간을 합니다.s { s을 (를) 설정하면 공간 및 쿼리 시간에 대한 O {O 및 { O{n})})의 경계를 수 있습니다.
전처리
A[ : A : D [ :\ 를 A의 고유값을 포함하는 배열로 .서 { style \ 는 고유 요소의 수입니다.B[ : B [ : ]{ i}, [ B A 의랭크(위치)가D { B}의 배열로 를 묶다
( \ displaystyle ...\}}도 작성되며, 각 a { }, } } { a \ { }, = = = 。 즉, {,.., n { b \ \ { , .n \ } 、 B [b의 B(\가 포함되도록 . 선형 B B B
B[ [ [ i \ B [ ] \ B [ \ q {\ form form form of of of B [ [ + b q q q q q q q q q q q q q q q q q q q q q q q q q [ i : j : : j : : b ]{ displaystystystystystystystystystyle Q ]의 에 j
b 블록 ,2,. . , { _ { , _ { , _ { } , b _ { s 로 분할됩니다. b b i { b _ { t n}은[에 걸쳐 . 각 블록 또는 연속된 블록 세트의 모드와 빈도는 2개의 S(\S와 S S')로 미리 계산됩니다 [ _ i, b { i , _ { } } b i+ . j\ b_ 또는 이에 상당하는 B[ t +: ( j + ) [ _ { t + ( b { j ) 에는 하는 주파수가 저장됩니다이들 2개의 테이블은 O( ) \ O ( {2} 스페이스에 할 수 있습니다또한 B( \ B)( \ s )를 다음 에 S, "( s ) \ " ( \ )의 을 계산합니다.
알고리즘 computeS_Sprime이 입력됩니다.어레이 B = [0:n - 1], 어레이 D = [0:Delta - 1], 정수 s 출력:표 S 및 Sprime은 S ← 표(0:n - 1, 0:n - 1)로 하고 Sprime ← 표(0:n - 1, 0:n - 1)는 i {0, ..., 델타 - 1)의 모든 i에 대해 firstOccurence ← 어레이(0:Delta - 1)로 한다.start ← jlet block_end ← min{(i + 1) × t - 1, n - 1 }인 반면 j < n은 firstOccurence [B[j] = -1 그 후 먼저 발생[B[j] ← 최소인 경우 j 종료QInstances(최초 발생)B[j], block_end, fc + 1) 그러면 c ← B[j] fc ← fc + 1 end if block_end = S [i * s + noBlock ]← c Sprime [i × s + noBlock ] ← fc NoBlock ← NoBlock + 1 end + min{_end + 1 end + t } end - n }의 경우, n end, n end, n의 시간 동안, n의 경우, n을 사용합니다...., Delta - 1 은 먼저 Occurence [j] ← -1 엔드 투 엔드의 경우
쿼리
에 대한 쿼리 알고리즘을 정의합니다.이것은에 응답으로 변환할 수 있습니다. , [ ], {displaystyle 는 B[ : {B [ : i : j { B [ i : }의 이기 때문입니다[ : j { A [ i : }。해당 인덱스에서A(\ A B(\ B를 조사하여 B B의 답변을 일정 시간 내에 A A의 답변으로 변환할 수 있습니다.
d ( B, , j) { , i, j ) }a is is is 、 prefix 、 span 、 suffix의 3가지 부분으로 분할됩니다. i - / { b { i }=\( i - 1 ) j j / -1 { }=\j/ - 이것들은 B에포함되는 의 블록과 마지막 블록의 인덱스를 나타냅니다.이러한 블록의 범위를 스판이라고 부릅니다.는 B[ { t , { B [ : \ { _ { , j \} ( span ) 。는B [ a{ ( + ) +1, : B [ max \ t입니다.프리픽스, 서픽스 또는 스팬은 공백으로 둘 수 있습니다.는b j < i \ j} < _ { } 。
span의 경우 c { c는 이미 [ , j { S [ b { ,_ { j}}에 되어 있습니다.c { f { c } [ , _ j { S ' { . j } } } 。 정리 1에 따르면 B[ : { B [ : ]의 는 프리픽스, 스판 또는 접미사의 요소가 됩니다.프리픽스 및 서픽스 내의 각 요소에 대해 선형 스캔이 실행되어 후보c\ c\displaystyle cdisplaystyle f_c}보다 주파수가 큰지 확인합니다. 경우\} 및 f\displaystyle {c}는 새 값으로 업데이트됩니다.스캔 종료 시 c{ c에는 B[ : {B [ : ] } 및 c c}의 주파수가 포함됩니다.
스캔 순서
이 순서는 프리픽스와 서픽스 모두 비슷하기 때문에 다음 절차를 모두 실행해도 충분합니다.
x x를 현재 요소의 인덱스로 .세 가지 경우가 있습니다.
- B[ - 1 _ { [ x] [ ' [ \ i 의 경우는 B [ :x - 1](\ B i : - 에 해, 주파수는 이미 카운트 되고 있습니다.다음 요소로 넘어갑니다.
- 그렇지 않으면 B[ : j { B [ displaystyle B [ : j]}의 주파수가 f { 이상인지 합니다(이는 B[ : B [ : } ) 。
- 그렇지 않으면 다음 요소로 넘어갑니다.
- 이 [ : j { B [: j} { displaystyle B [ : } } ( binary scan [ x + - { B + _ { c - } search search search search search search search search search search search search search in in in a a a a a in in in in a a a a a a a a B' + c - { displaystystylearch )= [ ] { : = B [ x] ff : = x { c : ={ x}。
이 선형 스캔(주파수 계산 제외)은 접두사 또는 접미사 모두 t보다 클 수 없으므로 크기 tt로 제한됩니다. 주파수 계산에 대해 수행된 선형 스캔의 추가 분석에서도 블록 [1]크기 t\ t로 제한됨을 알 수 있습니다.따라서 쿼리 시간은 (t ) ( /){ O(t)= 입니다.
쿼리 시간이 일정한 2차 공간 데이터 구조
이 메서드는 O log log log nn log log nn Oright 공간을 일정한 시간 쿼리에 합니다.일정 쿼리 시간이 필요한 경우 Chan [1]등이 제안한 솔루션보다 나은 솔루션임을 알 수 있다. Chan 등은 s {\ s일 경우 일정 쿼리 시간 동안 O( 2) { O ( ^ {2} 의 을 제공하기 때문이다.
전처리
A[ : A [ : ]}를 어레이로 .전처리는 다음 3단계로 이루어집니다.
- A s를 블록 s(\로 분할합니다.여기서 각 블록의 는 s \ t = \ n/ \ 입니다.\ 。 S[ , S [ , ]{ S [ i , j }는 + .. j \ _ { i} \ 이 순서의 총 공간은 ( 2){ O ( ^ {2} 입니다.
- e( A, , j) { ( , i ,j ) } i{\ { {i} b b b j {\ {\ {\ {\ {\ {\ {\ {\ {\ {\ {\ {\ for for for for for for complete for complete complete for for for for for for for for for for for for for for for for for for for for for for for for for for for for for for for for for for for the the the the the the for for for for the the the the the for for for the the for for for A 블록의 c c는S{ S에서 취득할 수 있습니다.정리 1에 따르면 모드는 프리픽스 요소(A[ : :j]{displaystyle A[i:]}의 시작 전)와 접미사 요소중 하나가될 수 있습니다span 종료 후 [ c\ c프리픽스의 사이즈와 서픽스의 사이즈는 로 한정되어 있기 때문에 모드 위치는({ 0 ~({2t의 정수로 저장됩니다서[ : - 1[ 0 : })는 프리픽스/s tfix 및 의 위치를 나타냅니다.e 는 모드가 스팬 모드임을 나타냅니다. i { style b { '} b j ( \ b _ { j '})blocks blocks blocks involving involving ( t 2 ){ style {2 {\ {\ {\ {\ {\ {\ blocks blocks blocks blocks blocks blocks blocks2 t ( 2+)) t2 t style 2 。 이러한 테이블이므로 이 스텝에 필요한 총공간은O ( ( t +) 2 O ( ^ { ( t +)^{ 입니다이러한 테이블에 액세스하기 위해 각 블록 쌍에 대해 S의 포인터가 추가됩니다
- i i와j(\ j)가 같은 블록에 있는 d j { mode, { j의 를 처리하기 위해 이러한 모든 솔루션이 사전 계산됩니다.그중 ( 22}))가 이 크기의 테이블 T T에 저장됩니다.
이 데이터 구조에서 사용되는 총 공간은 ( s + ( t + ) 2 + t O ( ^ } + {2} ( 2 + + 2}})입니다이 O( log log n n ) \ \ frapleft O ( 2 ) { t = log{} / \{ n } 。
쿼리
e ( , ,j ){ mode ( A , , j )} { ( A , i , j ) } { T}display is a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a[ i 、 S [ b { ' , _ { j '} } 。서 b i、 j { b _ { ' , b _ { i ' } 、_ { j' } 。서 b i、 i 、 _ b _{ i}}을 포함하는 블록의 인덱스입니다 A의 위치를 저장하고 그 위치를 사용하여 모드를 찾습니다.은 일정 시간 내에 실행할 수 있습니다.
레퍼런스
- ^ a b c d e f Chan, Timothy M.; Durocher, Stephane; Larsen, Kasper Green; Morrison, Jason; Wilkinson, Bryan T. (2013). "Linear-Space Data Structures for Range Mode Query in Arrays" (PDF). Theory of Computing Systems. Springer: 1–23.
- ^ a b c Krizanc, Danny; Morin, Pat; Smid, Michiel H. M. (2003). "Range Mode and Range Median Queries on Lists and Trees" (PDF). ISAAC: 517–526. arXiv:cs/0307034. Bibcode:2003cs........7034K.
- ^ Greve, M; Jørgensen, A.; Larsen, K.; Truelsen, J. (2010). "Cell probe lower bounds and approximations for range mode". Automata, Languages and Programming: 605–616.