我对程序的空间复杂性存有疑问。假设我正在迭代一个大小为n的数组(存储事件ID)(可能有数十亿)。我想跟踪每个事件id的出现,所以我使用哈希映射将事件id存储为键,将其出现计数器存储为值。
这是伪代码:
Map m = HashMap<>
for i to n-1
if m.contains(i)
int prevCount = m.get(i)
m.put(i, prevCount +1)
else
m.put(i, 1)
空间复杂性会是什么?
PS这是我在stackoverflow中的第一个问题,如果它看似重复,请路由我到正确的答案。
答案 0 :(得分:3)
您的循环最多可为HashMap
添加n-1个键/值对。
因此,空间复杂度为O(n)
,因为HashMap
内部存储包含一个数组,其大小将达到接近n的2的幂(假设您没有给出{ {1}}初始容量远大于HashMap
),并且数组的每个元素都是一个链接列表,其平均元素数为n
。