1.选择排序与冒泡排序
选择排序 :平方复杂性(源自键比较),但只需要n次键交换
语义:依次选择最小的元素
稳定:Y
在位:Y
最佳:n^2
最差:n^2
不同情况下,不影响键比较的次数,影响键交换的次数
冒泡排序: 平方复杂性,键交换次数不定
语义:比较相邻元素,将最大元素交换至末尾(维护末尾位置)
稳定:Y
在位:Y
最佳:提前终止n
最差: n^2
冒泡排序的键交换次数多于选择排序
但是最佳情况下第一次没冒泡直接结束
选择排序没有得到数组的整体信息
2.顺序查找,字符串匹配
顺序查找:在序列有序情况下可提前退出(查找失败)
字符串匹配:在正文中查找模式开头,然后依次检查模式的剩余部分。
最坏情况mn(m=leng(正文),n=leng(模式))。
在剩余正文长度不足时提前退出
3.最近对问题,凸包问题
最近对:遍历计算所有两点距离
凸包:最小凸集合。选两个点,剩余点都在两点所成直线同侧,选择该两点
4.穷举排列组合
旅行商问题:列出所有可能回路(点排列)
背包问题:列出所有可能组合,判断是否在问题范畴内
分配问题
5.深搜,广搜
访问一个节点,遍历其子节点
深搜:遍历单个相邻节点,回溯
广搜:先遍历相邻节点,然后遍历外层
深搜查找树,广搜查找树
访问边与回溯边
深搜:用栈跟踪,维护已访问节点,未访问节点
检查连通性:可访问到
无环性:重复被访问
图的关节点:移除后不连通
广搜:使用队列跟踪
树向边:通向未访问,
(广搜)交叉边:通向已访问,或兄弟节点 ?
(深搜)回边:父节点
维护边,实现遍历树?
深搜广搜效率
深搜:对于邻接矩阵,复杂度V^2 邻接链表V+E
深搜树:可能生成顶点的多个排序 广搜:多个
未完全规定顶点访问的优先级
习题:
3.1
n堆,每堆n个假币,
假币真币重量已知/未知
选出假币
称重盘/天平
二分,三分
排序算法提前终止条件
预处理:首先遍历一遍(冒泡)
正反硬币排序,交换的次数
绝对位置/相对位置
构造算法最差、最优情况
字符串匹配,比较的顺序?
同方向,交叉方向
最近对问题非蛮力求解
一维分布实数,选择一个点,剩余点与之距离和最小
最近对问题的蛮力求解不依赖于距离衡量方式?
曼哈顿距离?
距离公理:
非负
对称
三角
字符串距离:汉明距离
相应位置,字符不同的个数
是否满足距离公理
最近字符串
奇数派游戏
二维空间
投向最近邻居
至少有一个人不会被击中
点数=边数
k维空间最近对
平面点集合,线性时间选择凸包的两个极点
min(x,y) max(x,y),x为第一关键字,y为第二关键字
邻接矩阵,邻接表
求解欧拉回路,哈密顿回路
分配问题
划分问题:两个和相同的集合
预处理:求和?
生成所有组合
完备k子图问题
8皇后问题
幻方问题
行,列,对角线 和相同
字母数字
字母映射为数字,使得表达式成立
深搜查找树
广搜查找树
只是一次遍历的结果
稀疏图搜索效率
稀疏图E=O(V)(带入复杂度公式即可)
广搜/深搜?
矩阵/表?
给定顶点数与边数的图(连通图?)
构造广搜树,深搜树
树的数目是否一致?
树向边与回边数目是否一致?
证明bfs树交叉边
连接同层,或相邻层节点
图回路
广搜查找,深搜查找效率?
与回路长度相关?
区分已访问节点:数组
与回路上的点:需要维护当前路径
当前路径性质:叶到根,栈中的点
从一个点出发,搜索不到自身(不在回路中),将点从集合中去除
继续
求连通分量
bfs,dfs
二分图检测
bfs,dfs
连通分量的顶点?
图回路
输出
迷宫求解
3壶问题
容积,初始水量
深搜广搜求解
三元组,相同元组,不再考虑