for 循环中 "in" 运算符的大 O
Big O of "in" operator inside for loop
考虑这个片段:
const obj1 = {1:1, 2:1, 3:1}
const obj2 = {1:1, 4:1, 9:1}
for(let key in obj1){
if(!(key ** 2 in obj2)) return false
}
这个算法的大O可以考虑O(n)还是应该是O(n^2)因为:
if(!(key ** 2 in obj2))
被认为是循环遍历obj2的所有项目(搜索)
** 注意**:假设obj1和obj2的长度相等
我怀疑 in
没有遍历所有项目,而是像哈希表一样工作。所以我会说它的 O(n).
一个JavaScript对象实际上是一个散列table,所以查找一个键是O(1)。
因此整个算法是 O(n)。
考虑这个片段:
const obj1 = {1:1, 2:1, 3:1}
const obj2 = {1:1, 4:1, 9:1}
for(let key in obj1){
if(!(key ** 2 in obj2)) return false
}
这个算法的大O可以考虑O(n)还是应该是O(n^2)因为:
if(!(key ** 2 in obj2))
被认为是循环遍历obj2的所有项目(搜索)
** 注意**:假设obj1和obj2的长度相等
我怀疑 in
没有遍历所有项目,而是像哈希表一样工作。所以我会说它的 O(n).
一个JavaScript对象实际上是一个散列table,所以查找一个键是O(1)。
因此整个算法是 O(n)。