我有一个问题。
在理论计算机科学方面,当我们分析算法时,如果算法初始化一个新的数据结构,那么我们认为数据结构是空间复杂性的一部分。
现在我对这部分不太确定。
假设我有一个int
数组,我想使用int
指针的映射来映射它们。如
std::map<int*,int*> mymap;
for (int i = 1; i < arraySize; i++) {
mymap[&arr[i-1]]=&arr[i];
}
如果这个算法没有使用指针,那么我们可以清楚地说明它正在初始化一个大小为n的地图,因此空间复杂度是O(n),但是对于这种情况,我们使用指针的地方,那将是什么这个算法的空间复杂性?
答案 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空间复杂度相同,但地图的乘数更高,因为树构造将其开销用于存储树节点和它们之间的连接。