裴南平

摘要:回溯法是一种常用的计算机程序设计方法。使用回溯法解决“韩信分油问题”也称“泊松分酒问题”,在算法中保存每一步执行的中间结果,程序扩展前,判斷程序是否进入“循环圈”,程序一旦进入“循环圈”,就不需要往下扩展,开始回溯了。如果能合理设计扩展的条件,防止程序陷入“循环圈”可以提高程序的效率。

关键词:算法;回溯法;泊松分酒;循环圈

中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2017)34-0248-03

Abstract: Backtracking is a commonly used method of computer programming. The use of backtracking method to solve the "Han oil" also known as the " Poisson wine problem", save every step of execution of the intermediate results in the algorithm, the expansion of the program before the procedure to determine whether to enter the "circle", once the program into the circle, do not need to expand down and start backtracking. if can design reasonable expansion conditions to prevent the program into a "circle" can improve the efficiency of the program.

Key words: algorithm; backtracking method; Poisson wine; cycle ring

1 背景

韩信是家喻户晓的汉朝名将,聪明过人。传说有一天他骑马路过街市,见有二人争吵,下马细问,原来是一个卖油的只带了十斤、七斤、五斤三个油壶,十斤油壶装满了油,七斤、五斤油壶空的,没有带秤具,对方只想买一半,正为无法分出五斤油成交争执。韩信略加思考,立马给出了解决办法。

这其实是一个利用二个空的小容器将一个满的大容器均分的问题。法国数学家、物理学家和力学家泊松曾提出并研究该类问题,所以也称“泊松分酒问题”。

2 解题算法分析

计算机解决该类问题当然不需要用泊松研究的数学方法,只要利用自身强大快速的计算能力将所有的情况遍历,从而找出问题的所有解。

“韩信分油问题”的解是一步一步的步骤,例如韩信当时给出的分油办法如图1所示。

韩信的方法总共八步,当然解题方法不止一种,而且步骤可能是八步,也可能是九步、十步、...,由于每个解的步骤不相同,使用普通的穷举法无法实现,只能使用回溯法来穷举实现。

我们用a代表十斤油壶,b代表七斤油壶,c代表三斤油壶。进行下一步操作共有如下六种可能:

1) a倒入b;

2) a倒入c;

3) b倒入a;

4) b倒入c;

5) c倒入a;

6) c倒入b。

求解的每一步都市这六种可能的穷举,就这样一部一部扩展,直到某个油壶正好是要分的一半五斤油,就找到了一个解。

不过扩展到哪一步为止?然后回溯,正式文本论述的关键所在。普通的回溯法都是扩展到某一固定层数就开始回溯。分油问题因为每个解步数不相同,所以无法扩展到某一固定步数就开始回溯。当然可以规定到了足够多的n步开始回溯,但是n就不好定了,太小了可能漏掉解,太大了如n=50,就要穷举6的50次方,费事太长,普通的电脑短时间无法找到所有解。

当进行到某一步时三个油壶的油量与前面经历的某一步相同,可以称之为进入“循环圈”。一步一步扩展下去,如果没有找到解停下并回溯,肯定会进入“循环圈”。一旦进入“循环圈”,就不需要往下扩展,就可以回溯了。这样做,不但合理地设定了扩展的终止条件,而且大大提高了求解的效率,因为跳过了很多无聊的步骤,如一个油壶倒入另一油壶,立马又倒回来。

3 C语言完整程序

4 结束语

通过运行上面程序,可以求出“韩信分油问题”共有十七个不同的解,最长步骤的解要十七步,最短步骤的解只需要八步,也就是韩信给出的办法。

参考文献:

[1] 李青, 张军, 张学军. 解决排班问题的多目标优化模型及算法研究[J]. 北京航空航天大学学报, 2003(10).

[2] 谢玉庚. 用回溯法编程求解爱因斯坦谜题[J]. 电脑与电信, 2016(10).

[3] 徐永琳, 巫青山, 林川. 递归回溯法求解整数线性规划及MATLAB实现[J]. 兰州文理学院学报:自然科学版, 2014(7).endprint

