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

时间:2014-10-01 17:19:20

标签: 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][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是数据中元素的数量

编辑: 所以,我朋友的推理是O(n ^ 3)是因为三重循环。 我的理由是,即使使用三重循环,它也不仅仅是散列而已。散列中的每个元素基本上由3元组(k1,k2,k3)索引。虽然通常遍历3个深的循环将是O(n ^ 3),但我相信散列的每个级别都充当稀疏数组,并且我的意思是添加到散列不会影响同一级别上的其他散列,或者甚至是其他级别的其他哈希。

1 个答案:

答案 0 :(得分:0)

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