有两组整数,其中包含不同数量的项目。

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) ) )
.

是 - i - 我将生成的delta整数添加到生成的每个元素,然后计算Y和修改的X中相同的相同的整数。

然后问题 - 查找最大化生成的世代odicetagcode。

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

是否有一些“数学”名称的此类任务和最佳算法吗? 显然,我可以在这里使用Brute-Force并枚举所有可能的组合 - 但它不适用于大n和m。

有帮助吗?

解决方案

您可以使用标准技术( $ xy $ Q / 104817/755“>使用卷曲和FFT 计算SUMPERS的基数。

作为优化,我建议首次替换 $ x,y $ 使用 $ x'= x \ bmod p $ $ y'= y \ bmod p $ 其中 $ p $ 至少<跨越类=“math-container”> $ n + m $ 左右。然后,通过逐渐减少基数来枚举MultiSet “Math-Container”> $ X'-Y'$ 的元素将为您提供良好的候选人 $ \ delta \ bmod p $ 。计算 $ x'-y'$ 将是 $ o((n + m)\ log(n + m))$ ,如果 $ f(\ delta)$ 足够大的最大值,我希望您应该能够找到对于 $ \ delta $ 在前几个候选者中的正确值。

许可以下: CC-BY-SA归因
不隶属于 cs.stackexchange
scroll top