求解最长路径长度。我的解决方案是否正确

时间:2011-12-09 04:11:01

标签: algorithm longest-path

这是[来自CLRS]的问题:

将优化问题LONGEST-PATH-LENGTH定义为关系 将无向图的每个实例和两个顶点与数字相关联 在两个顶点之间的最长简单路径中的边缘。定义决定 问题LONGEST-PATH = {:G =(V,E)是无向的 包含在V,k> = 0中的图,u,v是整数,并且存在简单路径 从u到v在G中由至少k个边组成}。显示优化问题 当且仅当时,LONGEST-PATH-LENGTH可以在多项式时间内求解 LONGEST-PATH包含在P。

我的解决方案: 给定一个算法A,它可以在多时间内求解G(u,v),所以如果它返回'是"那么我们在G(u,v)上运行A.和k'这样k'是G(u,v)中最长的路径,现在我们要做的就是比较

k =< k'

如果那么解决了最长的路径长度。如果我们收到&#34; NO&#34;或k> = k&#39;,则没有解决方案。

所以polytime运行A +常量进行比较,然后找到最长的路径长度,它需要多聚时间。这也是唯一可能的,因为G(u,v)在Polytime(在P中)运行,因此G(u,v,k)也在polytime(在P中)运行,因此,因为最长路径可以减少到最长路径 - 长度,然后最长路径长度在P。

我们可以用相反的方式解决它,我们做的是,对于k&#39; = 0到n运行G(u,v,k&#39;),每次检查k == k&#39;是的,我们解决了它。 运行时分析: n * polytime + n *(常数比较)= polytime

有人能告诉我,我的答案是否合理?如果没有请告诉我我哪里出错了

您也可以给我一些如何学习算法的建议,以及我应该采取什么样的方法来解决算法问题(或图形问题)

请和thankyou

1 个答案:

答案 0 :(得分:2)

你的答案是合理的,但我会试着稍微正确地对待它(以明确的方式单独格式化案例,更准确地说明多项式时间意味着什么,那种东西......)

我唯一想指出的是,在你的第二次减少(显示决策问题解决了优化问题)中,对于k = 0到N的解决方案并不通用。多项式时间是根据输入长度确定的,因此在问题中,N是一般数字(例如重量或某物),而不是来自输入的项目数量(如此case)你需要使用更高级的二进制搜索来确定。