我需要确定我写的伪代码的复杂性
while root ≠ null
while hasChild(root)
push(parentTree) ← root
root ← pop(getChilds(root))
...
is parentTree isEmpty
root ← null
else
root ← pop(parentTree)
在最坏的情况下,我如何知道执行次数(每行)?
我无法确定它,因为我实际上并不知道前两行。之后,很容易,但我不知道两个第一行的计数......
这是使用堆栈的树实现,root是根节点,如您所见。
顺便说一下,这是我第一次编写伪代码,所以我不确定是否以一种好的方式编写了它。如果不正确,我可以重写它。
答案 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)