C# 一些人怀疑,当边缘成本不对称时,是最近邻
为了澄清我的帖子,我根据评论对其进行了编辑 我在想,当边缘成本不对称时,如何有效地实现最近邻搜索。我在考虑一系列的城市,大约从100到12000 更详细地说,作为一个例子,从城市a到城市B的旅行成本为COST1,例如步行,从城市B到城市a的旅行成本为COST1/10,例如乘火车。换句话说,我在这里看到的问题是,如果我有一个不对称矩阵C表示旅行城市之间的成本,并且我选择一个点A,那么如何有效地发现,比如说,三个最近的相邻城市B1,B2和B3的差旅费?我想反复运行这些查询。预处理时间,如果不是很大,也可以 效率思考让我想到类似于a的东西,当城市之间的成本是对称的时,它有助于在O(lg(n))时间内找到k个最近邻。在我的案例中,这就是基本k-d树的障碍,因为在任何两个城市之间,两个方向的交通成本通常都不相同。问题的要点似乎是,在不对称的情况下,我怎么能做像k-近邻这样的事情呢 为了纠正前面提到的对称性假设,我想我不是只有一棵树,而是构造了两棵树,以便在两个方向上计算成本,然后我在这两棵树上进行搜索。然后我开始怀疑,是否有人知道是否已经有专门用于不对称成本的东西和/或使用两棵树作为一个想法是完全错误的C# 一些人怀疑,当边缘成本不对称时,是最近邻,c#,algorithm,graph-algorithm,nearest-neighbor,knn,C#,Algorithm,Graph Algorithm,Nearest Neighbor,Knn,为了澄清我的帖子,我根据评论对其进行了编辑 我在想,当边缘成本不对称时,如何有效地实现最近邻搜索。我在考虑一系列的城市,大约从100到12000 更详细地说,作为一个例子,从城市a到城市B的旅行成本为COST1,例如步行,从城市B到城市a的旅行成本为COST1/10,例如乘火车。换句话说,我在这里看到的问题是,如果我有一个不对称矩阵C表示旅行城市之间的成本,并且我选择一个点A,那么如何有效地发现,比如说,三个最近的相邻城市B1,B2和B3的差旅费?我想反复运行这些查询。预处理时间,如果不是很大,
它也可能是二维的k-d树不一定是最合适的解决方案。因此,指向其他数据结构和算法的指针也是受欢迎的。特别是如果有人对我的问题大小有实际经验。Wikipedia列出了,甚至可能是近似的解决方案对我正在尝试做的事情都有好处(这是一个用于学习目的的小游戏)。对于每个点,您需要计算所有可用旅行类型(脚、旅行等)的成本,导致一个单位,比较并获得最小值。这是您可以在搜索算法中使用的成本。我为我最熟悉的语言添加了标记,但任何伪代码都可以。我还想知道,将Weka作为标签是否合适?正如熟悉的人可能熟悉这个问题域。为什么不使用邻接矩阵来存储不同的值?输入表示法是什么?您似乎在描述一个邻接列表-然后最近邻搜索只是运行dijkstra算法的几个步骤。@AquilaRapax,您可以假设数据存储在邻接矩阵中,现在我想对其进行预处理以便于高效的最近邻查找。@maniek,是的,邻接列表可以。但我想做的是选择一个任意的城市,并从交通费用的角度寻找其最近的邻居。由于我想重复这一点,我希望它是有效的。