蛮力法
基于问题的描述和所涉及的概念、定义直接求解,逐一列举并处理问题所涉及的所有情形,而后得到问题的答案。
优点:逻辑清晰,简单,易于实现
缺点:效率不高
适用于规模比较小的问题
基本技术:扫描技术和枚举方法
1.排序问题
(1)选择排序
(2)冒泡排序
2.查找问题
顺序查找
4.几何问题
(1)最近对问题
(2)凸包问题
凸包:由平面上n个点组成的集合,其凸包就是包含这些点的最小凸多边形。
凸包的性质:①如果点集中两个点的连线属于凸多边形的边,当且仅当点集中的其余的点都在两个点连线的同一侧。
②凸包中的顶点是点集中的点。
基于问题的描述和所涉及的概念、定义直接求解,逐一列举并处理问题所涉及的所有情形,而后得到问题的答案。
优点:逻辑清晰,简单,易于实现
缺点:效率不高
适用于规模比较小的问题
基本技术:扫描技术和枚举方法
1.排序问题
(1)选择排序
(2)冒泡排序
2.查找问题
顺序查找
3.字符串匹配问题
//蛮力法求解字符串匹配问题
//输入:文本W[0..n-1],模式M[0..m-1],二者均为字符数组
int BruteforceIndex(W[0..n-1], M[0..m-1])
{
for(int i=0; i<=n-m; i++)
{
int j=0;
while(j<m && (W[i+j]==M[j]))
{
j++;
if(j==m) return i; //查找成功
}
}
return -1; //查找失败
}
4.几何问题
(1)最近对问题
问题描述:求平面点集n个点中距离最近的两个点
/*暴力法求解最近点对问题
输入:n个点,P[i,0]存第i个点的行坐标,P[i,1]存第i个点的纵坐标
输出:最近两个点的下标ind1和ind2
*/
double ClosestPoints(P[n][2],int *ind1,int *ind2)
{
wind = +∞; //初值赋成最大值
double dis = 0;
*ind1 = 0, *ind2 = 0;
for(int i=0; i<=n-2; i++)
for(int j=i+1; j<=n-1; j++)
{
dis = (P[j][0]-P[i][0])*(P[j][0]-P[i][0]) + (P[j][1]-P[i][1])*(P[j][1]-P[i][1]);
id(dis<wind)
{
wind = dis;
*ind1 = i;
*ind2 = j;
}
}
return wind;
}
(2)凸包问题
凸包:由平面上n个点组成的集合,其凸包就是包含这些点的最小凸多边形。
凸包的性质:①如果点集中两个点的连线属于凸多边形的边,当且仅当点集中的其余的点都在两个点连线的同一侧。
②凸包中的顶点是点集中的点。