算法分析与设计-蛮力法

  • 蛮力法(穷举法或枚举法)

蛮力法是一种最简单和直接的解决问题的方法,往往是低效的,但我们不应该忽略它的地位

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构造最小凸多边形

 

posted @ 2023-11-13 15:41  枯荷也笙箫  阅读(281)  评论(0)    收藏  举报