【基本算法】穷举算法
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版)》
【基本算法】穷举算法相关推荐
- 百钱百鸡php穷举法,PHP经典题:百钱百鸡问题(穷举算法)
PHP经典题:百钱百鸡问题(穷举算法) 百钱百鸡问题: 已知:公鸡5元一只,母鸡3元一只,小鸡一元3只 现用100元钱买了100只鸡,问:公鸡母鸡小鸡各几只? --请考虑尽可能高效的方法 思路: 如果 ...
- 穷举算法——奶牛碑文(cow)
- 穷举算法--奶牛碑文(cow) 题目描述 小伟暑假期间到大草原漫游,在一块石头上发现了一些有趣的碑文.碑文似乎是一个神秘古老的语言,只包括三个大写字母 C.O 和W. 尽管小伟看不懂,但是令他高兴 ...
- 【算法】最直接的算法——穷举法详解
第三章 穷举法 一.基本概念 穷举法又称为枚举法或者蛮力法,是一种简单直接解决问题的方法,常常是基于问题的直接描述去编写程序,比如说求n的阶乘,那么就直接一个循环n次的for循环. 穷举法依赖的基本技 ...
- 简析穷举算法,及其简单应用
简析穷举算法,及其简单应用 穷举概述 穷举法又称列举法,其基本思想是逐一列举问题所涉及的所有情况. 穷举法常用于解决"是否存在"或"有多少种可能"等问题. 应用 ...
- 3388=24及24点游戏的穷举算法
偶尔看到一题:用3 3 8 8 四个数和加减乘除组合得出24,前提是用完这四个数,几年没好好思考了,偶算了半天没答案,就写了个穷举算法,呵呵,貌似结果只有一种啊,各位兄台还有其它答案么? packag ...
- java穷举密码_穷举算法和递推算法(Java)
穷举算法 概念: 最简单算法,依赖计算机的强大计算能力穷尽每一种可能的情况.穷举算法效率不高,但是适合一些没有明显规律可循的场合. 思想: 在使用穷举算法时,需要明确问题答案的范围,这样才可能在指定范 ...
- 穷举算法(鸡兔同笼问题)
穷举算法的基本思想就是从所有可能的情况中搜索正确的答案,其执行步骤如下: (1)对于一种可能的情况,计算其结果. (2)判断结果是否满足要求,如果不满足则进行执行第(1)步来搜索下一个可能的情况:如果 ...
- 子图同构算法——Ullmann算法(1)不包含refine procedure的简单穷举算法。
摘要: 转载请注明来自stanlysheng--talk is cheap, show me your code.http://www.cnblogs.com/stanly/ .谢谢.此文我也在CSD ...
- JS if 水仙花数 游乐园门票计算 闰年 三元运算符 for循环 算法 穷举法 While 拔萝卜 等差数 随机数函数random 区间数 猜数字
算法题 水仙花数 数学方法 字符串方法 游乐园门票计算 Switch 闰年 <body> <script>var month = Number(promp ...
- 农民过河算法可爱的学习----记录于高考报名后的怀旧emo时刻--穷举算法
很多关卡在向孩子教学代码的同时,更是在潜移默化地训练孩子的编程思维. 在最开始的地牢地图中,孩子需要使用「While-True」循环语句,穿过一个又一个结构重复的迷宫. 在学习「While-True」 ...
最新文章
- 一些非常酷的GAN的应用
- python xpath语法-XPath语法和lxml模块(数据提取)
- ThinkPHP的访问模式分为四种模式
- MyBatis-动态SQL
- [WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platfor
- ACID中C与CAP定理中C的区别
- 使用ACDsee在一张纸上打印多张图片
- C#LeetCode刷题之#581-最短无序连续子数组( Shortest Unsorted Continuous Subarray)
- ./configure,make,make install的作用(转)
- 智能计算机的功能是什么问题,人工智能在电脑系统的作用
- 小练习-----银行提款机系统
- oracle宣传片,会声会影X8震撼的宣传片效果该怎么制作?
- 最详细的wine配置
- 获取Adobe Flash 及Reader安装包
- Hadoop环境搭建(全网最详细,保姆级教程)
- python模拟键盘上键和回车_使用Python模拟键盘输入
- GEO数据库学习一(简介 数据下载 芯片知识)
- 【Python 爬虫教程】代理ip网站有哪些?
- 如何写好科研论文(笔记)
- AWS 云产品和云计算基础知识详解
热门文章
- 力扣刷题 DAY_84 贪心
- nagios监控系统环境部署安装(LAMP环境)
- 浅谈python运算符运算法则
- 非正态分布数据转换成正态分布
- MAC: docker compose mount permission denied 挂载失败
- mysql中data后面加什么_mysql中data_format用法
- Laravel 根据数据库生成migration
- android渠道首发规则,酷传推广手册Android渠道首发规则.doc
- 协同办公笔记软件综合评测:飞书、语雀、Notion、FlowUs、Wolai
- 论文-《Conversational Recommender System》