【问题标题】:Find a, b, c that have property x[a][b] = x[a][c] = x[b][c] [closed]找到具有属性 x[a][b] = x[a][c] = x[b][c] 的 a、b、c [关闭]
【发布时间】:2013-10-14 23:30:11
【问题描述】:

我有一个名为x 的二维数组。当然,我想尽可能快地计算x[a][b] = x[a][c] = x[b][c] 所在的所有三元素组。我不需要知道那些元素,我只需要这些组的数量。

该数组第一个维度的大小等于第二个维度的大小。

我知道蛮力解决方案,它的复杂度为 O(n^2),其中 n 是数组的大小。我想有一个更快的解决方案,但我不知道它是什么样的。

【问题讨论】:

  • 属于 CS 网站。

标签: c++ arrays algorithm search


【解决方案1】:

除了蛮力我看不到任何方法。

在每一行中搜索一对,然后检查该对的 x[b][c]。

设数组为NxN。将行中的每个元素与行中的其他元素进行比较需要

N choose 2 = N(N-1)/2 = O(N^2)

比较,您需要为所有N 行提供O(N^3)。如果你说话的总大小 (M=N^2) 那么它的 O(N^(3/2))

【讨论】:

  • 我认为您错过了问题的“尽可能快”部分。
  • @Thomas 欢迎您提供证据或直觉,证明这应该比 O(n^3) 更快。
  • @us2012 我相信证明你的解决方案是最优的工作落在了你身上,我的朋友 :)
  • @Thomas 如果您比较用户名,您会发现它不是我的。我只是说你的评论是不必要的尖酸刻薄,因为你没有提供任何理由说明为什么这不应该尽可能快。
  • @us2012 哎呀.. 抱歉,哈哈。而且我并不是要刻薄,只是 OP 已经说过他知道暴力解决方案,并且正在寻找更快的解决方案。
【解决方案2】:

我很确定蛮力解决方案是 O(N^3)

另一种解决方案(除了普通的 (0,0,0) 之外)是将每对放入哈希表中,并使用其值作为键。然后在重复项中查找符合您的标准的对。

【讨论】: