算法分析与设计-蛮力法
- 蛮力法(穷举法或枚举法)
蛮力法是一种最简单和直接的解决问题的方法,往往是低效的,但我们不应该忽略它的地位
1)它可以解决广阔领域的各种问题
2)在规模允许时,多少可以产生一些实用的算法
3)往往可以以蛮力法为准绳,来衡量高效的算法,或者找不到其他算法时,先设计蛮力算法,再做改进
蛮力法所依赖的基本技术是遍历(也叫扫描)即采用一定的策略依次处理待求解问题的所有元素,从而找出问题的解。
- 查找问题中的蛮力法
1.顺序查找
【问题】 顺序查找是指在查找集合中依次查找值为k的元素,若查找成功,则给出该元素在查找集合中的位置;若查找失败,则给出失败信息
2.串匹配问题
【问题】 给定两个字符串S和T,在主串S中查找子串T的过程称为串匹配(也叫模式匹配),T称为模式。
在文本处理系统、操作系统、编译系统、数据库系统以及Internet信息检索系统中,串匹配是使用最频繁的操作。
串匹配问题具有下面两个明显的特征:
1)问题的输入规模很大,常常需要在大量信息中进行匹配,因此,算法的一次执行时间不容忽视;
2)匹配操作经常被调用,执行频率高,因此,算法改进所得到的效益因积累往往比表面上看起来要大得多。
- 排序问题中的蛮力法
1.选择排序
【问题】 应用选择排序方法对一个记录序列进行升序排列。选择排序(selectionsort)的基本思想是:
第i趟排序在无序序列ri ~ rn中找到值最小的记录,并和第i个记录交换作为有序序列的第i个记录
2.冒泡排序
【问题】 应用冒泡排序方法对一个记录序列进行升序排列。冒泡排序(bubble sort)的基本思想是:
两两比较相邻记录,如果反序则交换,直到没有反序的记录为止。
- 组合问题中的蛮力法
1.0/1背包问题
【问题】给定n个重量为{ω1,ω2,...ωn}、价值为{ν1,ν2...νn}的物品和一个容量为C的背包,0/1背包问题是
求这些物品中的一个最有价值的子集,并且要能够装进背包中。
2.任务分配问题
【问题】假设有n个任务需要分配给n个人执行,每个任务只分配给一个人,每个人只执行一个任务,且第i个
人执行第j个任务的成本是Cij(1<=i,j<=n)任务分配问题要求找出总成本最小的分配方案。
- 图问题中的蛮力法
1.哈密顿回路问题
【问题】著名的爱尔兰数学家哈密顿提出的周游世界的问题。假设一个正十二面体的20个顶点代表20个城市,哈密顿回路
问题要求从一个城市出发,经过每个城市恰好一次,然后回到出发城市。图所示是一个正十二面体的展开图,按照图中的顶
点编号所构成的回路,就是哈密顿回路的一个解。
2.TSP问题
【问题】 TSP问题是指旅行家要旅行n个城市然后回到出发城市,要求各个城市经历且仅经历一次,并要求所走的路程最短。
- 几何问题中的蛮力法
1.最近对问题
【问题】 最近对问题要求在一个包含n个点的集合中找出距离最近的两个点。严格地讲,距离最近的点对可能多于一对,简单起见
只找出其中的一对即可。
2.凸包问题
先定义什么是凸包。
定义 : 对于平面上的一个点的有限集合,如果以集合中任意两点P和Q为端点的线段上的点都属于该集合,则称该集合为凸集合
定义 : 一个点集S的凸包是包含S的最小凸集合,其中,最小是指S的凸包一定是所有包含S的凸集合的子集
【问题】凸包问题是为平面上具有n个点的集合S构造最小凸多边形

浙公网安备 33010602011771号