如何分析算法的运行时间(以插入排序为例)

本文深入探讨了插入排序算法的运行时间分析,通过伪代码详细解释了在不同输入条件下的最佳和最坏情况时间复杂度。重点在于理解运行时间的增长率及如何简化表达。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一个算法在特定输入上的运行时间是指执行的基本操作或步数量。

简单来说就是执行每行(i)伪代码所需演的时间(c_{}i)。

接下来看下面这段伪代码

 

代码c_{5}代价次数
1for j = 2 to A.lengthc_{1}n
2key = A [ j ]c_{2}n-1
3//Insert A [ j ] into the sorted sequence A [ 1 . . j - 1 ]0n-1
4i = j - 2c_{4}n-1
5while  i > 0 and A [ i ] > keyc_{5}\sum_{j=2}^{n}t_{j}
6A [ i + 1 ] = A [ i ]c_{6}\sum_{j=2}^{n}t_{j}-1
7i = i - 1c_{7}\sum_{j=2}^{n}t_{j}-1
8A[i+1] = keyc_{8}n-1

即运行时间为T(n) =c_{1}n+c_{2}(n-1)+c_{4}(n-1)+c_{5}\sum_{j=2}^{n}t_{j}+c_{6}\sum_{j=2}^{n}(t_{j}-1)+c_{7}\sum_{j=2}^{n}(t_{j}-1)+c_{8}(n-1)

若输入数组已经排好序,则出现最佳情况T\left ( n \right )= c_{1}(n)+c_{2}(n-1)+c_{4}(n-1)+c_{5}(n-1)+c_{8}(n-1) = (c_{1}+c_{2}+c_{4}+c_{5}+c_{8})n-(c_{2}+c_{4}+c_{5}+c_{8})

                                        该运行时间表示为an+b

若输入数组已反向排序,则导致最坏情况。此时

                                 \sum_{j=2}^{n}(t_{j}) = \frac{n(n+1)}{2}-1             \sum_{j=2}^{n}(t_{j}-1) = \frac{n(n-1)}{2}

              T(n) = (\frac{C_{5}}{2}+\frac{C_{6}}{2}+\frac{C_{7}}{2})n^{2}+(C_{1}+C_{2}+C_{4}+\frac{C_{5}}{2}-\frac{C_{6}}{2}-\frac{C_{7}}{2}+C_{8})-(C_{2}+C_{4}+C_{5}+C_{8})

         该运行时间表示为an^{2}+bn+c

接着我们做一些更简化的抽象,我们真正感兴趣的是运行时间的增长率或增长量级。所以我们只考虑公式中最重要的项(例:an^{2}),因为当n很大时,低级项相对来说不那么重要。

所以我们记插入排序的最坏运行时间O(n^{2}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值