在函数内增长和收缩的变量的空间复杂度

时间:2019-01-03 23:18:29

标签: javascript big-o space-complexity

我正在解决一个问题,我需要在没有重复的数组中查找一个值。为了解决该问题,我将在第一次出现时将每个值添加到hashTable中,并在第二次出现时将其删除。

最后,hashTable将仅包含在数组中仅出现一次的字符。这样的问题在hashTable增大但又缩小的情况下,空间复杂度是多少?

我希望空间复杂度为O(1),因为无论输入大小如何,hashTable的最终大小都是1。

*值得注意的是:假设输入的重复数组只有1个项目出现一次,并且您不必担心任何其他极端情况。

2 个答案:

答案 0 :(得分:1)

如果重复项的数量为奇数怎么办?哈希表失去了该值,然后又获得了它!

(我认为)O(n)WCS的正确方法是使用表(如果您不对任何内容进行哈希,则不一定是哈希表)。之后,删除所有大于1的值并保留。(仍为O(n))。

编辑:复杂性解释:就空间而言,最坏的情况是每个值在初始数组中都出现一次,这意味着对于初始数组的每个成员,结果表都有1个条目。含义N个条目。该算法是计算线性的。

如果您真的想深入了解复杂性,则需要访问“哈希表”的计算要求-实际使用哈希吗?我可以将整个反域预分配为整数数组吗?这些实际上更多地取决于该算法的实际应用。无论如何,它大多是P类超快速算法。

答案 1 :(得分:0)

在理想情况下,空间复杂度不仅是算法在算法结束处使用的空间的度量。通常,它是您的算法要解决多少费用的度量。在您的情况下,由于它必须循环遍历并可能一次记住整个输入数组(假设具有O(1)读/写访问权的正确哈希表实现),因此它是O(n)-即使假设只有成对的重复项和一个单一值。订单表示法通常不会考虑O(n / 2)之类的东西。

正如Nuno所提到的,如果您需要考虑三次重复,则您的算法将不起作用。即使一个特定的问题表明它们现在不可能发生,也要记住未来,这一点很重要-我使用此类问题的一种变体作为访谈问题,人们经常忘记三重复。 >

那些候选人不及格。