한 배열이 다른 배열의 정렬 버전인지 확인하는 결정적 선형 시간 알고리즘


19

다음 문제를 고려하십시오.

입력 : 길이 의 배열 와 두 개 ( 여기서 는 정렬 된 순서)ABnB

질의 : 않습니다 와 (자신의 다양성과) 같은 항목을 포함?AB

이 문제에 대한 가장 빠른 결정 론적 알고리즘 은 무엇입니까 ?
정렬하는 것보다 빠르게 해결할 수 있습니까? 이 문제를 결정적인 선형 시간으로 해결할 수 있습니까?


1
그러나 확률 적 접근 방식은 순서 독립적 해시 함수로 해싱하는 것입니다. Carter와 Wegman은 이것에 대한 논문 ( sciencedirect.com/science/article/pii/0022000081900337 ) 중 하나를 썼지 만, 지금까지 결정 론적 알고리즘을 제안하는 인용문에는 아무것도 보지 못했습니다.
KWillets

1
인용문은 Turing 머신 모델에 관한 것이며 이론적으로 관심이 있습니다. 알고리즘은 일반적으로 RAM 모델과 관련하여 분석됩니다.
Yuval Filmus

아, 그러면 제가 찾는 모델입니다. 나는 질문을 조정했다.
Albert Hendriks

왜 배열의 항목을 합한 다음 합을 비교하지 않습니까? 제목과 관련하여 그것은 선형 적이며 '한 배열은 다른 배열의 정렬 버전입니까? '. Turing 머신 모델이 아니라 실용적인 솔루션이라는 것을 알고 있습니다.
atayenel

1
@AlbertHendriks 튜링 머신 에서는 로 배열을 정렬 할 수 없습니다 . SAT의 일부 하한 (예 : cs.cmu.edu/~ryanw/automated-lbs.pdf )은 실제로 RAM 시스템에 대한 것입니다. O(nlogn)
Yuval Filmus

답변:


14

계산 모델을 지정하지 않았으므로 비교 모델을 가정하겠습니다.

배열 가리 스트 { 1 , 2 } × { 3 , 4 } × × { 2 n - 1 , 2 n } 에서 나오는 특별한 경우를 고려하십시오 . 즉, i 번째 요소는 2 i - 1 또는 2 i 입니다.B

{1,2}×{3,4}××{2n1,2n}.
i2i12i

I는 항 알고리즘칩니다 경우 그 및 B는 알고리즘의 각 요소에 비해 것으로, 동일한 구성 요소를 포함하는 B를 그것의 대응에 . 실제로 알고리즘이 있다는 결론을한다고 가정 와 B가 같은 요소를 포함, 그러나 결코의 첫 번째 요소 비교 B를 에서의 대응에 . 첫 번째 요소를 바꾸면 답이 다르더라도 알고리즘은 정확히 같은 방식으로 진행됩니다. 이는 알고리즘이 첫 번째 요소 (및 다른 요소)를 A의 해당 요소와 비교해야 함을 보여줍니다 .ABBAABBAA

이는 B 가 동일한 요소를 포함 하는 경우이를 확인한 후 알고리즘이 A 의 정렬 순서를 알고 있음을 의미합니다 . 따라서 최소한 n 이 있어야합니다 ! 잎이 다르므로 시간 Ω ( n log n ) 이 걸립니다 .AB!Ω(로그)


나는 이것이 일반적으로 을 의미한다고 생각했을 것입니다 . 그러나 비교 모델은 그것과 다릅니다. P=Ω(nlogn)
Albert Hendriks

@AlbertHendriks, 정렬을 위해 n lg n 하한을 표시하는 데 사용 된 것과 동일한 모델입니다. 그것은 당신이 수행 할 수있는 유일한 작업은 비교이며 더 잘 할 수 없다는 것을 의미합니다. 나는 이것이 당신의 질문에 대답한다고 생각합니다.
Kaveh

