您的位置:首页 > 其它

算法复习1——暴力法

2016-06-15 23:46 246 查看
蛮力法

基于问题的描述和所涉及的概念、定义直接求解,逐一列举并处理问题所涉及的所有情形,而后得到问题的答案。

优点:逻辑清晰,简单,易于实现

缺点:效率不高

适用于规模比较小的问题

基本技术:扫描技术和枚举方法

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
[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个点组成的集合,其凸包就是包含这些点的最小凸多边形。

凸包的性质:①如果点集中两个点的连线属于凸多边形的边,当且仅当点集中的其余的点都在两个点连线的同一侧。
   ②凸包中的顶点是点集中的点。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息