内容
- 问题陈述
- 详细说明和示例
- 访问的资源
- 答案(发布时)
- 后续问题(按照他们的设想)
问题
在计算“空间(内存)复杂度”的大 O 样式符号时,如何考虑原始类型的大小?
详细说明和示例
如果我分配一个长度为 N 个元素的数组,并且每个元素都是一个 32 位整数,那么我大概分配了大约 N*32 位。据我了解,这种分配的内存复杂度被认为是 O(N)。
使用上面的示例,如果我将数组中的每个元素视为指向唯一链表的指针,其中链表的长度为 1(包含 1 个节点和一个空指针),并且该节点的数据段也是 32 -bit 整数,我现在显然正在分配:
- 32 位数组元素
- 32位链表数据
- 32位链表空指针
我的数组变成 O(3*32*N) 了吗?我知道这仍将被视为 O(N),但正如您所看到的,在时间/内存权衡变得相关的情况下,知道差异是相关的(例如,我可以使用各种长度的链表和存储在元素中的头指针数组以延迟我必须动态调整数组大小的点,因为我只能延长链表 - 这会将插入操作摊销到 O(1),但会大大增加内存复杂性,直到实际发生调整大小,其中链表将恢复为数组中的元素,因此消耗的内存大大减少)
已访问的资源:
Stack Overflow 上的相关问题:
维基书有以下说法:
http://en.wikibooks.org/wiki/Data_Structures/Asymptotic_Notation
此外,维基百科详细阐述了这个主题:
http://en.wikipedia.org/wiki/Big_O_notation