分油问题回朔法c语言算法,用回溯法求“韩信分油”问题所有解相关推荐

  1. 第39级台阶回溯算法c语言,五大经典算法之回溯法 - osc_9ipdey7e的个人空间 - OSCHINA - 中文开源技术交流社区...

    一.基本概念 回溯法,又称为试探法,按选优条件向前不断搜索,以达到目标.但是当探索到某一步时,如果发现原先选择并不优或达不到目标,就会退回一步重新选择,这种达不到目的就退回再走的算法称为回溯法. 与穷 ...

  2. LeetCode算法总结-回溯法与深度优先搜索

    转载自  LeetCode算法总结-回溯法与深度优先搜索 回溯法(探索与回溯法)是一种选优搜索法,又称为试探法,按选优条件向前搜索,以达到目标.但当探索到某一步时,发现原先选择并不优或达不到目标,就退 ...

  3. 五大经典算法之回溯法

    一.基本概念   回溯法,又称为试探法,按选优条件向前不断搜索,以达到目标.但是当探索到某一步时,如果发现原先选择并不优或达不到目标,就会退回一步重新选择,这种达不到目的就退回再走的算法称为回溯法. ...

  4. C++——《算法分析与设计》实验报告——贪心算法与回溯法

    实验名称: 贪心算法与回溯法 实验地点: 实验目的: 1.理解贪心算法与回溯法的概念: 2.掌握贪心算法与回溯法的基本要素: 3.掌握贪心算法与回溯法的解题步骤与算法柜架: 4.通过应用范例学习贪心算 ...

  5. C++——《算法分析》实验叁——贪心算法与回溯法

    实验目的: 1.理解贪心算法与回溯法的概念: 2.掌握贪心算法与回溯法的基本要素: 3.掌握贪心算法与回溯法的解题步骤与算法柜架: 4.通过应用范例学习贪心算法与回溯法的设计技巧与策略: 实验原理 1 ...

  6. 探讨与研究——动态规划算法、回溯法、分支限界法解0-1背包问题

    一个人终归是要成长的,是要不断历练的,没有人可以安安稳稳一辈子.就算是最有地位最有钱的人也要不断追求.不断历练.不断提升自己. 人的学问少时在不断学习,青年时期不断实践.随着时间推移,到了老年终有所成 ...

  7. 拉斯维加斯算法结合回溯法求解n后问题

    实验8 拉斯维加斯算法结合回溯法求解n后问题 设stopVgas为采用拉斯维加斯算法随机排设的皇后个数,对n.stopVgas进行多组不同取值时,记录程序成功率.运行时间 ① 参考课件.教材.其它资料 ...

  8. 趣学算法系列-回溯法

    趣学算法系列-回溯法 声明:本系列为趣学算法一书学习总结内容,在此推荐大家看这本算法书籍作为算法入门, 原作者博客链接,本书暂无免费电子版资源,请大家支持正版 第五章 回溯法 回溯法是一种选优搜索法, ...

  9. [回溯算法] 五大常用算法之回溯法

    算法入门6:回溯法 一. 回溯法 – 深度优先搜素 1. 简单概述 回溯法思路的简单描述是:把问题的解空间转化成了图或者树的结构表示,然后使用深度优先搜索策略进行遍历,遍历的过程中记录和寻找所有可行解 ...

最新文章

  1. [WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform
  2. spring mvc原理_Spring MVC的工作原理,我们来看看其源码实现
  3. redis 内存不足 排查_Redis 系统学习之 redis 内存模型
  4. 推荐十款非常优秀的 HTML5 在线设计工具
  5. halcon/c++接口基础 之 构造函数与Halcon算子
  6. 转帖-Linux学习(Find命令使用实例)
  7. C++排序之stable_sort()的方法
  8. 软考网络管理员学习笔记5之第五章广域网与接入网技术
  9. 渗透测试工具——漏洞扫描工具
  10. CodeBlock的安装、配置和运行
  11. 51单片机定时器TMOD与TCON、SCON
  12. java毕业设计水果网店管理系统mybatis+源码+调试部署+系统+数据库+lw
  13. 病毒分析一:恶意下载软件
  14. 微信小店如何退货退款?
  15. Pr 音频效果参考:延迟与回声
  16. 7种大屏设计与布局思路,你不知道就亏了
  17. 五大靠谱的婚恋相亲APP详细特点缺点分析!
  18. c++11中的declval和decltype
  19. 目标竞赛省队,寒假如何备考生物竞赛联赛?
  20. 段码液晶屏的连接方式剖析

热门文章

  1. jdk-17下载与安装(window10)
  2. 前端练手项目 HTML 游戏叠高塔(包含源码)
  3. 树莓派raspberryPI-4b 官方镜像raspios-bullseye-arm64 系統下编译构建ros2 rolling环境(附下载完整镜像资料)
  4. php中访问excel文件,PHP中常用的Excel文件访问类及修改 | 学步园
  5. 程序员必备的思维能力:抽象思维
  6. 【总结】1026- 一文读懂 base64
  7. ybt1058 求一元二次方程
  8. arcgis 导入Excel 处理 点线 数据关系
  9. python学习(24) 使用Xpath解析并抓取美女图片
  10. docker 安装linux镜像制作,制作ubuntu完整版docker镜像