文章目录
- 一、蛮力算法简介
- 二、蛮力--枚举法
- 题目及运行
- 三、总结
前言
算法语言--Java语言
一、蛮力算法简介
蛮力法是基于计算机运算速度快这一特性,在解决问题时采取的一种”懒惰“策略。这种策略不经过(或者说是经过很少的思考),把问题的所有情况或者所有过程交给计算机去一一尝试,从中找出问题的解。蛮力策略的应用很广,具体表现形式各异。
数据结构课程中学习的一些算法:选择排序,冒泡排序,插入排序,顺序查找等,都是蛮力策略的具体应用!
二、蛮力--枚举法
1、枚举法简介
枚举法是蛮力策略的一种表现形式,也是一种使用非常普遍的思维方式,它是根据问题中的条件将可能的情况一一列举出来,逐一尝试中找出满足问题条件的解。但有时一一列举出的情况数目很大,如果超出了所能忍受的范围,则需要进一步考虑,排除一些明显不合理的情况,尽可能减少问题可能解的枚举数目。
2-1枚举实例
百钱百鸡问题:一百块钱去买一百只鸡,公鸡一只值5块钱,母鸡一只值3块钱,小鸡1块钱可以买三只,请问100块可以买公鸡,母鸡,小鸡各多少只?
方法:找出枚举范围,找出约束条件
尝试范围:由题意给定共100块钱要买鸡,若全买公鸡最多买100/5=20只,显然x的范围在1~20之间;同理,y的取值范围在1~33之间,z的范围在1~100之间!
约束条件:鸡要有100只,钱要有100块
x+y+z=100且5x+3y+z/3=100;
2-1代码实现
package Javaclass;
import java.util.*;
public class Practice {
public static void main(String[] args){
for(int x=1;x<=20;x++){
for(int y=1;y<=33;y++){
int z = 100-x-y;
if(5*x+3*y+z/3==100&&z%3==0){
System.out.println("公鸡:"+x+"\t母鸡:"+y+"\t小鸡:"+z);
}
}
}
}
}
2-2枚举实例
求3个数的最小公倍数:最小数刚好能整除三个数。例如:13和7的最小公倍数是91。
方法: 暴力求解,从2开始往上累加,直到找出即可
尝试范围:1、2,3,4.....
约束条件:找到最小就停止
2-2代码实现
package Javaclass;
import java.util.*;
public class Practice {
public static void main(String[] args){
Scanner in = new Scanner(System.in);
int a = in.nextInt();
int b = in.nextInt();
int c = in.nextInt();
for(int i=1;i<=a*b*c;i++){
if(i%a==0&&i%b==0&&i%c==0){
System.out.println("最小公倍数为:"+i);
break;
}
}
}
}
三、总结
算法说明:蛮力算法不需要思考,只用按照题目的要求定位条件和范围即可,算法虽然简单易懂,但一旦遇到较大的数据时,运行的效率会非常低,可能还会跑不出来。
由此我们要注意:在对运行效率要求较高的大规模的数据处理问题时,必须多动脑筋找出效率较高的数学模型及其对应的算法。