1、什么是穷举?

穷举算法是最简单的一种算法,其依赖于计算机的强大计算能力,来穷尽每一种可能的情况,从而达到求解问题的目的。

穷举算法效率并不高,但适用于一些没有明显规律可循的场景。基本思想是从所有可能的情况中搜索正确的答案,在使用穷举算法时,需要明确问题的答案的范围,这样才可以在指定范围内搜索答案。指定范围之后,就可以使用循环语句和条件判断语句逐步验证候选答案的正确性,从而得到需要的正确答案。其执行步骤如下:

(1). 对于一种可能的情况,计算其结果;

(2). 判断结果是否满足要求,如果不满足则执行第(1)步来搜索下一个可能的情况;如果满足要求,则表示寻找到一个正确的答案。

2、穷举算法应用

鸡兔同笼

鸡兔同笼问题最早记载于1500年前的《孙子算经》,是我国古代一个非常有名的问题,原文如下:今有鸡兔同笼,上有三十五头,下有九十四足,问鸡兔各几何?

翻译过来的意思是在一个笼子里关着若干只鸡和若干只兔,从上面数共有35个头;从下面数共有94只脚。问笼中鸡和兔的数量各是多少?题目要计算鸡的数量和兔的数量,通过分析可以知鸡的数量应该为0~35之间的数。

基于该思路,可以使用穷举法来逐个判断是否符合条件,从而得到答案。暴力穷举.....,Java代码实现如下:

public class Test {/** 鸡的数量、兔子数量 */public static int chicken, rabbit;/** 穷举.... */public static boolean getAmount(int header, int foot) {boolean flag = false;int j; // j 兔子数量for (int i = 0; i < header; i++) { // i 鸡的数量j = header - i;if (foot == (2 * i + 4 * j)) {chicken = i;rabbit = j;flag = true;}}return flag;}/** 测试结果:有鸡23只, 有兔12个 */public static void main(String[] args) {// 上有三十五头,下有九十四足,问鸡兔各几何?if (getAmount(35, 94)) {System.out.println("有鸡" + chicken + "只, 有兔" + rabbit + "个");}}
}

当然,鸡兔同笼问题,最简单的是使用解方程的思路了,设置x,y分别代表鸡和兔,foot,header分别代表足和头,那么可以得到一个一元二次方程组:x + y = header; 2*x + 4*y = foot; 消元求解可得:y = (foot - 2*header)/2 ; x = header-y;  这样也解出了鸡兔同笼的问题。

百钱买百鸡问题

百钱买百鸡是一个非常经典的不定方程问题,最早源于我国古代的《算经》,这是古代著名数学家张丘建首次提出的。百钱买百鸡问题的原文如下:鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问翁、母、雏各几何?

翻译过来的意思是公鸡5文钱1只,母鸡3文钱1只,小鸡3只1文钱,如果用100文钱买100只鸡,那么公鸡、母鸡和小鸡各应该买多少只呢?使用解方程的思路的话,该问题中,有三个变量:公鸡数量、母鸡数量和小鸡数量,分别设为x、y和z。这三者应该满足如下关系:x+y+z=100; 5x+3y+z/3=100; 这里有三个变量,两个方程,因此是一个不定方程问题,这将导致求解的结果不只一个。

当然,这里使用穷举法来逐个判断是否符合条件,从而得到答案,很暴力很粗鲁,Java代码实现如下:

public class Test {/*** 打印结果:*  有鸡翁0只, 有鸡母25只, 有鸡雏75只*  有鸡翁4只, 有鸡母18只, 有鸡雏78只*  有鸡翁8只, 有鸡母11只, 有鸡雏81只*  有鸡翁12只, 有鸡母4只, 有鸡雏84只**/public static void main(String[] args) {getChickenAmount(100, 100);}/*** 鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问翁、母、雏各几何?*/public static void getChickenAmount(int money, int amount) {int k; // k 鸡雏for (int i = 0; i < amount; i++) { // i 鸡翁for (int j = 0; j < amount; j++) { // j 鸡母k = amount - i - j;if (k > 0 && (k % 3 == 0) && (5 * i + 3 * j + k / 3) == money) {System.out.println("有鸡翁" + i + "只, 有鸡母" + j + "只, 有鸡雏" + k + "只");}}}}
}

3、穷举的优缺点

穷举的优点就是直观,会粗鲁的列举出每一种情况,这也成为了其致命的缺点,会造成程序运行效率低,代码冗余等问题,一般不推荐使用。

参考书籍:《Java常用算法手册(第3版)》

【基本算法】穷举算法相关推荐

  1. 百钱百鸡php穷举法,PHP经典题:百钱百鸡问题(穷举算法)

    PHP经典题:百钱百鸡问题(穷举算法) 百钱百鸡问题: 已知:公鸡5元一只,母鸡3元一只,小鸡一元3只 现用100元钱买了100只鸡,问:公鸡母鸡小鸡各几只? --请考虑尽可能高效的方法 思路: 如果 ...

