简述时间复杂度

简述时间复杂度

基本概念

时间复杂度并不是指程序的运行时间,而是指程序的运行次数。当有多种算法去解决同一个问题时,就可以用时间复杂度去衡量每个算法的效率,算法中基本语句重复执行的次数是问题规模 n 的某个函数 f(n),通常表示为 T(n) = O(f(n))。

常见类型

  1. 常数阶 O(1)
    如果运行时间不随着元素 n 的增长而增长,就叫做常数阶。此类算法的时间复杂度为 O(1)。
var x = 10;
console.log(x);

以上程序执行次数不是一个相对数,即不随着 N 的增长而增长,所以为常数阶。

  1. 对数阶 O(log2 n)
function func(n) {
    for (var i = 2; i < n; i++) {
        i *= 2;
        console.log(i);
    }
}

假设循环次数为 t,则循环条件满足 2^t < n。可以得出,执行次数t = log(2)(n),即 T(n) = log(2)(n),可见时间复杂度为 O(log(2)(n)),即 O(log n)。

  1. 线性阶 O(n)
var n = 10;
for(var i = 0;i<n;i++){
 console.log(i);
}

以上程序执行的次数随着 N 的变化而变化,表示为 O(n × 1),即 O(n)。

  1. 平方阶 O(n^2)
function func(n) {
    for (var i = 0; i < n; i++) {
        for (var j = i; j < n; j++) {
            console.log("Hello World");
        }
    }
}

以上两次循坏执行次数为 n*n ,因此为 平方阶 O(n^2)。

  1. 立方阶 O(n^3)
function func(n) {
    for (var i = 0; i < n; i++) {
        for (var j = i; j < n; j++) {
            for (var k = j; k < j; k++) {
            console.log("Hello World");
          }
        }
    }
}

以上两次循坏执行次数为 n * n * n ,因此为平方阶 O(n^3)。

发布了252 篇原创文章 · 获赞 2360 · 访问量 14万+

猜你喜欢

转载自blog.csdn.net/weixin_44135121/article/details/103245822