02 算法

第二章、算法

算法和数据结构的关系

数据结构中讲算法是为了帮助对数据结构的理解

算法

定义:解决特定问题求解步骤的描述

特性:

  • 输入:0或多个(如,print helloworld)
  • 输出:1或多个
  • 有穷性:执行有限的步骤,在有限的时间内完成。
  • 确定性:每一个步骤有确定的含义,没有二义性。相同的输入只能有一个结果。
  • 可行性:算法可以转换为程序上机执行。

好算法的标准:

  • 正确性:①语法正确 ②合法输入,正确输出 ③非法输入,满足规格输出 ④存心刁难,正确输出
  • 可读性
  • 健壮性
  • 时间效率高、空间低

算法效率的度量方法

  • 事后统计

    缺点:①编写统计的程序费时 ②和软硬件有关 ③测试数据不好设计

  • 事前估计

    一个程序的运行时间,是受算法的好坏问题规模的控制

函数的渐进增长

比较两个算法的好坏,要视问题的规模而定。

给定两个函数f(n)和g(n),如果存在一个整数N,使得对于所有的n>N,f(n)总是比g(n)大,那么,我们说f(n)的增长渐进快于g(n)。

判断一个算法的效率时,函数中的常数和其他次要项常常可以忽略,更应该关注主项(最高阶项)的阶数。

算法时间复杂度

T(n)是关于问题规模n的函数,T(n) = O(f(n)),其中O(f(n))成为算法的时间复杂度。随着n的增加,算法执行时间的增长率与f(n)的增长率相同。

推导大O阶:

  • 加法常数都变为1
  • 函数只保留最高阶
  • 最高阶存在且不是1,则去掉与这个项相乘的常数,得到的结果就是大O阶

常见时间复杂度:

O ( 1 ) < O ( l o g n ) < O ( n ) < O ( n l o g n ) < O ( n 2 ) < O ( n 3 ) < O ( 2 n ) < O ( n ! ) < O ( n n )

  • O(1):常数阶
  • O(logn):对数阶
  • O(n):线性阶
  • O(n平方):平方阶
  • O(nlogn):nlogn阶
  • O(n立方):立方阶
  • O(2的n次方):指数阶

最好、最坏、平均:

  • 最好:一次就成功那种
  • 最坏:通常意义下的时间复杂度都是最坏
  • 平均:很难分析得到

猜你喜欢

转载自blog.csdn.net/double___you/article/details/80232505
今日推荐