基本上我有一个范围从0到1的浮点矩阵,我需要找到具有最低和的值的组合。踢球者是一旦选择了一个值,就不会使用该行或列中的其他值。必须使用所有列。
在矩阵的宽度大于高度的情况下,将用1&s填充以使矩阵成为正方形。如果高度大于宽度,则不会使用所有行,但必须始终使用所有列。
我已经研究过这个任务的二叉树和Dijkstra算法,但是对于更大的矩阵来说,两者似乎都太复杂了。理想情况下,我正在寻找能够在相对较短的时间内提供非常好的猜测的算法或实现。任何为c ++优化的东西都会很棒!
答案 0 :(得分:0)
我认为贪婪方法应该适用于好的猜测/优化部分。
< value, row, column >
<value>
参数对列表进行排序。总复杂度为NMlog(NM)
,其中N是行数,M不是。列。
答案 1 :(得分:0)
阿米特改变标题的建议实际上促使我找到了解决方案。这是一个“分配问题”,解决方案是使用匈牙利算法。我知道那里已经有了一些东西,我只是不确定如何用它来表达答案直到现在。感谢您的帮助。
答案 2 :(得分:0)
假设您正在构建树,则可以按照Dijkstra算法获取最短路径。在根节点中,选择0
的长度,并为每个节点选择下一个可访问元素,该元素为您提供从根节点开始的最短路径,并将该长度(从根目录)存储在节点中。您将在每次迭代时为所有叶子添加使总长度更小的弧,并且将继续直到获得N
节点路径(或位掩码为0
,见下文)。来自根的N
个节点的第一个分支将是最短路径。在每个节点,您可以存储已访问节点的位图(或者您可以确定它,查看父节点),因为它的可能节点只是未访问的节点。或者您可以获得未访问的位图。这将使搜索更容易,因为一旦掩码中没有任何位,您就会停止。
你没有显示任何代码或意图解决问题,所以我会做同样的事情(它似乎是某种功课,你现在似乎根本没有工作)是一个学术问题,已经在与Simplex和操作调查相关的许多编程课程中,在对象/资源分配中已经显示出来,因此必须有大量关于它的文献。