zoukankan      html  css  js  c++  java
  • 数据结构:复杂度分析

    复杂度分析

    对于算法的复杂度分析只要包含两个方面:

    • [1] 时间复杂度
    • [2] 空间复杂度

    复杂度记法

    O=>最坏情况

    Ω=>最好情况

    θ=>介于O与Ω之前的情况

    如下图:

    几个复杂度的描述

    通常我们使用Big-O度量算法的复杂度

    复杂度层次

    典型的复杂度层次包括:

    • [1] O(1)
    • [2] O(log*n)
    • [3] O(log (log n))
    • [4] O(log n)
    • [5] O(sqrt(n))
    • [6] O(n)
    • [7] O(n * log *n)
    • [8] O(n * log (log n))
    • [9] O(n * log n)
    • [10] O(n2)
    • [11] O(n3)
    • [11] O(nc)
    • [12] O(2n)

    log2n的产生

    for(int j = 1; j < n; j<<=1){
    	//do something
    }
    

    首先: j = 1;

    接着: j = j * 2,所以后面可以认为是: j = j * 2x;

    那么什么时候 j * 2x < n 呢?(因为原始的j = 1,因此此处可以写为 2x < n);

    同时对两边取以2为底的对数,可得 x = log2n;

    此处的x就是这个循环的次数.

    log2(logkn)的产生

    for(int k = 2; k < n; k = k * k){
    	//do something
    }
    

    首先: k = 2;

    接着: k = k2,所以后面的数可以认为是:

    $$
    k = k^j ( j = 2^x,x即时我们此处需要的循环次数)
    $$
    第1次对两边取以k为底的对数可得: 2x = logkn

    第2次对两边取以2为底的对数可得: x = logx(logkn)

    图示

    典型层次

    祝:玩得愉快!
  • 相关阅读:
    实现JavaScript自定义函数的整合、链式调用及类的封装
    jQuery事件
    jQuery特效
    jQuery基础细节
    CSS3盒模型
    主流清浮动方法
    JavaScript 执行环境及作用域
    JavaScript 参数传递与变量复制
    PHP雪花背景验证码
    Linkis 0.9.2 版本发布
  • 原文地址:https://www.cnblogs.com/hejianglin/p/8182769.html
Copyright © 2011-2022 走看看