algorithm - 这个函数在 C 中的时间复杂度是多少?

标签 algorithm data-structures time-complexity

我想用 C 计算这个函数的复杂度。 这是一棵普通的树

struct nodeG {  
  int key;
  struct nodeG *left_child;
  struct nodeG *right_sib;
};

int aux (NodeG u) {
    int current = 1;                                                // O(1)
    int childs = 0;                                                 // O(1)
    while (u) {                                                     // O(k)
        if (u-> left_child)                                         // O(1)
            childs += aux (u-> left_child);                         // O(1)
        if (u->right_sib && current && u->key < u->right_sib->key)  // O(1)
            current = 0;                                            // O(1)
        u = u -> right_sib;                                         // O(1)
    }
    return current + childs;                                        // O(1)
}

最佳答案

考虑到所有递归调用,该函数对树中的每个节点执行 O(1) 次操作,因此总运行时间为 O(n),其中 n 是节点数。

更详细地说,该函数为每个节点的最左边的子节点调用一次。 while 循环然后遍历它的所有兄弟。所以循环内部每个节点执行一次,或者总共执行n次。除了循环和递归调用,其余的语句都是 O(1)。所以这最终会花费 O(n) 的时间。

关于algorithm - 这个函数在 C 中的时间复杂度是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59177245/

相关文章:

algorithm - 使用替换找出 T(1) = 1 的运行时间; T(n) = 4T(n/3) + n

c# - .Net 使用什么算法来搜索字符串中的模式?

python - 解析表示元组列表的字符串

python - 使用 zip() 函数的 Python 列表理解的复杂度为 O(n)

algorithm - 时间复杂度伪代码

python - 拆分数组 a.t 子数组总和为原始数组

java - 将段落分解为字符串标记

C++ - 具有结构共享/不变性的类 map 数据结构

java - 按值排序的数据结构

arrays - 递归算法题(缺数)