如何数学计算该算法的时间复杂度?

时间:2019-06-20 10:24:21

标签: algorithm time-complexity

我试图了解算法的时间复杂度,对此我有些麻烦。有人可以解释我如何数学计算该算法的复杂度吗?

fs.createReadStream('/tmp/important.dat')
  .pipe(through2(
    (chunk, enc, cb) => cb(null, chunk), // transform is a noop
    function (cb) { // FLUSH FUNCTION
      this.push('tacking on an extra buffer to the end');
      cb();
    }
  ))
  .pipe(fs.createWriteStream('/tmp/wut.txt'));   

2 个答案:

答案 0 :(得分:2)

这是一个递归函数。当 m> n 时,它将再次使用参数(m-n,n)调用此函数。 因此,在最坏的情况下,假设当 m = 100 n = 1 时,每个步骤中的parameter值为-

 1. m = 100, n = 1
 2. m = 99, n = 1  // because new m will be (m-n), and n remains same according to step 2 in your algorithm
 3. m = 98, n = 1  // same as previous comment
 4. m = 97, n = 1
  .........
  .........
  .........
 99. m = 2, n = 1
 100. m = 1, n = 1
 And then it executes steps 7 in your algorithm.

因此,总体来说,您的算法 100 乘以m和n之间的最大值。

当m

因此该算法的复杂度为 O(max(m,n))

答案 1 :(得分:0)

在Faruk Hossain提供的东西之上。

上限可以另外减小

O(n,m) = a/b + b/gcd(a,b) 
  where a = max(n,m) and b = min(n,m) 

通过观察此算法来计算gcd。并且a / b是第二个“ if语句启动”所需的步骤数,此后最多b/gcd(n,m)一次还需要其他步骤