微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

非恒定操作的 DFS 时间复杂度

如何解决非恒定操作的 DFS 时间复杂度

在以深度优先搜索方式遍历时,如果存在非常量操作,时间复杂度是多少?

例如,node[child]set<int>,因此 erase() 的运行时间为 O(log n),其中 n 是顶点数。

        while(!q.empty()) { // O(n)
            auto parent = q.front();
            q.pop_front();
            for(auto& child : node[parent]) { // O(e * log n)
                if(!isVisited[child]) {
                    isVisited[child] = true;
                    q.push_front(child);
                    node[child].erase(parent); // O(log n)
                } else {
                    return false;   
                }
            }

        }

那么总运行时间会是 O(n + e * log n),其中 e 是边的数量吗?

问题来自https://leetcode.com/problems/graph-valid-tree

更新:这是已接受的提交 https://leetcode.com/submissions/detail/518475470/

解决方法

假设这是一个连通图,是的,正如您推测大 O 表示法的整体复杂性

O (E logN)

对于边和顶点的集合,习惯上使用E和V。例如 ei 是针对特定边的。 |E|用于边数,但在上下文中可以使用 E 代替 |E|。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。