计算此函数的时间复杂度

时间:2019-02-02 14:30:57

标签: linked-list tree time-complexity complexity-theory

给出此函数(用伪代码编写),时间复杂度是多少?尝试一下,我会说时间复杂度θ(n ^ 3),因为我们需要先遍历树θ(n),然后乘以ANCESTOR的贡献θ(n)和ADDTOQUEUEθ(n)的贡献。这是正确的吗?

================================================ =====================

ANCESTOR进行与节点深度成比例的许多操作

ADDTOHEAD进行恒定数量的操作

ADDTOQUEUE进行与列表长度成比例的许多操作

`FUNCTION(T)/ * T是一棵充满整数的树* /

L.head = NULL /* L is a new empty linked list (of integers) */
RIC_FUNC(T.root,L)
return L

REC_FUNC(v,L)
if(v==NULL)return
if(ANCESTOR(v))
    ADDTOQUEUE(L,v.info)
else
    ADDHEAD(L,v.info)
 REC_FUNC(v.left,L)
 REC_FUNC(v.right,L)

``

1 个答案:

答案 0 :(得分:1)

基本上,您是正确的:O(n^3)

但是,我有ANCESTORADDHEAD处于相反的一面(这意味着您不能用伪代码证明)-这意味着第一次运行L短而v高,因此ANCESTOR将长而ADDHEAD短,经过一些步骤,它们将相等,并且从这一点开始,v会更低并且L更大,因此ANCESTOR会很快,但ADDHEAD会很长。

如果我的假设是正确的,并且ADDHEADANCESTOR的“速度”在不同方向上是相同的复杂度,那么您的复杂度是{{1} }(就像在每个节点中一样,您将获得:1 + n,2+(n-1),3+(n-2)...,它们结束了n + 1中的每一步)。