Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 一些人怀疑,当边缘成本不对称时,是最近邻_C#_Algorithm_Graph Algorithm_Nearest Neighbor_Knn - Fatal编程技术网

C# 一些人怀疑,当边缘成本不对称时,是最近邻

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的差旅费?我想反复运行这些查询。预处理时间,如果不是很大,

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

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

更详细地说,作为一个例子,从城市a到城市B的旅行成本为COST1,例如步行,从城市B到城市a的旅行成本为COST1/10,例如乘火车。换句话说,我在这里看到的问题是,如果我有一个不对称矩阵C表示旅行城市之间的成本,并且我选择一个点A,那么如何有效地发现,比如说,三个最近的相邻城市B1B2B3的差旅费?我想反复运行这些查询。预处理时间,如果不是很大,也可以

效率思考让我想到类似于a的东西,当城市之间的成本是对称的时,它有助于在O(lg(n))时间内找到k个最近邻。在我的案例中,这就是基本k-d树的障碍,因为在任何两个城市之间,两个方向的交通成本通常都不相同。问题的要点似乎是,在不对称的情况下,我怎么能做像k-近邻这样的事情呢

为了纠正前面提到的对称性假设,我想我不是只有一棵树,而是构造了两棵树,以便在两个方向上计算成本,然后我在这两棵树上进行搜索。然后我开始怀疑,是否有人知道是否已经有专门用于不对称成本的东西和/或使用两棵树作为一个想法是完全错误的


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

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

我为我最熟悉的语言添加了标记,但任何伪代码都可以。我还想知道,将Weka作为标签是否合适?正如熟悉的人可能熟悉这个问题域。为什么不使用邻接矩阵来存储不同的值?输入表示法是什么?您似乎在描述一个邻接列表-然后最近邻搜索只是运行dijkstra算法的几个步骤。@AquilaRapax,您可以假设数据存储在邻接矩阵中,现在我想对其进行预处理以便于高效的最近邻查找。@maniek,是的,邻接列表可以。但我想做的是选择一个任意的城市,并从交通费用的角度寻找其最近的邻居。由于我想重复这一点,我希望它是有效的。