【问题标题】:Time Complexity Analysis in JavascriptJavascript中的时间复杂度分析
【发布时间】:2018-05-09 05:14:48
【问题描述】:

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

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

1

function sqrt(num) {
guess = num / 3;

  do {
    lastGuess = guess; 


    guess = (num / guess + guess) / 2;

   while(Math.abs(lastGuess - guess));

  return guess;  /

我说这是 O(n) 是否正确,我的推理是因为我们循环直到找到一个近似值。

2

function max(numArray) 
{
    // copy the given array 
    nums = numArray.slice();

    // base case: if we're at the last number, return it
    if (nums.length == 1) { return nums[0]; }

    // check the first two numbers in the array and remove the lesser
    if (nums[0] < nums[1]) { nums.splice(0,1); }
    else { nums.splice(1,1); }

    // with one less number in the array, call the same function
    return max(nums);
}

来自链接中的用户感谢,他计算了数组中的最大数。可以肯定地说,这里的时间复杂度是O(n),因为最大的数字可能在最后,因此为什么O(n)

#3 虽然我相信下面的 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");
}

再次感谢

【问题讨论】:

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


    【解决方案1】:

    第二个你是对的:它是O(n),因为你需要遍历n元素来找到最大值。但是,在第一种情况下,您的输入没有任何变化。在你猜到之前总是需要几步,这在某种程度上与你传入的数字的大小无关。因此它是O(1)。例如,这些数字都只有一个数字,但算法对每个数字采用不同的迭代次数:

     sqrt(9) // 1 iteration
     sqrt(3) // a few iterations
    

    也可以说我们无法预测第一个的时间复杂度。

    【讨论】:

    • 您好乔纳斯,非常感谢!我比较新,我正在尝试练习这些。我特别问了#1,因为我在网上找不到任何关于 do...while 循环的内容。在下面的代码中说: for (var i = 1; i
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-30
    • 1970-01-01
    • 2015-01-26
    • 2020-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多