[Cntd] 우리는 정렬을 위해 더 강한 경계를 가지고 있지 않습니다! n lg n보다 빠르게 정렬 할 수 있으면 n lg n보다 빠르게 문제를 해결하는 데 사용할 수 있습니다.
Kaveh

1
@AlbertHendriks, 정수 정렬을위한 선형 시간 알고리즘에 대해 알고 있습니까? CLRS에서 찾아보십시오. 귀하의 사례는 선형 시간으로 정렬 할 수있는 사례 중 하나 일 수 있습니다.
Kaveh

6
정수는 ( nada.kth.se/~snilsson/fast-sorting 참조 ) 또는 예상 시간 O ( n ) 로 정렬 할 수 있습니다.영형(로그로그)(ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=1181890참조) 또는 단어 크기가 충분히 큰 경우에도 선형 시간 (LNCS 8503, p. 26ff 참조) 영형(로그로그)
Yuval Filmus

10

이 답변은 다른 비용 계산 모델 인 단가 RAM 모델을 고려합니다. 이 모델에서 기계어의 크기는 이며 이들의 연산에는 O ( 1 ) 시간이 걸립니다. 우리는 또한 하나 개의 기계 단어의 각 배열 요소 맞는이 (그래서 대부분에 있음을 단순화를 위해 가정 N O ( 1 ) 크기에서).영형(로그)영형(1)영형(1)

우리는 선형 시간을 구성합니다 무작위 일방적 인 오류로 알고리즘을인지 두 배열을 결정하는 더 어려운 문제에 대한 (알고리즘은 그렇지 않은 경우에도 같은 요소를 포함하는 두 개의 배열을 선언 할 수 있음) 1 , ... , nb 1 , , b n 은 같은 원소를 포함합니다. (우리는 그것들 중 어떤 것도 정렬 할 필요가 없다.) 우리의 알고리즘은 최대 1 / n 확률로 에러를 만든다 .1,,1,,1/

아이디어는 배열이 동일한 요소를 포함하는 경우 다음과 같은 동일성을 유지한다는 것입니다. 이 다항식을 계산하는 데는 너무 많은 시간이 걸립니다. 대신 랜덤 소수 p 와 랜덤 x 0을 선택 하고 n i = 1 ( x 0a i ) n 인지 테스트합니다.

