Javascript 这个算法的时间复杂度是多少?
我相信下面的代码具有时间复杂性O(n),而我的朋友则认为它具有时间复杂性O(n^3) 编辑:n是数据中的元素数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][
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)
(也许也是你朋友的)?我认为你遗漏的“东西”是理解这一点的关键。在这里你也可以免费使用这些,因为我有很多额外的东西:代码>