我相信下面的代码有时间复杂度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),但我相信散列的每个级别都充当稀疏数组,并且我的意思是添加到散列不会影响同一级别上的其他散列,或者甚至是其他级别的其他哈希。
答案 0 :(得分:0)
我使用了一个证据来证明它是一个树结构,并使用树的一般归纳证明来证明它是O(n)