DFS 访问内部的地图元素.时间复杂度
DFS with accessing a map element inside. Time complexity
我有一个有向图,由C++写的地图表示。
Node{
vector<int> adjacency_list;
};
Graph{
map<Node,Node> map;
};
我有递归的DFS,比如(伪代码(:
dfs(node):
for adjacent_node in node.adjacency_list:
if(map[adjacent_node].valid):
dfs(map[adjacent_node])
C++映射 [] 运算符的复杂性为:
大小对数。
我知道(邻接列表(有向图中的DFS是O(V + E(,但我不确定这个函数给我带来了这个map[]运算符的复杂性。
首先,从伪代码中不清楚 map::operator[] 在哪里调用,因为遍历映射通常是在没有它的情况下完成的(线性时间(。
其次,根据图的结构(即它是一棵树吗?(,你的算法可能会多次访问相同的节点,从而导致潜在的指数级时间复杂度。如果它包含有向循环,则永远不会终止。
使用以下C++代码,您确实会得到 O(V+E( 时间复杂度。
void dfs(Node& node) {
if(node.visited) return;
node.visited = true;
for(Node& adj : node.adjacency_list) dfs(adj);
}
编辑:请注意,您实际上会得到O(E(时间复杂度,但如果E<V-1,您将不会访问所有节点。>
相关文章:
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- while循环中while循环的时间复杂度是多少
- 我可以创建一个包含两个变量的 for 循环,但时间复杂度仍然为 O(n) 吗?
- 函数的时间复杂度是多少?
- 如何检查两个 std::向量在小于 O(n) 的时间复杂度内是否相等
- 时间复杂度 当具有复合数据类型(如元组或对)时?
- 如何计算此排序函数的时间复杂度?
- 计算两个代码块的时间复杂度
- C++ 中具有 O(1) 搜索时间复杂度的数据结构
- 具有嵌套 if-else 的循环的时间复杂度
- 将数组的元素插入映射的时间复杂度是多少?
- Deque 中元素的随机访问如何提供恒定的时间复杂度?
- 我们可以在队列前面以 O(1) 时间复杂度排队一个元素吗?
- 如何检查 2 个 c++ 数组在 O(1) 或 O(log n) 时间复杂度中是否相同(所有元素都相同,顺序很重要)?
- 包含每个 k 个列表中至少 1 个元素的最小元素范围的时间复杂度
- 如何检查 O(N) 时间复杂度的多重集中是否有 2 个或更多元素具有相同的值
- DFS 访问内部的地图元素.时间复杂度
- 编写算法以查找数组中最常出现的元素.给出算法的时间复杂度
- 对于boost::hana::tuple,元素访问的时间复杂度是多少?
- 在最小堆中找到最小元素的时间复杂度是多少?