【1】前言

前言

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

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

为什么学习算法分析:

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

sorting example

排列:我们输入一组序列 a 1 , a 2 … a n a_1,a_2\dots a_n a1,a2an,输出 a 1 ′ , a 1 2 … a n ′ a'_1,a1_2\dots a'_n a1,a12an a 1 ′ ≤ a 2 ′ ≤ … a n ′ a'_1 \le a'_2 \le \dots a'_n a1a2an

算法时间复杂度:

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

分析的种类

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

算法时间分析

取决于电脑:

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

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

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

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

插入排序

插入排序介绍


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

插入算法复杂度分析

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

归并排序

归并排序介绍

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

归并算法复杂度分析

在这里插入图片描述
在这里插入图片描述
T ( n ) = 2 T ( n 2 ) + c n T(n) = 2T(\frac{n}{2}) + cn T(n)=2T(2n)+cn,利用迭代的思想。
在这里插入图片描述
Θ ( n l g n ) Θ(n lg n) Θ(nlgn)在渐进情况下小于 Θ ( n 2 ) Θ(n^2) Θ(n2),因此归并排序优于插入排序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值