算法及其简要分析

1 相关概念

1.1 算法是对特定问题的求解步骤的一种描述,是指令的有序序列

1.2 算法的5大特性

  • 输入:一个算法有零个或者多个输入
  • 输出:一个算法有一个或者多个输出
  • 有穷性:一个算法必须是在执行有穷步后结束,且每一步的执行时间是有穷的
  • 确定性:算法中每一条指令必须明确的,同一个输入只能得到相同输出
  • 可行性:算法描述的操作可以通过已实现的操作,通过有限步来实现

2 算法的表示方法

  • 自然语言描述
  • 伪代码描述

3 评价算法效率

3.1 事后统计:将算法实现测算其时间与空间的开销

3.2 事前分析:对算法所耗资源的一种估算

3.3 算法分析的维度

  • 时间复杂度
  • 空间复杂度

4 算法分析

     每条语句执行时间 = 语句执行的次数 * 单条语句执行的时间(单位时间,依赖于指令系统、代码质量等) 

     进行算法比较时可以剔除对于单位时间的考虑,单位时间是由所使用的硬件CPU以及操作系统所决定

     算法执行时间 = 语句执行的时间 ≈ 每条语句执行的次数之和 ≈ 基本语句的执行次数

4.1 算法分析----时间复杂度

  • 基本语句重复执行的次数是关于问题规模的一个函数,我们把该函数的渐进阶称为该算法的时间复杂度
  • 问题规模:输入量是多少
  • 基本语句:是执行次数与整个算法的执行次数成正比的语句

例如:for(i=1; i++; i <= n)

             for(j=1; j++; j <= n)

                  x++

          问题规模:n

          基本语句:x++

          问题复杂度:o(n2)

4.2 算法分析--大O符号

4.2.1 定义

     若存在两个正常数C与n0,是的n≥n0时,T(n) <=C*f(n)恒成立,则T(n) = O(f(n))。

 

     

   定理:若A(n)为一个n次多项式,则A(n)=O(nm)

4.2.2 算法分析---最坏情况、最好情况、平均情况

  • 基本语句的执行次数是否只与问题的规模相关?
  • 如果问题规模相同,时间代价与输入数据有关;则需要根据输入分析最好、最坏、平均情况。

4.2.3 常见的时间复杂度

     常见阶的比较:O(1) < O(logn) < O(n) < O(n2) < O(2n) < O(n!)

4.3 算法分析---时间复杂度分析方法

4.3.1 时间复杂度运算法则

    若T1(n) = O(g(n)), T2(n) = O(f(n)),则:

  • T1(n) + T2(n) = max{g(n),f(n)}
  • T1(n) * T2(n) = O(g(n)*f(n))

4.3.2 时间复杂度分析方法

  1. 求出程序各语句、各模块的运行时间
  2. 求出整个程序运行时间

4.3.3 求出各语句、各模块的运行时间所应该遵循的原则

  • 赋值语句、读/写语句-----O(1)
  • 语句序列-----运行时间由加法原则确认,取最长运行时间语句
  • 分支语句 -----运行时间由分支条件(O(1))与运行时间最长的分支决定
  • 循环语句-----重复执行次数n * (循环体耗时 + 计算参数、循环条件、跳出循环等辅助操作(O(1)))
  • 递归函数-----T(n) = C + T(n-1);T(n)为递归函数运行时间

4.4 算法分析-----空间复杂度

       是指算法执行过程中,最大存储空间的需求

posted on 2015-10-01 17:54  新手酱油  阅读(307)  评论(0)    收藏  举报

导航