用回溯法求“韩信分油”问题所有解.docxVIP

用回溯法求“韩信分油”问题所有解.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
用回溯法求“韩信分油”问题所有解 : 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. 背景 韩信是家喻户晓的汉朝名将, 聪明过人。 传说有一天他骑马 路过街市,见有二人争吵,下马细问,原来是一个卖油的只带了 十斤、七斤、五斤三个油壶,十斤油壶装满了油,七斤、五斤油 壶空的,没有带秤具,对方只想买一半,正为无法分出五斤油成 交争执。韩信略加思考,立马给出了解决办法。 这其实是一个利用二个空的小容器将一个满的大容器均分 的问题。法国数学家、 物理学家和力学家泊松曾提出并研究该类 问题,所以也称“泊松分酒问题” 解题算法分析 计算机解决该类问题当然不需要用泊松研究的数学方法, 只 要利用自身强大快速的计算能力将所有的情况遍历, 从而找出问 题的所有解。 “韩信分油问题”的解是一步一步的步骤, 例如韩信当时给 出的分油办法如图 1 所示。 韩信的方法总共八步, 当然解题方法不止一种, 而且步骤可 能是八步,也可能是九步、十步、 ... ,由于每个解的步骤不相 同,使用普通的穷举法无法实现,只能使用回溯法来穷举实现。 我们用 a 代表十斤油壶, b 代表七斤油壶, c 代表三斤油壶。 进行下一步操作共有如下六种可能: a 倒入 b; a 倒入 c; b 倒入 a; b 倒入 c; c 倒入 a; c 倒入 b。 求解的每一步都市这六种可能的穷举,就这样一部一部扩 展,直到某个油壶正好是要分的一半五斤油,就找到了一个解。 不过扩展到哪一步为止?然后回溯, 正式文本论述的关键所 在。普通的回溯法都是扩展到某一固定层数就开始回溯。 分油问 题因为每个解步数不相同, 所以无法扩展到某一固定步数就开始 回溯。当然可以规定到了足够多的 n步开始回溯,但是n就不好 定了,太小了可能漏掉解,太大了如 n=50,就要穷举6的50次 方,费事太长,普通的电脑短时间无法找到所有解。 当进行到某一步时三个油壶的油量与前面经历的某一步相 同,可以称之为进入“循环圈”。一步一步扩展下去,如果没有 找到解停下并回溯,肯定会进入“循环圈”。一旦进入“循环 圈”,就不需要往下扩展,就可以回溯了。这样做,不但合理地 设定了扩展的终止条件, 而且大大提高了求解的效率, 因为跳过 了很多无聊的步骤,如一个油壶倒入另一油壶,立马又倒回来。 C 语言完整程序 结束语 通过运行上面程序, 可以求出“韩信分油问题”共有十七个 不同的解,最长步骤的解要十七步,最短步骤的解只需要八步, 也就是韩信给出的办法。

文档评论(0)

ld1556656 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档