테스트가 존재하는 경우에는 정수를 추가 하나의 시퀀스를 시퀀스의 또 다른 순서

cs.stackexchange https://cs.stackexchange.com/questions/117706

문제

다고 가정하는 순서 $달 담고 $n$ 정수 $a_1,a_2,a_3,\ldots,a_n$ 및 순서 $B$ 담고 $m$ 정수 $b_1,b_2,b_3,\ldots,b_m$.우리가 알고 있는 $m\hra 출력 n$.우리 가정의 손실 없이 일반는 모두 순서 $달$B$ 는 오름차순으로 정렬됩니다.

What's 는 가장 빠른 알고리즘을 결정하는 경우가 존재의 정수 $k$ 이 같은 순서 $a_1+k a_2+k a_3+k,\ldots,a_n+k$ 은 시퀀스의 시퀀스 $B$?

여기에는 순진한 알고리즘을 것을 $O(n(m n))$ 시간입니다.저장소 순서 $B$ 로 해시 테이블.각 요소에 대한 $b_j$$B$ (제외하고는 가장 큰 $n$ 소),사용 $b_j-a_1$ 으로 추측 $k$;이 상태를 확인할 수 있습니다 추측이 있는지 여부를 확인하여 각각의 $a_1+k,\점,a_n+k$ 에 있는 해시 테이블 $B$.이 $O(n)$ 예상 시간당 추측 $k$, 고,당신 $m-n$ 추측,그래서 총 예상되는 실행 시간 $O(n(m n))$.우리가 할 수 있는 더 나은?

이 문제를 일치시키려는 두 가지 바이너리 이미지(지 여부를 테스트 하나의 이미지를 포함하는 다른).

도움이 되었습니까?

해결책

여기서는 항상 작동하지 않을 것이지만, 배열의 정수가 충분히 충분히 큰 공간에서 무작위로 선택되면 높은 확률로 작동해야합니다.

