문제

가 있는 두 개의 설정 정수의 다른 번호로의 항목이다.

X= { x_0, x_1, ... x_n }, x_0 < x_1 < ... < x_n
Y= { y_0, y_1, ... y_m }, y_0 < y_1 < ... < y_m

고 있는 기능을 하나의 정수로 정의

F(delta) = CountOfItems( Intersection( X, { y_0+delta, y_1+delta, ... y_m+delta) ) )

즉-추가 delta 정수의 모든 요소 Y 다음 계산 얼마나 많은 동수가에서 XY.

다음 문제가-찾기 delta 을 극대화 F(delta).

max( F(delta) ), where delta is integer

은 거기에 약간의"수학적"이름이 같은 작업을 최적 알고리즘에 대한 이?분명히 사용할 수 있습 brute-force 여기에 열거 가능한 모든 조합 하지만 그것은 작동하지 않는 큰 n m.

도움이 되었습니까?

해결책

당신은 계산할 수 있습 sumset(만,차이점을 설정) $X-Y$ 표준 기술을 사용하여(컴퓨팅 카디의 Sumsets 를 사용하여 나선 및 FFT).

으로 최적화,나는 먼저 교체 $X,Y$$X'X=\bmod p$, $Y=Y\bmod p$$p$ 은 적어도 $n+m$ 니다.다음을 열거하는 요소의 multiset $X-Y'$ 을 줄여티 것입니다 당신에게 좋은 후보에 대한 $\delta\bmod p$.실행 시간 계산 $X-Y'$ 될 것입 $O((n+m)\로그(n+m))$, 면의 최대값 $F(\델타)$ 이 충분히 크고,내가 당신을 기대를 찾을 수 있어야에 대한 올바른 값 $\델타$ 첫 번째 사이에 몇 가지 후보자.

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