当边缘成本不对称时,最近邻居有些疑虑

时间:2012-10-16 07:29:39

标签: c# algorithm graph-algorithm nearest-neighbor knn

为了澄清我的帖子,我根据评论对其进行了编辑。

当边缘成本不对称时,我正在考虑如何有效地实现最近邻居 。我想一系列的城市有100到12000个。

更详细地说,作为一个例子,从城市 A 到城市 B 的成本 COST 1 强>,例如步行,成本 COST 1 / 10 B A ,例如乘火车。换句话说,我在这里看到的问题是,如果我有一个非对称矩阵 C 表示旅行城市之间的成本,我选择一个点 A ,怎么能发现有效地,比方说,三个最近的邻近城市 B 1 B 2 B 3 的旅行费用?我想反复运行查询。预处理时间,如果不是很大,就可以了。

效率思考让我思考类似k-d tree的东西,这有助于在 O(lg(n))时间内找到 k 最近邻居城市之间的成本对称。在我的情况下,这只是基本的k-d树的障碍,因为在任何两个城市之间的旅行成本在两个方向上通常不相同。事情的要点似乎是那样的,我怎么能在不对称的情况下做像k-最近邻居这样的事情呢?

为了弥补上述对称性假设,我认为不是只有一棵树,而是构建了两棵树,以便在两个方向上计算成本,然后我在两棵树上搜索。然后我开始怀疑,有没有人知道是否已经有一些专门用于不对称成本和/或使用两棵树作为一个想法完全误入歧途的东西?

它也可能是二维的k-d树不一定是最合适的解决方案。因此,欢迎指向其他数据结构和算法的指针。特别是如果有人对我的问题规模有实际经验。维基百科列出了quite a bunch of approaches,甚至近似的解决方案也适用于我正在尝试做的事情(这是一个用于学习目的的小游戏)。

1 个答案:

答案 0 :(得分:1)

对于每个点,您需要计算所有可用旅行类型(英尺,旅行,......)的成本,导致一个单位,比较并获得最小值。这个成本可以用在搜索算法中。