【问题标题】:Approximate Estimation of Distance Matrices距离矩阵的近似估计
【发布时间】:2011-03-07 11:14:56
【问题描述】:

我有一组 N 个对象,我想计算一个 NxN 距离矩阵。有时我的 N 个对象集非常大,我想通过仅计算距离比较的子集来计算 NxN 距离矩阵的近似值。

谁能指出我计算全距离矩阵近似值的方向?我有一些想法,但我想避免重新发明轮子。

编辑:算法类型的一个示例将利用这样一个事实,即如果对象 A 和对象 B 之间的距离非常小,并且对象 B 和对象 C 之间的距离非常小,则必须对象 A 和 C 之间的距离稍短。

【问题讨论】:

  • “一个例子”是什么?不要让我们悬而未决!
  • 对不起,我加了一个完整的句子。 :)

标签: algorithm distance heuristics approximation


【解决方案1】:

您的“对象”在网络上吗?如果对象在网络中,您可以使用thisthis 生成所有对最短路径。如果不是,我认为你几乎无法计算所有的 n x n 距离。

【讨论】:

    【解决方案2】:

    老实说,我认为这取决于您希望近似值有多接近以及您的子集有多大。如果您只是想大致了解一下矩阵的外观,您可以对随机子集(包括最大和最小节点)进行简单的线性插值,从而获得非常准确 (tm) 的结果。

    我认为这里真正的诀窍是找出启发式(线性、二次等插值)和子集大小。您还可以计算出各种子集的距离矩阵,然后用某种方法(线性、球面线性、三次)对这些矩阵进行插值。

    根据您的初始样本,这几乎是一个启发式试验和错误,直到您“哦,这足以满足我的需要”。

    【讨论】:

      【解决方案3】:

      你需要的解法和我们平时在图中看到的差不多,可以用All pair shortest path求距离,也可以看johnson's algorithm

      【讨论】:

        【解决方案4】:

        我也有同样的问题,最终为它编写了 Python 代码:

        https://github.com/jpeterbaker/lazyDistance

        README.md 解释了如何使用三角不等式来更新每个距离的上限和下限。

        只需将 Python 文件作为二维空间中的示例脚本运行即可。绘制的线是实际计算的唯一距离。

        在我的版本中,节省时间并不是因为拥有大量对象。正如我写的那样,它是一个 O(n^4) 算法,所以如果对象的数量很大,它实际上比只计算所有距离更糟糕。但是当对象数量适中并且距离函数的计算成本非常高时,我的方法将节省时间。它假设执行几次 O(n^2) 操作而不是单个距离测量更快。

        如果 n 很大,您可以寻找更便宜的方法来决定接下来要计算的距离(不涉及具有 n^2 个距离边界矩阵条目的算术)。您也可能不需要每次执行此代码时都更新所有 2*n^2 边界。

        【讨论】:

          猜你喜欢
          • 2018-08-05
          • 1970-01-01
          • 2020-11-07
          • 1970-01-01
          • 2011-12-16
          • 1970-01-01
          • 1970-01-01
          • 2013-04-14
          相关资源
          最近更新 更多