对于我的一个项目,我正在尝试创建一个求解器,给定一组带有加权路径的随机加权节点,将找到具有有限移动次数的最高得分路径。我创建了一个视觉来帮助描述问题。
example http://i50.tinypic.com/nqtgxv.png
complete example http://i46.tinypic.com/swv706.png 此示例显示了所有连接边缘的完整性。边缘上的数字是遍历成本,节点内的数字是分数。节点仅在遍历时计数,并且不能从自身遍历到自身。
从图像中的描述中可以看出,有一个开始/结束节点,其中随机放置的节点各自具有任意分数。每个节点都连接到所有其他节点,每个连接都有一个任意权重,从剩余的移动单元总数中减去。为简单起见,您可以假设连接的权重是距离的函数。节点可以多次旅行,并再次应用它们的分数。目标是找到一个给定移动限制得分最高的循环路径。
解算器永远不会处理超过30个节点,通常处理10-15个节点。我仍然需要尽可能快地尝试。
关于算法或方法的任何想法,除了纯粹的暴力方法之外,还能帮助我解决这个问题吗?
答案 0 :(得分:1)
这是一个O(m ^ 2)时间算法,其中m是移动次数,n是节点数。
对于{0,1,...,m}中的每个时间t和每个节点v,计算从起始节点开始并在v结束的t步行的最大分数,如下所示。如果t = 0,那么只有步行,即在起始节点处什么也不做,所以如果v是起始节点,则(0,v)的最大值为0,否则为-infinity(即,不可能)。
对于t> 0,我们使用t - 1的条目来计算t的条目。为了计算(t,v)条目,我们将v的得分加到(t-1,w)条目的所有节点w上的最大值的差减去从w到v的转换罚分。换句话说,最佳t步步行到v包括从某个节点w到v的步骤,前面是(t-1)步进到w,这个(t-1)步进必须是最优的,因为历史不影响未来评分。
最后,我们查看(m,start node)条目。要恢复实际步行,需要反复工作并反复确定哪个w是最佳节点来源。