了解树类型数据结构的运行时间

时间:2012-11-08 06:21:45

标签: algorithm tree big-o

我有一个树的数据结构,每个父节点可以拥有无​​限数量的子节点,树的最大深度为4.每个级别都是不同的类。

我的朋友写了一个算法来遍历这个由for循环组成,伪代码在下面:

root = tree.root();
for (int i = 0; i < root.children_size(); i++)
    child1 = root.child(i);
    for(int j = 0; j < child1.children_size(); j++)
        child2 = child1.child(j);
        for(int k = 0; k < child2.children_size(); k++)
            child3 = child2.child(k);

他声称由于这有3个for循环,因此该算法的运行时间为O(n3)。当我问他n是什么时,他说是for循环的数量,这没有意义,因为n必须是这棵树中的结构。 我声称n是树中总节点的数量,并且该算法的运行时间是O(n),因为运行时间将是O(root.children_size + child1.children_size + child2.children_size)。

我对运行时间的假设是正确的,O(n)还是我的朋友,O(n ^ 3)?

2 个答案:

答案 0 :(得分:1)

是的,你是对的。你实际上正在使用depth first search,它只访问每个节点一次(即dfs的最坏情况),因此复杂度为O(N)。就你的朋友而言,我无法理解他所表示的是什么,因为这里的深度(即for循环次数)是固定的。

答案 1 :(得分:0)

你是对的。访问每个节点一次将使其为O(N),其中N是总数。树中的节点。