$ c $ 의 해시 테이블을 모든 0으로 초기화합니다. 그런 다음 $ T $ 시간 : 무작위로 $ i, j $ , Compute $ B_J-A_I $ 및 증분 $ C [B_J-A_I] $ . 마지막으로, 가장 큰 카운트에서 가장 작은 카운트로 $ C $ 정렬; 그런 다음 $ C [k '] $ 의 각각의 일부 값 각각에 대해 $ k'$ 을 시도하십시오. $ k $ 에서 추측하고 각 추측을 확인하십시오.

각 반복에서 $ C [k] $ 은 적어도 $ 1 / m $입니다. ; 반면 $ l \nk $ , 우리는 $ C [l] $ 을 훨씬 더 많이 증가시킬 것으로 기대합니다. 드물게 (배열의 정수가 무작위적이고 충분히 큰 가정). 따라서 $ T $ 반복 이후, $ \ mathbb {e} [c [k]] \ ge t / M $ 그러나 $ \ mathbb {e} [c [l]] \ ll t / m $ . 따라서 $ T $ 이 충분히 크게 $ c [k] $ 은 다른 모든 것보다 커야합니다. $ C $ .

얼마나 큰 $ T $ 이 필요합니까? 나는 $ t= o (m \ log m) $ 은 카운트

다른 팁

여기에는 알고리즘에서 실행 $\mathcal{O}(n\sqrt{n}+m\로그 m)$ 시간입니다.

$w$ 을 나타내는 기능을 위해 정수 $t$, 계산 쌍의 수를 그들의 차이점은 $t$: $w(t)=\lvert\{(x,y):x\에서,y\B,y x=t\} vert$.우리가 가진 경우스 $w(t)$ 우리는 단순히 수 찾을 최대와의 경우를 참조하십시오 $n$ 나지 않습니다.기본 아이디어를 추정하는 것입 $w$ 를 사용하 Fast Fourier transform.숫자가있는 경우에 묶여 생산됩니다 정확한 솔루션을,그렇지 않으면 중 하나를 사용할 수 있습고 탄성을 충분히 큰 숫자를 확인합 솔루션의 일단 그들이 발견했다.

$N,M$ 것 정수기(정의된 후에) $u,v\\에서 mathbb{R}^N$ 수 벡터로 정의 $$u[i]=\lvert\{x\에\콜론 M-x\equiv i\pmod N\} vert$$ $$v[i]=\lvert\{y\B\콜론 M+y\equiv i\pmod N\} vert$$$w=u*v$ 을 나타내는 원형선의 이러한 두 가지해주어야 합니다.음이 있는 경우 $k$$$\forall x\에\존재 y\B:y x=k$$ 그런 다음 우리는 결론을 내릴 수 있다 $$w[k\bmod N]=\sum_{i:v[i] eq0}v[i]u[나-k\bmod N]n=$$ 는 건설에 의해는 최대값 $w$ 을 달성할 수 있다.따라서,우리는 필요한 경우 확인 $\max_i w(i)=n$ 나지 않습니다.그런 다음,우리는 우리의 정확성을 확인 솔루션을 검사하여 원래 요소입니다.컴퓨팅 $w$ 여 수행할 수 있습 FFT 및 역에서의 FFT $\mathcal{O}(N\로그 N)$ 시간을 찾는 최대의 요소 확인 그것은 $n$ 단계는,그래서 전반적으로 $\mathcal{O}(N\로그 N)$ 시간과 공간입니다.

는 경우에는 숫자에 모두 집합에 의해 제한 $N$ 이것은 정확한 솔루션입니다.하지만 경우에 당신은 선택 $N$ 너무 작 $w(i)=n$ 일어날 수 있기 때문에의 충돌 사고로 이어질 수 있습니다.그래서 우리는 확인할 수 있는 모든 요소에 대한 모든 지수 $w(i)\ge n$;여러 가지가있을 수 있습,그러나 그들의 수는 떼려야 뗄 수 없습니다.가 $\ell$ 이러한 지수,하나 이상 있어야 합니다 $1+2+\점+\ell$ 충돌하는 의미 $$P[\lvert\{i\콜론 w[i]\ge n\} vert\ge\ell]\le P[ ext{#충돌}\ge(\ell+1)\ell/2].$$$nm$ 쌍의 요소의 $달$B$.우리가 선택 소수 $N$$N>2m$, 선택 $M$ 균일에서 임의로 $\{1,\점,N\}$, 에,확률 충돌에 의해 제한된 $1/2m$, 에 의해,그래서 마르코프의 불평등은 $$\le\frac{nm/N}{\ell^2/2}\le\frac{n}{\ell^2}$$ 그래서 확률이 가까이 $1$ 당신이 원하는대로, $\ell=\mathcal{O}(\sqrt{n})$.따라서,전반적인 시간 복잡도 알고리즘의 $$\mathcal{O}(n\sqrt{n}+m\로그 m)$$$m\로그 m$ 은 FFT 및 반송파 단계(이후 우리 설정 $N=2m$고), $n\sqrt{n}$ 은 확인 단계입니다.

는 방법은 두가지가 보이:

  1. 을 실행할 수 있습니다 $\로그 n$ 별도의 인스턴스는 알고리즘의 없이 확인하고의 교차로 최대 인덱스 $w[i]\ge n$ (후 변화에 의해 $M$).할 수 있는 경우에는 공유의 충돌에 의해 삭제 $1/2$ 거나 일부 다른 일정한 때마다,이를 보이는 것이 총 실행 시간 $\mathcal{O}(m\로그^2m)$.
  2. 하나 구성할 수 있습니다 더 나은 해싱하는 메커니즘 $u$$v$ 고 사용 높은 순간 마르코프 및 농도 선명합니다.

그럼에도 불구하고,당신을 위한 실용적인 솔루션을 이 알고리즘을 작동할 수 있었습니다.예를 들어,최악의 경우 행동 $\ell\약\sqrt{n}$ 는 경우에만 발생합니 세트가 거의 연산 진행.를 선택하는 경우 요소를 거의,무작위로 보장하는 것이 훨씬 더 강합니다.또한,당신은 당신을 중지 할 수 있습 확인 단계로 즉시 실수를 발견.

이것은 완전히 다른 알고리즘,내가 생각하는 작품에서 $O(m\로그 m)$ 최악의 경우,작성한 정수 또는 실제 숫자입니다.

우리는 가정 $달$B$ 은 이미 오름차순으로,그렇지 않으면 지출 $O(n\로그 n+m\로그 m)$ 를 정렬합니다.우리는 약간 강화하는 요구 사항에 대한 알고리즘 $\mathcal{A}(A,B)$ 모든 지수 $i$$달 매핑될 수 있는 $B$ 오프셋 $k=b_i-a_1$, 즉,매핑에서 시작 $b_i$ 이후부터입니다.높은 수준의 아이디어를 해결하는 하위 문제에 대응하는 배열의 $달 병합수 방법으로는 유효한 솔루션이 남아있다.

재귀,그러나,얼마나 가까이에 따라 달라집 $달 은 산술 진행.공식적으로,하자 주기 $ au(A)$ 으로 정의될:$$ au(A)=\min\{s\\에서 mathbb{N}^+:a_{i+s+1}-a_{i+s}=a_{i+1}-a_i ext{에 대한 모든 유효한}i,s\}$$ 즉,이것의 요소 $달, 은 주기적으로 최소의 주기 $ au(A)$, 까지,몇 가지 오프셋이 있습니다.

Case I($ au(A)$s= au(A)$$\ell=a_s-a_1$.재귀적으로 컴퓨팅 $I=\mathcal{A}(A[1:s],B)$.하나 관찰되는 경우 $i,j\I$, 에 해당하는 인덱스트 $J_i,J_j$, 고 $b_j-b_i=\ell$, 인덱스트 $J_i,J_j$ 연결할 수 있습을 보여주 $i\\에서 mathcal{A}(A[1:2],B)$.이것은 간단한 결과 $달$s$ 주기적,그리고 $b_j=b_i+\ell$ 을 보장하는 인덱스트 $J_j$ 어디에서 시작 $J_i$ 종료됩니다.자 $$R[i]=\lvert\{j\I\콜론 j>i,b_j-b_i ext{로 나눌 수 있}\ell\} vert$$ 그런 다음 $R[i]$ 할 수 있습에 따라 계산 $R[i']$$i'>나$, 고 새로운 인덱스트 $I'$, 고,인덱스 $R[i]\ge n/s$.이에 대한 비용 단계에 의해 제한된 $O(m)$.

Case II($ au(A)>n/3$):에 의해 정의한 $s=n/3$ 가 있어야 인덱스 $i$$a_{i+1}-a_i eq a_{i+1+s}-a_{i+s}$.는 경우 $i\le n/3$, 가 $i,i+s\le2n/3$ 을 증명하는 인 $ au(A[1:2n/3])>n/3$.그렇지 않으면 $i>n/3$ 는 것을 의미 $ au(A[n/3:n])>n/3$.

려 wlog 정 $ au(A[1:2n/3 개)>n/3$, 선택 하반 $는'=A[1:n/2]$ 을 재귀적으로 반복하면(그렇지 않으면 선택 상반,같은 인수를 따라).재귀적으로 컴퓨팅 $I=\mathcal{A}(A',B)$.에 대한 각 인덱스 $i\I$, 는지 확인하면 나머지 시퀀스에서 찾을 수 있습 $B$.이후 두 시퀀스의 정렬 작업을 수행 할 수 있습니다 $O(n)$ 단계 각 인덱스에 대한 의미 전체 $O(|I|\cdot n)$ 시간을 계산하는 유효한 인덱스,그리고 반대로 그들을 $\mathcal{A}(A,B)$.효율성의 이 단계에서는 다음을 청구:

구: $|I|\le6m/n$, 을 의미하는 솔루션은 너무 많이 겹칠 수 있습니다.

의 증거를 청구:$|I|>6m/n$ 모순에 지도하.각 인덱스 $i\I$ 의 시작점의 세트 인덱스 $J_i=\{i=j_1,\점,j_{n/2}\}\subseteq B$, 는 지도 $는'$ 하기 $B$ 일부까지 오프셋이 있습니다.공동으로,적어도 $3m$ 지수:$$\sum_{i\에서 나는}|J_i|=|I|n/2\ge6m/n\cdot n/2=3m$$$|B|=m$, 의 원칙이 적어도 하나의 인덱스 $x\B$ 에 나타나는 별도의 3 솔루션:$$\존재하 x\B,r,s,p\I\콜론\;x\에 J_r\캡 J_s\캡 J_p$$

$s$ 될 평균의 세 $r.이 $x\에 J_s$, 고 $|J_s|=n/2$, $x$ 파티션 $J_s$ 을 두 부분 중 하나는보 $n/4$ 지표,우리는 가정은 낮은 일부: $$J_s=\{j_1=s,j_2,\점,j_\ell=x\},\ell\le n/4$$ 에 의해 건설 $s=j_1$ 매핑 $a_1$, 까지, $a_\ell$ 일부까지 오프셋이 있습니다.그러나 우리는 또한 $x\에 J_p$, 이 의미 periodict 보 $\ell\le n/4$$는'$, 는 모순 $ au(A')>n/3$.(거기에 몇 가지 세부 사항을 추가할 것입니다 이상)

전반적인 복잡성 각 단계에서의 재귀,리 $O(m)$.주기 $ au(A)$ 수도 있습에서 계산 $O(n)$, 계산으로 가장 긴 접미사는 또한 접두사,의 $\mathrm{diff}(A)$, 는 증가 배열 $a_2-a_1,\점,a_n-a_{n-1}$.그러나 문제의 크기를 줄여 적어도 $1/2$ 에서 각 재귀적인 단계입니다.있을 것이다 $\로그 n$ 단계에서 최악의 경우에는 시간을 의미한 복잡성에 의해 제한된 $O(m\로그 n)$.추가 정렬한 비용,그리고 그 이후 $m>n$, 전반적인 복잡성에 의해 제한된 시간 정렬 $O(m\로그 m)$

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 cs.stackexchange
scroll top