算法之基本操作次数(JAVA)以及空间复杂度
  kIM7GUNpnV3x 2023年11月02日 53 0

一:基本操作次数

通过代码案例说明:

public static void main(String[] args){
   int n = 7;
    eat1(n);
    eat2(n);
    eat3(n);
    eat4(n);


}


// T(n) = 3n,执行次数是线性的
public static void eat1(int n){
    for(int i = 0; i < n; i++){
        System.out.println("等待一分钟");
        System.out.println("等待一分钟");
        System.out.println("吃1cm面包");
//         break;
    }
}

// 场景2 T(n) = 5logn,执行次数是用对数计算的
public  static void eat2(int n){
    for(int i = n; i > 1; i++){
        System.out.println("等待一分钟");
        System.out.println("等待一分钟");
        System.out.println("等待一分钟");
        System.out.println("等待一分钟");
        System.out.println("吃一半面包");
//         break;
    }
}


// 场景3:T(n) = 2,执行的是常量
public static void eat3(int n){
    System.out.println("等待一分钟");
    System.out.println("吃一个鸡腿");
}

// 场景4:T(n) = 0.5n^2 + 0.5n,执行次数是用多项式计算的
public static void eat4(int n) {
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < i; j++) {
            System.out.println("等待一分钟");
        }
        System.out.println("吃1cm面包");
//        break;
    }
}

二:时间复杂度

时间复杂度

(1)若存在函数f(n),使得当n趋近于无穷大时,

T(n) / f(n) 的极限值为不等于0的常数,

则称f(n)是T(n)的同数量级函数。

记作T(n) = O(f(n)),称之为O(f(n)),O为算法的渐进时间复杂度,

简称为时间复杂度

(2)因为渐进时间复杂度用大写O表示,所以也称之为大O表示法。

简单来说,时间复杂度就是把程序的相对执行时间函数

T(n)简化为一个数量级,这个数量级

可以是n、n^2、n^3等

下面说一些场景

场景一:
T(n) = 3n
最高项为3n,省去系数3,则转换为时间复杂度为:T(n) = O(n)

场景二:
T(n) = 5logn
最高项为5logn,省去系数5,则转换为时间复杂度为:
T(n) = O(logn)

场景三:
T(n) = 2,
只有常数量级,则转换为的时间复杂度为:
T(n) = O(1)

场景四:
T(n) = 0.5n^2 + 0.5n,
最高项为0.5n^2,省去系数0.5,则转换的时间复杂度为:
T(n) = O(n^2)

当n的取值足够大时,不难得出结论:
O(1) < O(logn) < O(n) < O(n^2)

除了上面这些时间复杂度,还有其他一些
不同形式的时间复杂度,例如:
O(nlogn)、O(n^3) 、O(mn)、O(2^n)、O(n!)

时间复杂度存在着巨大的差异:
例如:
算法A的执行次数为T(n) = 100n,时间复杂度为O(n)
算法b执行的次数为T(n) = 5n^2,时间复杂度为O(n^2)

随着规模的增大,可以看出,当n的值很小时,
算法A运行用时要远大于算法B,当n的值在1000左右时,
算法A个算法B的运行时间已经比较接近了;
随着n的值越来越大,甚至达到十万、百万时,
算法A的优势开始显现出来了,算法B
的运行速度则越来越慢,差距越来越明显



【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  anLrwkgbyYZS   2023年12月30日   28   0   0 i++iosi++ioscici
kIM7GUNpnV3x