Space 简单流算法的复杂度

Space complexity for a simple streaming algorithm

我想确定 space go to example of a simple streaming algorithm 的复杂性。

如果您得到 n-1 个不同数字的排列并且必须检测一个缺失的数字,您可以使用公式 n (n + 1) / 2 计算所有数字 1 到 n 的总和,然后减去每个来电号码。结果是您丢失的号码。我发现一篇德语维基百科文章指出该算法的 space 复杂度为 O(log n)。 (https://de.wikipedia.org/wiki/Datenstromalgorithmus)

我不明白的是:存储数字n所需的位数是log2(n)。好的..但我必须计算总和,很难。所以 n (n + 1) / 2 大于 n 因此需要更多 space 而不仅仅是 log (n) 对吗?

有人可以帮我解决这个问题吗?提前致谢!

如果二进制编码中的整数A需要Na位,整数B需要Nb位,那么A*B需要不超过Na+Nb 位(不是 Na * Nb).因此,表达式 n(n+1)/2 只需要 log2(n) + log2(n+1) = O(2log2(n)) = O(log2(n)) 位。

甚至,您可以将 n 提高到任何 固定 i 并且它仍然会使用 O(log2(n)) space. n本身,n10,n500,n10000000都需要O(log (n)) 存储位。