算法复习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个点组成的集合,其凸包就是包含这些点的最小凸多边形。
凸包的性质:①如果点集中两个点的连线属于凸多边形的边,当且仅当点集中的其余的点都在两个点连线的同一侧。
②凸包中的顶点是点集中的点。
基于问题的描述和所涉及的概念、定义直接求解,逐一列举并处理问题所涉及的所有情形,而后得到问题的答案。
优点:逻辑清晰,简单,易于实现
缺点:效率不高
适用于规模比较小的问题
基本技术:扫描技术和枚举方法
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个点组成的集合,其凸包就是包含这些点的最小凸多边形。
凸包的性质:①如果点集中两个点的连线属于凸多边形的边,当且仅当点集中的其余的点都在两个点连线的同一侧。
②凸包中的顶点是点集中的点。
相关文章推荐
- 书评:《算法之美( Algorithms to Live By )》
- 动易2006序列号破解算法公布
- C#递归算法之分而治之策略
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- 经典排序算法之冒泡排序(Bubble sort)代码
- c语言实现的带通配符匹配算法
- 浅析STL中的常用算法
- 算法之排列算法与组合算法详解
- C++实现一维向量旋转算法
- Ruby实现的合并排序算法
- C#折半插入排序算法实现方法
- 基于C++实现的各种内部排序算法汇总
- C++线性时间的排序算法分析