【问题标题】:Time complexity of level order traversal in graph图中层序遍历的时间复杂度
【发布时间】:2020-09-21 08:00:44
【问题描述】:

时间复杂度:O(n) 任何人都可以将时间复杂度解释为数学中的 O(n)。 我可以发现 while 循环是 O(logn)

public:
    vector<vector<int>> levelOrder(Node* root) {
        if(!root) return vector<vector<int>>{};
        queue<Node*> q;
        q.push(root);
        vector<vector<int>> res;
        
        while(!q.empty()){
            //BFS traversal
            int size= q.size();
            vector<int> level;
            
            for(int i= 0; i< size; i++){
                auto tmp= q.front(); q.pop();
                level.push_back(tmp->val);
                for(auto n: tmp->children)
                    q.push(n);
            }
            res.push_back(level);
        }
        return res;
    }
}

【问题讨论】:

    标签: graph tree time-complexity binary-tree space-complexity


    【解决方案1】:

    好吧,你只访问每个节点一次,所以这里的复杂度将是 O(n)。这个问题不是“分而治之”的算法,因为你最终会访问一个节点的所有分支(在二分算法中,你只访问一个分支)。

    编辑

    递归算法的复杂性可能非常棘手。这个公式可以帮助您:当您的时间复杂度为 T(n) 时,

    T(n) = aT(n/b) + f(n)。

    如果 f(n) = Θ(nd),其中 d ≥ 0,则

    • T(n) = Θ(nd) 如果 a d
    • T(n) = Θ(nd*log(n)) 如果 a = bd
    • T(n) = Θ(nlogb(a)) 如果 a > bd

    在你的情况下,f(n) = Θ(1),因为你在一个节点上什么都不做,所以 d=0。一般来说,您也有 a=b>1 ,所以您属于第三种情况。 Logb(a) = 1,因为 b=a,所以你的复杂度是 Θ(n1)。

    【讨论】:

      猜你喜欢
      • 2012-12-14
      • 1970-01-01
      • 2022-07-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-01
      • 2015-02-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多