【问题标题】:Javascript Time Complexity AnalysisJavascript时间复杂度分析
【发布时间】:2018-05-12 01:52:09
【问题描述】:

您好,我一直在研究并尝试学习如何检查某些算法的时间复杂度。我看过这个视频,很有帮助。

话虽如此,我还是想知道并开始尝试计算出某些算法的最坏情况和平均情况。

1

我相信下面的 sn-p 它是 O(n),因为要找到 sin 的值,我们必须循环整个数组。

function mySin(x, iterNum) {
    var mxx = -x*x;
    var sin = 1;
    var n = 0;
    var term = 1;
    for (var i = 1; i <= 2*iterNum; i++) {
        n = n + 2;
        term = term * mxx / ( n*(n+1) );
        sin = sin + term
    }
    sin = x*sin;
    console.log(sin + " = my function.");
    console.log(Math.sin(x)  + " math.sin");
}

再次感谢

2

function calculateFibonacciSum (num) {
    if(cachedNumbers[num]) {
        return cachedNumbers[num];
    }
    if(('number' === typeof num) && num <= 0) {
        throw new Error ('Fibonnci series starts with 0. Please, enter any interget greater than or equal to 0');
    }
    else if(('number' === typeof num) && num === 0) {
        return 0;
    }
    else if(('number' === typeof num) && (num === 1 || num === 2)) {
        return 1;
    }
    else {
        var value = calculateFibonacciSum(num-1) + calculateFibonacciSum(num-2);
        cachedNumbers[num] = value;
        return value;
    }
}

虽然对于这个我认为它也是 O(n),因为在第一个 if/else 语句中,tc 是 O(1),因为它的参赛者而最后的 else 语句我们必须循环所有数字,如果数字是未计算然后再次调用该函数(又名递归)。

TIA

【问题讨论】:

    标签: javascript arrays time time-complexity big-o


    【解决方案1】:

    这两个对我来说似乎都是正确的。这里有一点解释:

    1.

    这实际上是O(n),因为循环有n次迭代,其余时间不变;而n与iterNum成正比

    2.

    这也是线性时间,但只是因为您缓存了先前计算的结果。否则它将是 O(2n)。 这是线性时间,因为它本质上是循环到基本情况(0 和 1)。事实上,你可以使用循环而不是递归来重写这个。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-26
      • 2020-12-30
      • 2020-09-19
      • 1970-01-01
      • 1970-01-01
      • 2019-03-13
      相关资源
      最近更新 更多