算法分析是关于计算程序性能和资源利用的理论研究。
比性能更重要的要素:

  • 模块性
  • 准确性
  • 可维护性
  • 功能性
  • 健壮性
  • 用户友好
  • 程序开发耗时
  • 简易性
  • 可扩展性
  • 可靠性

为什么学习算法分析:

  • 有时性能直接决定程序可行或者不可行
  • 算法是一种描述程序行为的语言

sorting example

排列:我们输入一组序列a1,a2ana_1,a_2\dots a_n,输出a1,a12ana'_1,a1_2\dots a'_na1a2ana'_1 \le a'_2 \le \dots a'_n

算法时间复杂度:

  • 输入本身,如果输入本身排序好了,时间复杂度就很小
  • 输入的规模,比如序列长短
  • 通常讨论算法的最坏情况耗时

分析的种类

  • 最坏情况分析:T(n)T(n)定义为输入规模为n时的最长运行时间。
  • 平均情况:T(n)T(n)定义为输入规模为n时的期望运行时间。
  • 最好情况

算法时间分析

取决于电脑:

  • 相对速度(同一电脑)
  • 绝对速度(不同电脑)

算法的大局观(渐进分析):

  • 忽略依赖于机器的常量
  • 不检查实际的运行时间,关注运行时间的增长(舍弃低阶)

3n3+90n25n+6046=Θ(n3)3n^3 + 90n^2 – 5n + 6046 = Θ(n^3),当n足够大,Θ(n2)Θ(n^2)终究会优于Θ(n3)Θ(n^3) 。渐进符号的伟大之处在于,满足我们对相对和绝对速度的双重比较要求(不同的计算平台只是相差一个常数)。

插入排序

插入排序介绍

【1】前言
描述:先取定位置j,将j这个位置上的元素插进前j-1的序列(此时前j-1个元素的序列是排序好的了),j从2到n。

插入算法复杂度分析

最坏情况:T(n)=jnΘ(j)=Θ(n2)T(n)=\sum_j^nΘ(j)=Θ(n^2)

归并排序

归并排序介绍

【1】前言
描述:n不为1时,将序列前后分两部分,两部分排序后只要对这两个已排序序列的头元素进行比较,按顺序输出到最后结果。

归并算法复杂度分析

【1】前言
【1】前言
T(n)=2T(n2)+cnT(n) = 2T(\frac{n}{2}) + cn,利用迭代的思想。
【1】前言
Θ(nlgn)Θ(n lg n)在渐进情况下小于Θ(n2)Θ(n^2),因此归并排序优于插入排序。

相关文章:

  • 2021-10-16
  • 2021-09-05
  • 2021-09-26
  • 2021-07-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-11-30
猜你喜欢
  • 2021-06-30
  • 2021-10-23
  • 2021-07-07
  • 2022-02-20
  • 2021-12-26
  • 2021-12-11
相关资源
相似解决方案