【发布时间】:2022-01-18 18:53:27
【问题描述】:
我已经考虑这个问题几个星期了,但无法找到一个有效的解决方案。
所以基本上想象你有一个无向图,其中每个节点都有一个分配给它的值(只有正值)。我想找到一条长度为 k 的路径(开始和结束节点无关紧要),如果您将访问节点的值相加,则该路径具有最高的“成本”。您只能访问一次节点。
我们以这张图为例:
d
|
a - b - c
| |
e - f
使用以下节点值:
a: 5
b: 10
c: 2
d: 3
e: 6
f: 7
长度 k=3 的成本最高的路径是 e-f-b,因为总和是 23。
我找到了一个解决方案,可以在 O(n^k) 时间内解决这个问题,基本上找到每个节点的所有可能路径,然后找到成本最高的路径,但我认为必须有一个更优化的解决方案。
【问题讨论】:
-
重访节点可以吗?
-
另外,负值可能吗?
-
@Marat 不允许重新访问节点,这也是我一直在努力解决的问题。负值也是不可能的。
-
这是一个 NP-hard 问题,因此没有简单的解决方案。在一般情况下,中间相遇会给出 O(n^(k/2))。如果节点值足够不均匀,则分支定界可能会有所帮助。对于小的
ks,可能会转换为部分解决方案的图形。是否有关于图结构、值或k的任何基本假设?
标签: algorithm graph graph-algorithm