H__D  

时间复杂度概念

  在计算机科学中,时间复杂性,又称时间复杂度,算法的时间复杂度是一个函数,它定性描述该算法的运行时间。这是一个代表算法输入值的字符串的长度的函数。时间复杂度常用大O符号表述,不包括这个函数的低阶项和首项系数。使用这种方式时,时间复杂度可被称为是渐近的,亦即考察输入值大小趋近无穷时的情况。

代码说明

  1 package com.test.springboot.starter.service;
  2 
  3 /**
  4  * 时间复杂度
  5  * 算法一般使用T(n)简化的估算值来衡量代码的执行的速度
  6  * 这段简化的估算值叫做时间复杂度
  7  * <p>
  8  * T(n): 某段代码的总执行次数
  9  * n: 输入数据的大小或输入数据的数量
 10  * <p>
 11  * T(n) = 2        =》 O(1)
 12  * T(n) = 3n + 3   =》 O(n)
 13  * T(n) = 5n^3 + 666n^2 + 33   =》 O(n^3)
 14  * <p>
 15  * T(n)是不是常数
 16  * - 是:时间复杂度为O(1)
 17  * - 否:时间复杂度为O(保留T(n)的最高次项并去掉最高次项d的系数)
 18  *
 19  * 时间复杂度排序从快到慢:
 20  * 常数时间 O(1)
 21  * 对数时间 O(logn)
 22  * 线性时间 O(n)
 23  * 线性对数时间 O(nlogn)
 24  * 二次时间 O(n^2)
 25  * 三次时间 O(n^3)
 26  * 指数时间 O(2^n)
 27  */
 28 public class TimeO {
 29 
 30     /**
 31      * 调用一次 func1 方法
 32      * T(n) = 2 =》 O(1)
 33      * <p>
 34      * T(n): 某段代码的总执行次数
 35      * n: 输入数据的大小或输入数据的数量
 36      *
 37      * @return
 38      */
 39     int func1() {
 40         System.out.println("Hello World!");
 41         return 0;
 42     }
 43 
 44     /**
 45      * 调用一次 func2 方法
 46      * T(n) = 3n + 3 =》 O(n)
 47      * <p>
 48      * T(n): 某段代码的总执行次数
 49      * n: 输入数据的大小或输入数据的数量
 50      *
 51      * @param n
 52      * @return
 53      */
 54     int func2(int n) {
 55         for (int i = 0; i < n; n++) {
 56             System.out.println("Hello World!");
 57         }
 58         return 0;
 59     }
 60 
 61 
 62     //// 以下为其他时间复杂度示例
 63 
 64     /**
 65      * 调用一次 func3 方法
 66      * T(n) = n^2   =》 O(n^2)
 67      *
 68      * @param n
 69      */
 70     void func3(int n) {
 71         for (int i = 0; i < n; n++) {
 72             for (int j = 0; j < n; j++) {
 73                 System.out.println("Hello World!");
 74             }
 75         }
 76     }
 77 
 78 
 79     /**
 80      * 调用一次 func4 方法
 81      * T(n) = n^2 + n   =》 O(n^2)
 82      *
 83      * @param n
 84      */
 85     void func4(int n) {
 86         for (int i = 0; i < n; n++) {
 87             for (int j = 0; j < n; j++) {
 88                 System.out.println("Hello World1");
 89             }
 90         }
 91         for (int i = 0; i < n; n++) {
 92             System.out.println("Hello World2");
 93         }
 94     }
 95 
 96     /**
 97      * 调用一次 func5 方法
 98      * T(n) = n^2   =》 O(n^2)
 99      *
100      * 以n的最大值作为时间复杂度的依据
101      *
102      * @param n
103      */
104     void func5(int n) {
105         if (n > 100) {
106             for (int i = 0; i < n; n++) {
107                 for (int j = 0; j < n; j++) {
108                     System.out.println("Hello World1");
109                 }
110             }
111         } else {
112             for (int i = 0; i < n; n++) {
113                 System.out.println("Hello World2");
114             }
115         }
116     }
117 
118 
119     /**
120      * 调用一次 func6 方法
121      * T(n) = n + (n - 1) + (n - 2) + (n - 3) + ... + 2 + 1
122      *      = n * (n + 1) / 2
123      *      =》 O(n^2)
124      *
125      * @param n
126      */
127     void func6(int n) {
128         for (int i = 0; i < n; n++) {
129             for (int j = 0; j < i; j++) {
130                 System.out.println("Hello World!");
131             }
132         }
133     }
134     
135 }

 

posted on 2020-11-22 14:02  H__D  阅读(244)  评论(0编辑  收藏  举报