【发布时间】:2014-12-26 23:51:37
【问题描述】:
所以,我有一个奇怪的问题。我有一个校验和向量,本质上是按时间排序的,我正在寻找两个匹配校验和之间的任何校验和。换句话说,如果我们有:
std::vector < std::string > checksums = {"foo","bar","baz","foo"};
我希望它按顺序报告 FALSE、TRUE、TRUE、FALSE。
鉴于每个校验和都需要与每个 /other/ 校验和进行检查,我该如何有效地执行此操作?用于识别重复元素的哈希表示例 here 可能是难题的一部分,但它的作用与我正在寻找的相反。
【问题讨论】:
-
用于此的简单算法将具有二次复杂度。你觉得这太过分了吗?
-
使用哈希表查找重复元素,并将向量索引作为表中的值。然后,当您检测到重复项时,您可以将
TRUE放入结果中,以获取两者之间的所有索引。 -
@Barmar 听起来可行;我怀疑哈希表会是答案,但我在很大程度上(可悲地)对它们一无所知。你能举个例子吗?
-
为什么第二个输出元素为 TRUE?似乎“bar”不在介于“foo”和“baz”之间?
-
呃。这不是关于它是否在“foo”和“baz”之间。这是真的,因为它在两个“foo”总和之间。