第3章:蛮力法——《算法笔记

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壶问题

容积,初始水量

深搜广搜求解

三元组,相同元组,不再考虑

原文地址:https://www.cnblogs.com/qmcj/p/9096395.html