基础算法(零)---算法运行时间

来源:互联网 发布:展示网站cms 编辑:程序博客网 时间:2024/06/08 16:29
  1. 运行时间分析的基本策略是从内部(或最深层部分)向外展开工作的
  2. 如果有方法调用,那么首先分析这些调用
  3. 如果有递归过程那么存在几种选择

典型的增长率:

函数 名称 c 常数 logN 对数 logN的平方 对数平方 N 线性 NlogN N的平方 二次 N的立方 三次 2的N次方 指数

法则一:for循环:

一个foir循环的运行时间至多是该for循环内部那些语句(包括测试)的运行时间乘以迭代次数

法则二:嵌套的for循环:

从里向外分析这些循环
在一组嵌套循环内部的一条语句总的运行时间为该语句的运行时间乘以该组所有的for循环的大小的乘积

程序片段 0(N*N)

for(i = 0; i < n; i ++){    for(j = 0; j < n; j ++){        k++;    }}

法则三:顺序语句:
将各个语句的运行时间求和即可(这意味着其中的最大值就是所得的运行时间)
程序片段 O(N)0(N*N),总量为 0(N*N)

for( i = 0; i < n; i ++){    a[i] = 0;}for( i = 0; i < n; i ++){    for( j = 0; j < n; j ++){        a[i] += a[j] + i + j;    }}

法则四:if/else语句:

一个if/else语句的运行时间从不超过判断的运行时间再加上S1和S2中运行时间长的那个的总运行时间【有些情况下这样估计会过高,但绝不会过低】

if(condition)    S1else    S2

运行时间中的对数:
一般法则:

如果一个算法用常数时间O(1)将问题的大小削减为其一部分(通常1/2),那么该算法就是O(logN)
如果使用常数时间只是把问题减少一个常数的数量(如将问题减少1) ,那么该算法就是O(N)

1. 折半查找
2. 欧几里得算法(计算最大公因数)

public static long gcd(long m, long n) {        while (n != 0) {            long rem = m % n;            m = n;            n = rem;        }        return m;    }

3. 幂运算

1 0
原创粉丝点击