这个给定数据结构的时间复杂度

时间:2015-06-05 02:40:32

标签: c++ algorithm time-complexity

我刚刚开始了解时间的复杂性,我只是想确保我做对了。

如果我们有unordered_map<string, set<int>>

请注意,组织为哈希表,永远不会允许加载因子超过某个常量。

假设字符串是商家名称,而set<int>我们有员工ID,如果我们想在某些特定业务中打印所有员工ID,那么时间复杂度是多少。这是我的逻辑,如果我朝着正确的方向前进,请告诉我。

我的逻辑是这样的,因为哈希表加载常量不会超过某个常量,找到一个特定的业务将是恒定的时间操作所以O(1)。打印列表中的所有名称基本上都是BST顺序遍历,因此它平均为O(N)。因此总体上它将是O(1)+ O(N),其基本上是O(N)。这是对的吗?

1 个答案:

答案 0 :(得分:2)

重要的是要理解你是如何计算复杂性的。

假设您在第一个容器中有N个条目,而std::set<int>包含M个元素。使用允许快速搜索的容器,第一部分是O(1),然后打印是O(M)。

但是,如果你使用类似std::vector的东西,复杂性将是O(N)+ O(M)(因为搜索速度很慢)。对于常规地图,它将是O(logN)+ O(M)。

由于N和M(没有更多数据)是不相关的,所以你不能将它们放在O表达式中。