初始化指针数据结构的空间复杂性

时间:2013-11-20 15:07:51

标签: c++ algorithm pointers space-complexity

我有一个问题。

在理论计算机科学方面,当我们分析算法时,如果算法初始化一个新的数据结构,那么我们认为数据结构是空间复杂性的一部分。

现在我对这部分不太确定。

假设我有一个int数组,我想使用int指针的映射来映射它们。如

std::map<int*,int*> mymap;
for (int i = 1; i < arraySize; i++) {
   mymap[&arr[i-1]]=&arr[i];
}

如果这个算法没有使用指针,那么我们可以清楚地说明它正在初始化一个大小为n的地图,因此空间复杂度是O(n),但是对于这种情况,我们使用指针的地方,那将是什么这个算法的空间复杂性?

1 个答案:

答案 0 :(得分:7)

单个指针的空间复杂度与任何其他原语的空间复杂度相同 - 即O(1)

std::map<K,V>实现为N个节点的树。它的空间复杂度为O(N*space-complexity-of-one-node),因此您的案例中的总空间复杂度为O(N)

请注意,big-O符号表示常数乘数:尽管std::map<Ptr1,Ptr2>std::vector<Ptr1>的大O空间复杂度相同,但地图的乘数更高,因为树构造将其开销用于存储树节点和它们之间的连接。