Graph 图的级序遍历的时间复杂度
时间复杂度:O(n) 有人能用数学中的O(n)来解释时间复杂性吗。 我可以找到而循环是O(logn)Graph 图的级序遍历的时间复杂度,graph,tree,time-complexity,binary-tree,space-complexity,Graph,Tree,Time Complexity,Binary Tree,Space Complexity,时间复杂度:O(n) 有人能用数学中的O(n)来解释时间复杂性吗。 我可以找到而循环是O(logn) 公共: 向量levelOrder(节点*根){ if(!root)返回向量{}; 队列q; q、 推(根); 向量res; 而(!q.empty()){ //BFS遍历 int size=q.size(); 向量级; 对于(int i=0;ival); 用于(自动n:tmp->children) q、 推(n); } res.向后推(水平); } 返回res; } } 如果每个节点只访问一次,那
公共:
向量levelOrder(节点*根){
if(!root)返回向量{};
队列q;
q、 推(根);
向量res;
而(!q.empty()){
//BFS遍历
int size=q.size();
向量级;
对于(int i=0;ival);
用于(自动n:tmp->children)
q、 推(n);
}
res.向后推(水平);
}
返回res;
}
}
如果每个节点只访问一次,那么这里的复杂性将是O(n)。这个问题不是一个“分而治之”的算法,因为我们最终将访问一个节点的所有分支(在二分法算法中,您只访问一个分支)
编辑
递归算法的复杂性可能非常棘手。这个公式可以帮助你:当你的时间复杂度为T(n)时
T(n)=aT(n/b)+f(n)
如果f(n)=Θ(nd),其中d≥ 0,那么
- 如果a
- 如果a=bd,则T(n)=Θ(nd*log(n))
- T(n)=Θ(nlogb(a))如果a>bd
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;
}
}