  2. 穷举算法——奶牛碑文(cow)

    - 穷举算法--奶牛碑文(cow) 题目描述 小伟暑假期间到大草原漫游,在一块石头上发现了一些有趣的碑文.碑文似乎是一个神秘古老的语言,只包括三个大写字母 C.O 和W. 尽管小伟看不懂,但是令他高兴 ...

  3. 【算法】最直接的算法——穷举法详解

    第三章 穷举法 一.基本概念 穷举法又称为枚举法或者蛮力法,是一种简单直接解决问题的方法,常常是基于问题的直接描述去编写程序,比如说求n的阶乘,那么就直接一个循环n次的for循环. 穷举法依赖的基本技 ...

  4. 简析穷举算法,及其简单应用

    简析穷举算法,及其简单应用 穷举概述 穷举法又称列举法,其基本思想是逐一列举问题所涉及的所有情况. 穷举法常用于解决"是否存在"或"有多少种可能"等问题. 应用 ...

  5. 3388=24及24点游戏的穷举算法

    偶尔看到一题:用3 3 8 8 四个数和加减乘除组合得出24,前提是用完这四个数,几年没好好思考了,偶算了半天没答案,就写了个穷举算法,呵呵,貌似结果只有一种啊,各位兄台还有其它答案么? packag ...

  6. java穷举密码_穷举算法和递推算法(Java)

    穷举算法 概念: 最简单算法,依赖计算机的强大计算能力穷尽每一种可能的情况.穷举算法效率不高,但是适合一些没有明显规律可循的场合. 思想: 在使用穷举算法时,需要明确问题答案的范围,这样才可能在指定范 ...

  7. 穷举算法(鸡兔同笼问题)

    穷举算法的基本思想就是从所有可能的情况中搜索正确的答案,其执行步骤如下: (1)对于一种可能的情况,计算其结果. (2)判断结果是否满足要求,如果不满足则进行执行第(1)步来搜索下一个可能的情况:如果 ...

  8. 子图同构算法——Ullmann算法(1)不包含refine procedure的简单穷举算法。

    摘要: 转载请注明来自stanlysheng--talk is cheap, show me your code.http://www.cnblogs.com/stanly/ .谢谢.此文我也在CSD ...

  9. JS if 水仙花数 游乐园门票计算 闰年 三元运算符 for循环 算法 穷举法 While 拔萝卜 等差数 随机数函数random 区间数 猜数字

         算法题 水仙花数  数学方法 字符串方法   游乐园门票计算  Switch   闰年 <body> <script>var month = Number(promp ...

  10. 农民过河算法可爱的学习----记录于高考报名后的怀旧emo时刻--穷举算法

    很多关卡在向孩子教学代码的同时,更是在潜移默化地训练孩子的编程思维. 在最开始的地牢地图中,孩子需要使用「While-True」循环语句,穿过一个又一个结构重复的迷宫. 在学习「While-True」 ...

最新文章

  1. 一些非常酷的GAN的应用
  2. python xpath语法-XPath语法和lxml模块(数据提取)
  3. ThinkPHP的访问模式分为四种模式
  4. MyBatis-动态SQL
  5. [WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platfor
  6. ACID中C与CAP定理中C的区别
  7. 使用ACDsee在一张纸上打印多张图片
  8. C#LeetCode刷题之#581-最短无序连续子数组( Shortest Unsorted Continuous Subarray)
  9. ./configure,make,make install的作用(转)
  10. 智能计算机的功能是什么问题,人工智能在电脑系统的作用
  11. 小练习-----银行提款机系统
  12. oracle宣传片,会声会影X8震撼的宣传片效果该怎么制作?
  13. 最详细的wine配置
  14. 获取Adobe Flash 及Reader安装包
  15. Hadoop环境搭建(全网最详细,保姆级教程)
  16. python模拟键盘上键和回车_使用Python模拟键盘输入
  17. GEO数据库学习一(简介 数据下载 芯片知识)
  18. 【Python 爬虫教程】代理ip网站有哪些?
  19. 如何写好科研论文(笔记)
  20. AWS 云产品和云计算基础知识详解

热门文章

  1. 力扣刷题 DAY_84 贪心
  2. nagios监控系统环境部署安装(LAMP环境)
  3. 浅谈python运算符运算法则
  4. 非正态分布数据转换成正态分布
  5. MAC: docker compose mount permission denied 挂载失败
  6. mysql中data后面加什么_mysql中data_format用法
  7. Laravel 根据数据库生成migration
  8. android渠道首发规则,酷传推广手册Android渠道首发规则.doc
  9. 协同办公笔记软件综合评测:飞书、语雀、Notion、FlowUs、Wolai
  10. 论文-《Conversational Recommender System》