我有一组N项,我知道它们的相互距离。每个元素都有成本,而我有预算。我应该完成以下任务:假设我将一个商品放入购物篮,购物篮中的以下商品将是距离第一商品最大的商品(在预算约束下),第三商品是其距离总和如果第1项和第2项之间的距离是最大值(在预算约束下),则第4项将是其与项目1,2和3的距离之和是最大值(总是预算),等等。如何找到总距离(如上计算)是最大值?您知道解决此问题的算法吗?预先感谢
更新:我已经做过一些研究,这个问题叫做最大多样性问题。我无法翻译上述用C或伪代码编写的启发式算法(可以解决问题)!
答案 0 :(得分:0)
这是一个有趣的问题。如果我理解正确,那么您正在尝试在给定预算的情况下找到最大距离的路径。
让我们把这里的项目想象成一个连通的图,这样我们就可以使用图论中的工具。边是成本,顶点或节点是实际项目。本质上看来,您似乎想在预算约束下找到最大路径,所以采用反向dijkstra算法。
步骤:
选择起始顶点
评估距起点的距离。
如果顶点超出预算,请选择最大距离的顶点,然后转到下一个顶点,燃烧超出预算的边缘
计算新添加的项目与其他项目之间的距离,作为到达该项目的路径之和+选择其他项目的成本(即,第一次迭代说我们得到项目1,然后转到项目2,然后项目2和项目x之间的距离应为项目1 +项目2 +项目x)
如果超出预算,则再次选择最大值,将下一个边缘烧至超出预算的最大值。
重复直到预算用完
希望这有道理,请随时进行澄清。我建议对图论和相关算法有一些背景阅读