跳转至

算法复习

考试范围

Cp:1-8

考试题型

  1. 填空:10*2'=20'
  2. 选择:5*2'=10'(1、2包括基本概念、重要算法求解过程、复杂性)
  3. 算法分析:5*10'=25'(算法过程:具体求解过程,详情参考课后题答疑ppt)
  4. 算法设计:2*10'=20'(算法设计->手写代码)

Chapter 1

算法概念、重要特性(5个) 特性:输入、输出、有穷性、确定性、可行性 算法描述方法(4个) 自然语言、流程图、程序设计语言、伪代码 题型:选择、填空

Chapter 2

时间复杂性分析(渐进分析) 1. 非递归:输入规模、基本语句、求累加和 2. 递归:扩展递归(概念+推导)->练题 题型:选择、分析

Chapter 3 暴力

串匹配:(BF、KMP 手写流程

BF:逐个比对 KMP:next数组,根据next数组进行移动

选择排序、冒泡排序

选择:选每次选最值放入当前位置 冒泡:相邻比较,大数沉淀,小数上浮

0/1背包

背包:向量枚举

最近对、凸包(概念)

最近对:枚举两点求距离 凸包:枚举两点成线,判断其他各点与线的相互关系 题型:填空、分析、设计

Chapter 4 分治

基本概念:设计思想(填空) 1. 划分: 2. 求解子问题: 3. 合并: 递归思想和编程(填空、选择、分析) 基本原理和代码:

快速排序

q_sort(int a[],int l,int r){
    if(r>=l)return ;
    int i=l-1,j=r+1,x=q[l+r>>1];
    while(i<j){
        do i++;while(q[i]<x);
        do j--;while(q[j]>x);
    }
    q_sort(q,l,j);
    q_sort(q,j+1,r);
}

最大子段和

思路 : 1. 划分: 从中分开\((a_1->a_{n/2})\)\((a_{n/2+1}->a_n)\)得到三个Max 1. left 前半部分的max 2. mid \(a_1->a_n\)跨越两部分的Max 3. right 后半部分的Max 2. 求解子问题:分别求三组 1. 左右部分通过递归求解 2. 中间部分从n/2开始分别向两边延伸,求左边的s1,右边的s2 二者之和即为所求 3. 合并:取三者的最大值为答案

\(max\{left_{max},mid_{max},right_{max}\}\); 算法分析: n=1时,T(n)=1 n>1时,T(n)=2T(n/2)+n(T(n/2)为左右递归求解,n为从中间向两边遍历)

最近对、棋盘覆盖

题型:填空、选择、分析、设计

Chapter 5 减治(分治变种)

基本概念(设计思想、求解\(a^n\))(填空、选择)

二叉查找树、选择问题

插入排序、堆排序

题型: 填空、选择

Chapter 6 DP

基本概念(多阶段决策、最优性原理、设计思想)(原理+代码+手写流程)

最长递增子序列问题

多段图最短路径问题

最长公共子序列问题

0/1背包问题

题型:填空、选择、分析、设计

Chapter 7 贪心

基本概念(设计思想)(原理+代码+手写流程)

埃及分数问题

最小生成树问题

单源最短路径问题Dijkstra

(连续)背包问题

贪心策略:按照单位重量价格进行排序

多机调度问题

贪心策略:按照结束时间进行排序 题型:填空、选择、分析、设计

Chapter 8 回溯

基本概念(解空间树、设计思想)(原理+代码+手写流程) 考点分析:解空间树的画法

图着色问题

八皇后问题

题型:填空、选择、分析、设计