指数时间复杂度 O(c^n) 的 for 循环是否可能?
Is a for loop with exponential time complexity O(c^n) possible?
是否有可能获得指数时间复杂度,例如O(2n) 或 O(3n) 在 JavaScript 中使用 just for
循环?
Here有人发布了这样的解决方案:
function my_sum(n) {
long sum = 0;
for (int i=0; i < (1L << n); i++) {
sum += i * (i - 1);
}
return sum;
}
虽然我不明白它的作用。有人可以解释这个例子的作用吗?我怎样才能在 JavaScript 中做同样的事情?
即(1L << n)
是二进制移位。您正在向左移动位。这样,1L
(1, long),从二进制 0001
(1) 转换为 0010
(2),然后 0100
(4)...应用该转变 N 次,您将获得 2^N
(JS 中的 Math.pow(2, n)
)。
在 JS 中可读的方式是这样写:
function mySum(n) {
let sum = 0;
for (let i=0; i < Math.pow(2, n); i++) {
sum += i * (i - 1);
}
return sum;
}
是否有可能获得指数时间复杂度,例如O(2n) 或 O(3n) 在 JavaScript 中使用 just for
循环?
Here有人发布了这样的解决方案:
function my_sum(n) {
long sum = 0;
for (int i=0; i < (1L << n); i++) {
sum += i * (i - 1);
}
return sum;
}
虽然我不明白它的作用。有人可以解释这个例子的作用吗?我怎样才能在 JavaScript 中做同样的事情?
即(1L << n)
是二进制移位。您正在向左移动位。这样,1L
(1, long),从二进制 0001
(1) 转换为 0010
(2),然后 0100
(4)...应用该转变 N 次,您将获得 2^N
(JS 中的 Math.pow(2, n)
)。
在 JS 中可读的方式是这样写:
function mySum(n) {
let sum = 0;
for (let i=0; i < Math.pow(2, n); i++) {
sum += i * (i - 1);
}
return sum;
}