Javascript 这个算法的时间复杂度是多少?

Javascript 这个算法的时间复杂度是多少?,javascript,time-complexity,Javascript,Time Complexity,我相信下面的代码具有时间复杂性O(n),而我的朋友则认为它具有时间复杂性O(n^3) 编辑:n是数据中的元素数 var hash = {} for (var element in data) { var k1 var k2 var k3 // ... stuff if (!hash[k1]) { hash[k1] = {} } if (!hash[k1][k2]) { hash[k1][k2] = {} } if (!hash[k1][k2][

我相信下面的代码具有时间复杂性O(n),而我的朋友则认为它具有时间复杂性O(n^3)

编辑:n是数据中的元素数

var hash = {}
for (var element in data) {
  var k1
  var k2
  var k3
  // ... stuff
  if (!hash[k1]) {
    hash[k1] = {}
  }
  if (!hash[k1][k2]) {
    hash[k1][k2] = {}
  }
  if (!hash[k1][k2][k3]) {
    hash[k1][k2][k3] = 0
  }
  hash[k1][k2][k3] = hash[k1][k2][k3] + 1
}

for (var k1 in hash) {
  for (var k2 in hash[k1]) {
    for (var k3 in hash[k1][k2]) {
      // really do stuff
    }
  }
}
该算法的时间复杂度是多少

编辑:n是数据中的元素数

var hash = {}
for (var element in data) {
  var k1
  var k2
  var k3
  // ... stuff
  if (!hash[k1]) {
    hash[k1] = {}
  }
  if (!hash[k1][k2]) {
    hash[k1][k2] = {}
  }
  if (!hash[k1][k2][k3]) {
    hash[k1][k2][k3] = 0
  }
  hash[k1][k2][k3] = hash[k1][k2][k3] + 1
}

for (var k1 in hash) {
  for (var k2 in hash[k1]) {
    for (var k3 in hash[k1][k2]) {
      // really do stuff
    }
  }
}
编辑: 所以,我朋友认为它是O(n^3)是因为三环。
我的理由是,即使使用三重循环,它也会在散列上穷尽,而不再是。散列中的每个元素基本上由一个3元组(k1、k2、k3)索引。虽然通常遍历3个深循环的值是O(n^3),但我认为每一级的哈希函数都是一个稀疏数组,我的意思是,添加到哈希中不会影响同一级别上的其他哈希,或者甚至是其他层次上的其他散列。

我使用了一个证明它是一个树结构,并使用了树的一般归纳证明来证明它是O(n)

这可能属于代码评审什么是
n
?还有,为什么不把你的分析包括进来,说明代码是
O(n)
(也许也是你朋友的)?我认为你遗漏的“东西”是理解这一点的关键。在这里你也可以免费使用这些,因为我有很多额外的东西: