我有一个树的数据结构,每个父节点可以拥有无限数量的子节点,树的最大深度为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)?
答案 0 :(得分:1)
是的,你是对的。你实际上正在使用depth first search,它只访问每个节点一次(即dfs的最坏情况),因此复杂度为O(N)。就你的朋友而言,我无法理解他所表示的是什么,因为这里的深度(即for循环次数)是固定的。
答案 1 :(得分:0)
你是对的。访问每个节点一次将使其为O(N),其中N是总数。树中的节点。