【发布时间】:2017-02-22 02:03:44
【问题描述】:
我创建了以下伪代码,但我不确定如何计算它的复杂度:
(伪代码)
MyFunction(Q, L)
if (Q = empty) return
M = empty queue
NM = empty queue
M.Enqueue(Q.Dequeue)
while (Q is not empty)
pt = Q.Dequeue()
if (pt.y > M.peek().y) M.Enqueue(pt)
else NM.Enqueue(pt)
L.add(M)
if (NM is not empty) MyFunction(NM, L)
return L;
MyFunction 接收一个包含 n 个点的集合 Q 和一个列表 L,我们将在其中保存 Q 的 k 个子集 (1
因此,每次递归调用点数都会减少一个整数 x,直到点数为 0。这个整数 x 可以不同于一个递归调用另一个(它可以是 1 和 n 之间的任何值(n是当前的点数))
那么我的算法的复杂度是多少?
我在想我的递归关系会是这样的:
T(0) = 1
T(n) = T(n-x) + an
这是正确的吗?如果是这样,我该如何解决?
【问题讨论】:
标签: algorithm time-complexity recurrence