如何找到与点的元组关联的最小数量的总和,以使点不重复?

时间:2018-12-26 12:21:48

标签: algorithm

我具有这样显示的数据结构:

List<Tuple<Tuple<Node, Node>, int>>

节点只是具有x和y坐标(整数)的点。元组是C#元组,所以是一对值。一个int表示从源Node到目标Node的最小移动量。综上所述,它是一个成对的列表,其中第一个元素是由Source和Destination组成的对,第二个元素是它们之间的最小距离。

现在,列表中的节点正在重复,因为它包含所有可能的组合,例如:

Sources:
0,0
1,1
Destinations:
2,2
3,3
List with distances:
((0,0 to 2,2) -> DISTANCE)
((0,0 to 3,3) -> DISTANCE)
((1,1 to 2,2) -> DISTANCE)
((1,1 to 3,3) -> DISTANCE)

我要实现的目标是计算将某些事物从所有来源移动到可用目的地所需的最小移动。因此,在这种情况下,它是2个距离的总和,其选择方式应尽可能少地解决(源或距离不能重复)。

我尝试了最简单的解决方案,即按距离(从最低到最高)对列表进行排序,然后将N个元素移到结果列表中,而不会重复源或目的地。但是,这当然不是那么简单,因为在某些情况下最好不要与某个Node保持最小距离,因为采用更高的距离可能会导致最终结果降低。

我希望我对问题的描述是可以理解的。我不需要实际的代码,对某种算法的想法有所帮助会很好。

2 个答案:

答案 0 :(得分:0)

尽管问题描述相当模糊,但似乎您需要确定图顶点之间的最短路径。有some algorithms个针对不同类型的问题。

对于有限数量的源顶点,值得应用Dijkstra algorithm,它在O(V^2)时间内搜索从给定顶点到所有其他顶点的最短路径,因此对于K个源-O(K*V^2)

如果源数量与总体顶点数量相当,则可以使用Floyd-Warshall algorithm给出O(V^3)中所有顶点对之间的距离

答案 1 :(得分:0)

这听起来像assignment problem-“在加权二部图中找到最大权重匹配(或最小权重完美匹配)”(来自Wikipedia)。我相信Hungarian algorithm是解决这个问题的经典方法。