c++ - 初始化指针数据结构的空间复杂度

标签 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),但是对于我们使用指针的这种情况,会是这个算法的空间复杂度?

最佳答案

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

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

请注意,big-O 表示法分解了常量乘数:尽管 std::map<Ptr1,Ptr2> 的 big-O 空间复杂度和 std::vector<Ptr1>是相同的, map 的乘数更高,因为树构造强加了存储树节点和它们之间的连接的开销。

关于c++ - 初始化指针数据结构的空间复杂度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20099528/

相关文章:

c++ - volatile 不适合任何范式

c++ - 是否有好的数据翻译/转换模式/习惯用法?

c - C中的双指针疑惑

c - 这样写 ptr = &i; 是否合法?在C语言中?

c - 从文件读取数据时无法为字符串赋值

c++ - 在 Windows 服务器上使用卡萨布兰卡

c++ - 分配给结构数组

c++ - 检测在编辑控件中输入

algorithm - 检查是否可以从一组 block 构建二维形状

python - Django自定义order_by算法