p62273470 发表于 2011-12-3 15:29:54

算法设计与分析——蛮力法

本帖最后由 p62273470 于 2011-12-3 15:29 编辑

(以下纯属个人观点)
蛮力法是计算机算法中的一种,是一种简单而直接的解决问题的方法!顾名思义,是一种比较野蛮鲁莽,缺少技巧性,花费时间多,但语法设计比较简单的算法,下面先举个例子,有个大体概念!
例子:把(58,8,0,7,100,4,9,80,3,5)十个数字从小到大重新排列!

最原始的蛮力法会这样做:
1,把第一个数字58和其他的数字比较,如果第一个数字58不是最小的,就拿下一个数字8和其他的比较,直到找出最小的为止。
2,再用一样方法找出第二小的,不断循环就排列出来了!
稍微改进点蛮力法(也就是选择排序):
1,把第一个数和第二个数比较,取其中比较小的,和第三个数比较,又去其中比较小的,和第四个比较,不断循环,找出最小的一个,然后把最小的那个和第一个数的位置交换。
2,接着以一样的方法比较剩下的数字,直到完毕!类伪代码如下。
void SelectSort(int r[],int n)
/*r[]是存放待排序的数字的数组,n是数字的个数*/
{
for(int i=1; i<n; i++)
{
index = i; /*变量index用来保存最
小数的下标*/
for( int j=i+i; j<n; j++)
if(r<r)index = j;
/*满足条件,r和r就交换*/
if(index!=i)r←→r;
}
}再举个通俗点的例子,计算1+2+……+100;蛮力法会一个一个的加起来,1+2=3,3+3=6,6+4=10,~~~~~~~~~~~这样计算下去!聪明点的做法是把(1+100)*50;

蛮力法的特点:
1,逻辑思维简单,语法设计简单;
2,实际执行操作繁杂;

优点:蛮力法适合用在问题规模较小的时候。程序设计好后,实际操作是交给计算机运行的,计算机运行很快,一般规模较小的问题计算机很快就能计算出来,所以当问题规模较小时,用蛮力法既简单又不慢;

基本思想:
蛮力法所依赖的技术是扫描技术,就是一个一个来!抽象的讲,计算机算法中要解决的问题总涉及很多个对象,这些对象总存在着错综复杂的关系,蛮力法就是把每一个对象都独立出来再一个一个处理!这样就忽略掉这些对象中存在的关系,忽略掉这些关系中存在的规律,所以蛮力法的逻辑思维很简单!



页: [1]
查看完整版本: 算法设计与分析——蛮力法