【发布时间】:2018-01-09 22:51:33
【问题描述】:
这是一个算法的解决方案,它希望我在给定一组硬币及其相应数量的情况下找到所有可能的总和。我很难得出这个算法的时间复杂度。任何帮助将不胜感激,谢谢!
const coins = [1, 2, 3];
const quantity = [1, 2, 2];
const possibleSums = (coins, quantity) => {
const uniqueSums = new Set([0]);
for (let i = 0; i < coins.length; i++) {
const currentSums = new Set();
for (let j = 1; j <= quantity[i]; j++) {
for (let sum of uniqueSums) {
currentSums.add((coins[i] * j) + sum);
}
}
for (let sum of currentSums) {
uniqueSums.add(sum);
}
}
return uniqueSums.size - 1;
}
【问题讨论】:
-
这是确定时间复杂度的“蛮力”方法。看起来每个'.add'都可以被认为是一个操作。因此,添加一个计数器变量,每次调用 '.add' 时将其递增,在函数末尾打印它,并尝试使用硬币和数量来确定模式。
-
您希望复杂度达到多少?通常人们想要一个关于给定数组的 length 的 big-O 值,但是这个算法会根据其中一个数组中的实际 values 而有所不同。
-
我相信它是 O(n^3) 其中 n 是硬币数组的长度。外循环和内循环是 O(n^2),然后在 for 循环的数量内还有一个循环,这使得它成为 O(n^3)。
标签: javascript algorithm time-complexity