需要伪代码的复杂性

时间:2012-02-01 07:00:21

标签: complexity-theory pseudocode

我需要确定我写的伪代码的复杂性

while root ≠ null
    while hasChild(root)
        push(parentTree) ← root
        root ← pop(getChilds(root))
        ...
    is parentTree isEmpty
        root ← null
    else    
        root ← pop(parentTree)

在最坏的情况下,我如何知道执行次数(每行)?

我无法确定它,因为我实际上并不知道前两行。之后,很容易,但我不知道两个第一行的计数......

这是使用堆栈的树实现,root是根节点,如您所见。

顺便说一下,这是我第一次编写伪代码,所以我不确定是否以一种好的方式编写了它。如果不正确,我可以重写它。

1 个答案:

答案 0 :(得分:0)

初步分析使我认为运行时为O(logn*logn)

推理: 外部while循环执行最多clogn时间(其中c是常量)。这是因为它依赖于'root'变量,而变量依赖于'pop parenttree' 父树只会迭代地填充“原始”根的孙子。最多会让所有孩子都在树上的一条路上。众所周知,树下单个路径的长度是logn

内部while循环也最多执行d logn次(d是常数),如果......不在O(1)中执行那么它将在dlogn + X中执行,并且整体运行时间 O(logn *(logn + X)),可能简化为O(Xlogn)

假设is是if,if / else语句在O(1)

中运行

外*内= O(clogn * dlogn)