zoukankan      html  css  js  c++  java
  • 【算法】时间复杂度

    时间复杂度概念

      在计算机科学中,时间复杂性,又称时间复杂度,算法的时间复杂度是一个函数,它定性描述该算法的运行时间。这是一个代表算法输入值的字符串的长度的函数。时间复杂度常用大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 }
  • 相关阅读:
    2017年下半年软考合格标准出炉啦
    练网软考知识点整理-项目配置管理流程
    简练网软考知识点整理-项目招标投标中的法律责任
    简练网软考知识点整理-软件维护类型
    简练网软考知识点整理-软件质量保证及质量评价
    简练网软考知识点整理-项目配置管理配置审计
    简练网软考知识点整理-项目问题日志(Issue Log)
    简练网软考知识点整理-风险应对措施(应急计划、弹回计划和权变措施)
    简练网软考知识点整理-项目组织分解结构OBS
    简练网软考知识点整理-项目配置管理计划
  • 原文地址:https://www.cnblogs.com/h--d/p/14019137.html
Copyright © 2011-2022 走看看