参考 : 算法设计与分析 第三章 蛮力法
接下来的每章中,我们专注于一种特定的算法设计策略。
蛮力法是一种最简单和直接的解决问题的办法,往往是低效的,但我们不应该忽略它的地位,
1)它可以解决广阔领域的各种问题
2)在规模允许时,多少可以产生一些实用的算法
3)往往可以以蛮力法为准绳,来衡量高效的算法,或者找不到其他算法时,先设计蛮力算法,再做改进
好了,很简单,直接切入正题。
3.1 选择排序和冒泡排序
虽然很简单,也写了很多次了,复习一下,提请想一想:
1) 它们是稳定的排序方法吗吗?不稳定,稳定
2)改进:如果对列表比较一遍后发现没有交换元素的位置,那么此时列表已经有序,可以退出了
3.2 顺序查找和蛮力字符串匹配
顺序查找不用说吧
蛮力字符串匹配更不用说吧,kmp都写过了
3.3 最近点对和凸包问题的蛮力算法
由于在第四章中我们将用分治算法来解最近点对问题和凸包问题,这里主要明确一些概念吧,知道什么是最近点对,凸包问题。
最近点对就没有什么说的了,说说凸包:
蛮力解凸包问题就是一条条的线段判断,若其他所有顶点都在这条线段的同一侧,则这条线段的2个端点是凸包的顶点,怎么判断是一个解析几何的数学问题,不说了。
凸包就不写了,蛮力的,没有什么技术含量,就写了个最近点对。在分治算法中再来详细分析怎样设计更加精妙的方法。蛮力法的最近点对代码:
package Section3;
/* 第三章蛮力法 3.3 最近点对(蛮力) */
public class NearestPoint {
/**
* @param args
*/
public static