重要算法类型
整理完《算法设计与分析基础》的章节笔记与习题后,考虑根据算法求解的问题领域做个整理。
重要算法类型
1.排序
稳定(原下标作为第二关键字),或维护每个元素所在的序号 作为第二排序关键字排序两次?
在位(不需要额外存储空间)
重复
最优最差效率
平均效率
2.查找
顺序
折半(要求有序,支持随机访问)
元素可变的情况——依赖于数据结构
支持增,删,改,高效查找(特定属性元素)的数据结构
3.字符串匹配问题
在正文中搜索模式
已搜索部分正文片段=模式的开头片段
4.图问题
可达性——连通性
最小生成树
两两最短路径
单节点最短路径
5.组合问题
6.几何问题
7.数值问题
元操作
排序,计数,
习题:
1.1
小于n的最大平方数
[0,n]二分查找
两个已排序可重复数组,选出所有相同元素
方法1
长数组作为正文,短数组作为模式,
找到对齐:模式与正文头部后移一项
放弃模式头部:正文头部大于模式头部:模式头部后移一项
终结条件:两者之一搜索至尾部
方法2
计数,根据技术结果得到新数组
最大比较次数:完全不匹配:正文长度
出现一次匹配:归结为模式去头部的匹配过程,所以不会超过正文长度
欧几里得算法速度与gcd(m,n),min(m,n)中间整数数量的关系
gcd正确性
欧几里得游戏:找出所有差的可能
所有的差满足最大公约数的倍数
扩展欧几里得算法:mx+ny=d d=gcd(m,n)
用两个互质的数构造出1
丢番图方程求解:ax+by=c,abc任意
n个硬币,依次按i的倍数翻转,i=1……n
最终正面数
所有因子的个数
因子的组合数
1.2
狼羊白菜过河
图(自动机)
过桥问题:4人1手电,最短时间
根据给定时间,排除部分情况
三角形面积公式
根号p(p-a)(p-b)(p-c) p为一半周长?
进制间转换:
以十进制为中转
幂乘关系进制按位处理
不断除以权重得到低位——高位
求解π
数组中最接近的两个数的差
排序(维护最小差值,存在0,返回)
每种排序中更明确的语义
1.3
对数组中每个元素,统计比他小的元素个数,排序
七桥问题:欧拉回路:遍历所有边,回到原点
哈密顿回路:遍历所有的点,回到原点?
图着色
图块:节点
相邻关系:节点间相邻
着色:节点指派有限数目颜色,保证相邻节点颜色不同
对称问题:使用最少颜色
判断线段存在交点
方法1
求两直线交点,判断是否落在两线段上
方法2
四点闭包,判断端点出现顺序是否交错
1.4
删除数组元素
数组要求有序:左到右依次覆写
无序:交换
维护数组长度
有序线性表查找
数组:二分
链表:遍历
不存在的元素(min max或max min)
链表缓存上次结果
邻接矩阵的信息
完全图
有圈(指向自身的节点)
孤立节点
自由数——有根树?
二叉树高度不等式
退化成线
完全二叉树
用数据结构实现优先队列
无序数组
有序数组
二叉查找树
变位词:相同组合,不同排列