蛮力法
蛮力法是一种简单直接地解决问题的方法,常常直接基于问题的描述和所设计的概念定义。
1. 选择排序和冒泡排序
SelectionSort(A[0…n-1]) C(n) = n(n-1)/2 算法效率为平方级别,但是键的交换次数仅为n-1次。
BubbleSort(A[0…n-1]) 最坏情况是键的交换次数和比较次数都为平方级别,不如前者。
应用蛮力法得出的第一个算法,可以通过适度的努力来提升它的性能。
2. 顺序查找和蛮力字符串匹配
SequentialSearch(A[0…n],K)和BruteForceStringMatch(T[0..n-1],P[0..m-1])的效率都可以近似属于线形级别。
3. 最近对和凸包问题的蛮力算法
最近对问题是要求找出一个包含n个点的集合中距离最近的两个点,在二维空间中,蛮力法的求解效率为平方级别。
凸包问题是为一个n个点的集合构造凸包的问题;一个点集合S的凸包是包含S的最小凸集合。 用蛮力法求解的效率为N的立方级别。
4. 穷举查找
a. 旅行商问题:要求找出一条n个给定城市间的最短路径,使我们在回到出发城市以前,每个城市都只访问一次。
b. 背包问题:给定n个重量为Wi,价值为Vi物品和一个承重为W的背包,求这些物品中一个最有价值的子集,并且要能够装到背包中。
旅行商问题和背包问题都属于“NP困难问题”,用蛮力法求解效率超低。
分配问题:有n个任务需要分配给n个人执行,成本不同,求总成本最小的分配方案。 (蛮力法求解效率为n!级别, 可用匈牙利方法求)