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

文章目录

  • 一、蛮力算法简介
  • 二、蛮力--枚举法
    • 题目及运行
  • 三、总结


前言

算法语言--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;
            }
        }
    }
}

 


三、总结

算法说明:蛮力算法不需要思考,只用按照题目的要求定位条件和范围即可,算法虽然简单易懂,但一旦遇到较大的数据时,运行的效率会非常低,可能还会跑不出来。

由此我们要注意:在对运行效率要求较高的大规模的数据处理问题时,必须多动脑筋找出效率较高的数学模型及其对应的算法。

 

 

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值