i=1(엑스나는)=나는=1(엑스나는).
엑스0 배열이 같으면 테스트가 항상 통과하므로 배열이 다른 경우에 집중합시다. 특히, 몇몇 계수 Π N = 1 ( X - I ) - Π를 N = 1 ( X - b를 ) 비 - 제로이다. 이후 I , b를 크기가 N O ( 1 ) 이 갖는 계수가 크기 2 N N O를 (
나는=1(엑스0나는)나는=1(엑스0나는)(modp).
i=1n(xai)i=1n(xbi)ai,binO(1) 이므로크기Ω(n)의최대O(n)소인수를가집니다. 우리는 최소한의 세트 선택하면 것을이 수단 N 소수의페이지크기를 적어도 N 2 (말), 다음 임의의 소수에 대한페이지세트의이 확률이 최소한으로 개최한다(1)-(1) / N N Π= 1 (x a i )2nnO(n)=nO(n)O(n)Ω(n)n2pn2p11/n 임의의 X 0 모듈로 P는 확률이 목격 것이다 1 - N / P 1 - 1 / N (도의 다항식 보낸 많아야 N 이하인 갖는 N 루트).
i=1n(xai)i=1n(xbi)0(modp).
x0p1n/p11/nnn

결론적으로, 적어도 n 2 개의 다른 소수 집합과 임의의 x 0 모듈로 p 중 대략 n 2 크기 의 임의의 를 선택 하면 배열에 동일한 요소가 포함되어 있지 않으면 테스트가 실패합니다. 확률 1 - O ( 1 / n ) . p 는 일정한 수의 기계어에 적합 하므로 테스트를 실행하는 데 시간 O ( n ) 가 걸립니다 .pn2n2x0p1O(1/n)O(n)p

다항식 시간 소수성 테스트를 사용하여 크기의 소수의 밀도 이후 약 Ω ( 1 / 로그 N ) , 우리는 임의의 주요 선택할 수있는 페이지 시간 ( 로그 N ) O ( 1 )를 . 랜덤 x 0 모듈로 p를 선택하는 것은 다양한 방법으로 구현 될 수 있으며, 우리의 경우에는 완전히 균일 한 랜덤 x 0이 필요하지 않기 때문에 더 쉬워졌습니다 .n2Ω(1/logn)p(logn)O(1)x0px0

결론적으로, 알고리즘은 시간 에서 실행되며 배열에 동일한 요소가 포함되어 있으면 항상 YES를 출력하고 배열에 동일한 요소 가 포함되어 있지 않으면 확률 1 - O ( 1 / n )로 NO를 출력 합니다. 상수 C에 대해 오차 확률을 1 - O ( 1 / n C ) 로 향상시킬 수 있습니다 .O(n)1O(1/n)1O(1/nC)C


1
이 알고리즘은 무작위로 분류되지만 실제로 작동하도록 다른 답변 중 일부에서 아이디어를 구현하는 방법을 설명합니다. 또한 해시 테이블 접근 방식보다 장점이 있습니다.
Yuval Filmus

OP가 해시 테이블을 사용하는 예상 선형 시간 알고리즘을 좋아하지 않았기 때문에 확률 적 알고리즘을 좋아하지 않는다고 생각합니다.
Kaveh

Kaveh 네 말이 맞아 그러나 물론이 솔루션은 흥미롭고 유지되어야하며 확률 알고리즘의 경우를 해결합니다. 또한, 내가 찾고있는 모델을 사용한다고 생각합니다.
Albert Hendriks

1
O (1 / n) 표기법이 올바른지 궁금합니다. 물론 나는 당신이 무엇을 의미하는지 알고 있지만, big-O의 정의에 따르면 이것은 O (1)과 같습니다.
Albert Hendriks

2
C/nnO(1)

-3

나는 다른 알고리즘 (또는 적어도 그러한 알고리즘의 계획)을 제안 할 것입니다

[미디엄나는,미디엄엑스]

  1. O(n)minmax

  2. min두 배열에서 모든 값에서 빼기 (여기서 하나의 배열이 이미 정렬 된 순서에 있다는 사실은 고려되지 않았으며, 이는 아마도 향상 될 수 있음)

  3. 1c>1

  4. max-minO((maxmin)n)

참고 위의 알고리즘 방식은 많은 실제 상황에서 매우 빠른 (deterministicaly)이 될 수 있습니다.

위의 알고리즘 체계는 " 이동 질량 "을 사용하는 선형 시간 정렬 알고리즘의 변형입니다 . " 질량 이동 "정렬 알고리즘 의 실제 직관 은 다음과 같습니다.

각 항목의 값이 실제로 질량 크기를 나타내고 모든 항목을 한 줄로 정렬하고 동일한 가속력을 적용 한다고 가정합니다 .

그런 다음 각 항목은 질량과 관련된 거리, 더 적은 거리 및 그 반대로 이동합니다. 그런 다음 정렬 된 항목을 검색하려면 이동 한 거리별로 항목을 역순으로 수집하면됩니다.

미디엄엑스미디엄나는

이와 관련하여 위의 알고리즘은 숫자 기반 정렬 알고리즘과 유사합니다 (예 : 기수 정렬 , 개수 정렬 )

이 알고리즘은 그다지 의미가 없다고 생각할 수도 있지만 적어도 한 가지를 보여줍니다. 즉, " 기본 "은 물리적 수준에서 임의의 숫자 정렬은 항목 수의 선형 시간 연산입니다.


이동 한 거리의 역순으로 항목을 수집한다는 측면에서, 이는 구현 레벨에서 비교로 해석되지 않습니까? 그러면 "거리"를 정렬 할 필요가 없습니까?
JustAnotherSoul
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.