西电算法分析与设计第二次上机笔记

算法分析与设计第二次上机笔记

1.前两次上机的真题说明

1.1 排序算法的时间复杂度

(1)归并排序最好,平均,最坏情况下的时间复杂度均为: n l g ( n ) nlg(n) nlg(n)

(2)归并排序的时间复杂度是 O ( 1 ) O(1) O(1)----------------------------------------------------------------------------------------------(×)

(3)**优先队列的extract-maximum()**的时间复杂度是 O ( l g ( n ) ) O(lg(n)) O(lg(n))

(4)堆排序在==最好情况下的时间复杂度==是 n l g ( n ) nlg(n) nlg(n),平均 n l g ( n ) nlg(n) nlg(n),最坏情况下的时间复杂度为 n l g ( n ) nlg(n) nlg(n)

(5)堆排序的空间复杂度 O ( 1 ) O(1) O(1)------------------------------------------------------------------------------------------------- (√)

(6)写出堆排序的适用条件(写出两点即可)

  • n n n比较大的情况
  • 部分排序:前k位
  • 实时应用 realtime application

(7)确保一个堆的是大顶堆的算法是maxheapify(),其时间复杂度是:O(lg(n))

(8)构建一个堆的算法build_heap(),其时间复杂度是:O(nlg(n)) 错,应该是 O ( n ) O(n) O(n)

(9)快排在最坏 n 2 n^2 n2,最好 n l g ( n ) nlg(n) nlg(n)平均情况下 l g ( n ) lg(n) lg(n)的时间复杂度


1.2 排序算法的稳定性

五个排序算法:归并排序,堆排序,快排,插入排序,计数排序。

答案分别是稳定,不稳定,不稳定,稳定,稳定

【查考题型】题目给出若干个排序算法,问时间复杂度,空间复杂度,稳定性和适用条件


1.3 快排比较次数

(1)如果待排序的n个元素有相同的值,那么快排总共需要比较多少次

  • 判断题
  • 简答题

答案: C n 2 = n ( n − 1 ) 2 C_n^2 = \frac{n(n-1)}{2} Cn2=2n(n1)

(2)快排最坏情况列举两个实例

  • 所有元素相等
  • 序列有序(已经排好序了)

动态规划【重点复习】比例大,甚至占50%,最近提高分治法的比例

1.4 矩阵链乘【DP计算题重点】

(1)计算矩阵链乘的加括号方式

Matrix-chain product. The following are some instances.【建议矩阵链乘最后做,计算量很大】

(a) < 3, 5, 2, 1,10>

((A1(A2A3))A4)

b) <2, 7, 3, 6, 10>

(((A1A2)A3)A4)

© <10, 3, 15, 12, 7, 2>

(A1(A2(A3(A4A5))))

(d) <7, 2, 4, 15, 20, 5>

(A1(((A2A3)A4)A5))


用时间长的大题:(不一定是最后一道题)

  • DP类大题,如矩阵连乘
  • 递推树求解递推式,代换法证明(要不要减去低阶项?,只有一年不用减去低阶项)
  • 算法设计题(答题技巧下次讲)
(2)写出矩阵链乘的递推式

M [ i , j ] = { 0 i f   i = j m i n { M [ i , k ] + m [ k + 1 , j ] + p i − 1 p k p j } M[i,j] =\begin{cases}0\qquad if\ i=j\\ min\{M[i,k]+m[k+1,j]+p_{i-1}p_kp_j\}\end{cases} M[i,j]={0if i=jmin{M[i,k]+m[k+1,j]+pi1pkpj}

所有的递推式都要会默写。二三次上机报告中递推式需要写出。

(3)矩阵链乘的开销与时间复杂度

被完全加上括号的开销等于计算矩阵 a i a i + 1 . . . a k + a k + 1 . . . a j a_ia_{i+1}...a_{k} + a_{k+1}...a_{j} aiai+1...ak+ak+1...aj之和。--------------------------------------------------(×)

矩阵链乘的核心算法的时间复杂度 matrix_chain_order O ( n 3 ) O(n^3) O(n3)

思考题:

矩阵链乘一共有多少个子问题,每个子问题有多少种选择?

m [ i ] [ j ] m[i][j] m[i][j]数组被填的个数

i − j i-j ij

(4)辅助数组

m [ i , j ] m[i,j] m[i,j] s [ i , j ] s[i,j] s[i,j]的作用是什么?存储空间有多大?

  • m [ i , j ] m[i,j] m[i,j]表示计算 a i . . . a j a_i...a_j ai...aj需要的最小标量乘法次数,给出了子问题的最优解值存储空间 Θ ( n 2 ) \Theta(n^2) Θ(n2)
  • s [ i , j ] s[i,j] s[i,j]记录 a i . . . a j a_i...a_j ai...aj最优的分裂位置,即k值,存储空间是 Θ ( n 2 ) \Theta(n^2) Θ(n2)

1.5 LCS问题

(1)默写LCS的递推表达式

c [ i , j ] = { c [ i − 1 , j − 1 ] + 1 i f   i , j > 0   a n d   x i = y j m a x ( c [ i − 1 , j ] , c [ i , j − 1 ] ) o t h e r w i s e c[i,j] = \begin{cases}c[i-1,j-1]+1\qquad\qquad\qquad if \ i,j>0\ and \ x_i=y_j\\ max(c[i-1,j],c[i,j-1])\qquad\qquad\qquad otherwise\end{cases} c[i,j]={c[i1,j1]+1if i,j>0 and xi=yjmax(c[i1,j],c[i,j1])otherwise

(2)时间复杂度
  • 若两个序列的长度分别是m和n,那么算法LCS的主算法时间复杂度是多少?

O ( m n ) O(mn) O(mn)

  • 子问题的个数是多少?

O ( m n ) O(mn) O(mn)

  • 输出LCS的时间复杂度
    O ( m + n ) O(m+n) O(m+n)

1.6 maxSum

(1)默写maxSum的递推表达式

b [ i ] = { a [ i ]   b [ i − 1 ] < 0 b [ i − 1 ] + a [ i ] b [ i − 1 ] > = 0 b[i] = \begin{cases}a[i]\qquad\qquad\qquad\ b[i-1]<0\\ b[i-1] + a[i] \qquad b[i-1]>=0\end{cases} b[i]={a[i] b[i1]<0b[i1]+a[i]b[i1]>=0

或者写成:
b [ j ] = m a x ( b [ j − 1 ] + a [ j ] , a [ j ] ) 1 ≤ j ≤ n b[j]= max(b[j-1]+a[j], a[j])\qquad 1\leq j\leq n b[j]=max(b[j1]+a[j],a[j])1jn

1.7 算法设计题

本次上机的最短路径题,用动态规划题设计
Dijkstra是贪心,不是动态规划 -----------------------> 转换成装配线问题

note:2022年卷子的最后一题也是这么干的,转换成三个类似装配线的方程。当时大部分同学用的都是暴搜,标准答案应该是用的这个思路

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Blanche117

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值