Complexity theory 需要伪代码的复杂性

Complexity theory 需要伪代码的复杂性,complexity-theory,pseudocode,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) 在最坏的情况下,我如何知道(每行的)执

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

while root ≠ null
    while hasChild(root)
        push(parentTree) ← root
        root ← pop(getChilds(root))
        ...
    is parentTree isEmpty
        root ← null
    else    
        root ← pop(parentTree)
在最坏的情况下,我如何知道(每行的)执行次数

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

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


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

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

理由: 外部while循环最多执行clogn次(其中c是常量)。这是因为它依赖于“root”变量,而“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)

整个函数名是什么?pop(var)是什么意思?通常pop就是pop()。虽然伪代码在定义事物(或不定义它们…)方面给了您一些余地,但当像unique[]和insertLegend这样的东西突然出现时,很难猜到要删除“returnlegend”会发生什么。这实际上是我需要分析的一个大算法的一部分。我只需要计算前两行。。我不知道如何确定。我删除了你不必理解的部分。根有孩子,他的孩子也有孩子。所以pop(getChilds(root))实际上是root.getChilds().pop(),根孩子的第一个子。push(parentTree)是我需要在父树中推一个节点,这里是parentTree。