【发布时间】:2015-08-10 03:55:48
【问题描述】:
这是我正在解决的问题
我实施了蛮力解决方案和分而治之(递归)解决方案。他们都使用这个输入(从帖子 1 到 4)
对于蛮力解决方案,我所做的是生成 {1,2,3,4} 的所有子集,遍历所有子集并仅检查包含 1 和 4 的子集。我知道我的蛮力解决方案将在 O(2n) 时间内运行,因为数学上有 2n 个子集,我必须迭代全部。
对于我的递归解决方案。我所做的是分解这个问题,以便生成/将检查的唯一解决方案是包含 1 和 4 的解决方案。例如,从 1 可以转到 2、3、4,如果转到 2,您可以转到 3,4,依此类推...直到达到 4。
在分析了这两种算法之后,我意识到唯一的区别是分而治之甚至不会检查没有 1 和 4 的子集,但蛮力会检查 {2,3}。这种差异将如何影响递归算法的时间复杂度。递归算法是否也会在 O(2n) 或更少的时间内运行,因为它检查的子集更少?
【问题讨论】:
-
似乎是动态规划的经典问题,因为问题具有最优子结构。 (或者只是将问题简化为 DAG,然后运行最短路径问题算法)。
-
这里的主题也很完美,在算法标签下。它询问如何解决可以用任何编程语言计算的问题。
-
@amit 是的,动态编程是下一步。我认为这更像是一个进步,可以帮助您了解递归、蛮力和动态之间的区别
-
@amit 你知道运行时是什么吗?其余答案尚不清楚/尚未解决。
标签: algorithm recursion big-o brute-force divide-and-conquer