鱼C论坛

 找回密码
 立即注册
查看: 3882|回复: 0

[争议讨论] 算法设计与分析——蛮力法

[复制链接]
发表于 2011-12-3 15:29:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

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

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

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

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

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



想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 06:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表