【问题标题】:How to determine design pattern from time complexity如何从时间复杂度确定设计模式
【发布时间】:2022-08-19 18:51:30
【问题描述】:
我在非正式测试中遇到过这个问题。
T(n) 是递归关系
如果输入大小为n的算法的时间复杂度定义为:
T(1)=A
T(n)=T(n-1)+B 当n>1
其中A 和B 是正常数值。
那么算法设计模式最好描述为:
A. 减少和征服 -正确答案
B. 分而治之
C. 二次方
D. 生成和测试
T(n) 收敛到 T(n) = nB + A -> O(n)
-
答案A和B有什么区别?
-
为什么是答案减少和征服?
-
-
@kiner_shah 据我了解,减少/分而治之非常相似。然而,语义将它们区分开来。 answer below 很好地解释了这一点
标签:
algorithm
design-patterns
【解决方案1】:
来自Wiki,
然而,在这个宽泛的定义下,每个使用递归或循环的算法都可以被视为“分而治之的算法”。因此,一些作者认为只有在每个问题可能产生两个或多个子问题时才应使用“分而治之”的名称。已经为单子问题类提出了减少和征服的名称。
现在来回答你的问题:
- 答案 A 和 B 有什么区别?
A(Decrease and Conquer) 用于生成单个子问题的算法,而 B(Divide and Conquer) 用于生成 2 个或更多子问题的算法。
- 为什么答案是减少和征服?
根据给定的问题:T(n)=T(n-1)+B,我们正在创建一个子问题,即 T(n-1),因此我们将算法标识为decrease and conquer。