什么是算法中的时间复杂度

  T(n):执行某个算法的语句次数,称为语句频度或时间频度。n是指算法的规模,n不断的变化,T(n)就不断的变化。而变化的规律是什么样的?这就引入了时间复杂度的概念,下面举例说明。

时间复杂度为:O(1) 

 public void fun1() {
        int n = 100;//没有入参变量,执行规模永远为1行
    }

时间复杂度为:O(n)

public void fun1() {
        int n = 100;//执行次数:1
        int sum = 0;//执行次数:1
        for (int j = 1; j <= n; ++j) {//执行次数:n
            sum += j;//执行次数:n
        }
    }
// 所以T(n)=1+1+n+n=2n+2 = n,即时间复杂度为:O(n).
//时间复杂度是表示一个函数的趋势,并不代表具体值,当n趋于无穷大时,可以忽略低阶项和首项系数。

时间复杂度为:O(logn)

 int i=1; 
    while (i<=n) 
       i=i*2; 
//一个算法如果能在每个步骤去掉一半数据元素,如二分检索,通常它就取 O(logn)时间

时间复杂度为:O(n²)

 public void fun1() {
        int n = 100;//执行次数:1
        int sum = 0;//执行次数:1
        for (int i = 1; i <= n; ++i) {//执行次数:n
            for (int j = 1; j <= n; ++j) {//执行次数:n*n
                sum += j;//执行次数:n*n
            }
        }
    }
//T(n)=1+1+n+nn+nn=2n²+2n+2=n²

    总结:常规的代码的算法是有规律的:看几重循环:只有一重则时间复杂度为O(n),二重为O(n^2);如果有二分则为O(logn),二分例如快速幂、二分查找,如果一个for循环套一个二分,那么时间复杂度则为O(nlogn)。

    时间复杂度按n越大算法越复杂来排的话:常数阶O(1)、对数阶O(logn)、线性阶O(n)、线性对数阶O(nlogn)、平方阶O(n²)、立方阶O(n³)、……k次方阶O(n的k次方)、指数阶O(2的n次方)。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值