选择两个数字之和


9

这是最近的邻居问题。

给定实数(非常大的!),加上目标实数,找到SUM最接近和。我们允许对(最大为)进行合理的预处理/索引编制,但是在查询时间(给定)下,结果应该非常快地返回(例如时间。a1,,annp一个一世一个Ĵp一个1个一个ñØñ日志ñpØ日志ñ

(简单的示例:如果我们只希望最接近的SINGLE,则可以离线对排序,一个一世p一个1个一个ñØñ日志ñ,然后在查询时进行二进制搜索, Ø日志ñ)。

无效的解决方案:

1)排序 一个1个一个ñ脱机,然后在查询时,从两端开始并向内移动两个指针(http://bit.ly/1eKHHDy)。不好,因为Øñ 查询时间。

2)排序 一个1个一个ñ 脱机,然后在查询时,将每个 一个一世并对“伙伴”执行二进制搜索,以帮助其求和到接近。不好,因为查询时间为。pØñ日志ñ

3)离线对所有对)进行排序,然后进行二进制搜索。不好,因为预处理。一个1个一个ñØñ2

谢谢!

ps。实践需要进一步的概括:(1)和为50维向量,(2)“ close”为向量余弦距离,以及(3)最佳最接近对和(即,不只是最好的一个1个一个ñpķ


预处理时间或预处理后可以使用的空间量是否受到限制?如果我们仅限于Øñ 空间,您是否有任何理由相信它可以解决,例如, Ølgñ时间?在我看来,这似乎是不可能的。
DW

预处理仅限于O(ñ 日志 ñ)。我更新了问题陈述。
凯文

我没有任何理由相信查询可以很快,但是对我来说,许多对最近邻居有用的结果(kd树,对局部性敏感的哈希等)似乎违反直觉。使用局部敏感哈希的近似解决方案在实际应用中会很好。
凯文

Answers:


17

几乎可以肯定这是不可能的。

假设您可以用预处理时间解决问题 Pñ 和查询时间 ñ。然后有一个简单的算法可以解决3SUM问题-给出了一组ñ 实数,任何三个元素的总和是否为零? Pñ+ññ时间。我们对所有数字进行预处理,然后对每个数字进行处理一个ķ,我们发现了 一个一世+一个Ĵ 最接近 -一个ķ; 如果匹配-一个ķ 确切地说,我们找到了解决3SUM问题的方法。

但是,已知的3SUM最快算法在 Øñ2时间,并且该算法被广泛认为是最优的。而且,有一个匹配Ωñ2在受限但自然的决策树计算模型中的下限。对于整数集,有一些次二次时间算法可以“玩位游戏”,但是即使在整数RAM模型中,也可以推测3SUM要求Ωñ2/多对数ñ 时间。

因此,假设猜想是正确的,那么您的问题要么需要(接近)二次预处理时间,要么需要(接近)线性查询时间。


2

如果在预处理过程中可以使用无限的空间和无限的时间,则以下解决方案可以满足您的要求:

  • 在预处理期间,计算集合 {一个一世+一个Ĵ1个一世Ĵñ},然后按排序顺序存储此集合。该集合可以生成并排序Øñ2 时间,这需要 Øñ2 存储它的空间。

  • 现在回答一个查询(以查找 一个一世一个Ĵ 哪里 一个一世+一个Ĵ 接近 p尽可能),只需在此排序列表中进行二进制搜索即可。那需要Ølgñ 时间。

如果此解决方案不可接受,则需要更仔细地考虑您的要求并相应地编辑问题。


嗨,谢谢!但是您的解决方案与我的解决方案#3相同,这由于O(n ^ 2)预处理时间而存在问题。在我的情况下,n非常大(例如1m),我必须避免O(n ^ 2)运算。
凯文
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.