本文共 655 字,大约阅读时间需要 2 分钟。
题目来源见文章,大家提出了很多算法,很多人说类似百钱买百鸡,这里要讨论一下,拼木头问题和百钱买百鸡问题是很不一样的。
百钱买百鸡问题,每种鸡的数目没有限定,所以你可以用穷举法。
拼木头问题,每一种木头的数目一开始已经给出来了,这样,选用哪些种类的木头,最后会相互影响,如果你一开始总是选择最方便的数据来组合,很有可能陷入局部最优。
拼木头问题是一种典型的优化组合问题,应该用典型的优化算法来解决,例如:模拟退火、禁忌搜索、遗传算法等等。 |
下面的程序用禁忌搜索算法,每次得到的最终组合序列可能都不一样,但是组合个数基本上总是最大(最优)的,不保证每次都是,但是能保证大概率得到最优解,这也是优化算法的一个特点。
原始数据选用了原文中的数据,您可以修改数据,验证算法是否正确
一般情况下程序一分钟左右即可发现最优解,到结束需要运行三分钟左右,运行期间浏览器响应可能会变慢一点,正常现象!
最终答案是可以得到 48 个21米的木头 ,但是组合方法则是数不胜数,可以看出,这里5米木头的数目决定了最终结果。
提示:必须在 Chrome 中跑,别的浏览器没有测试
种类 | 根数 | 长度 |
第一种 | ||
第二种 | ||
第三种 | ||
第四种 | ||
第五种 | ||
拼接长度 | 米 | |
相关阅读:
//==========================================
本文转自左洸博客园博客,原文链接:http://www.cnblogs.com/myqiao/archive/2011/06/22/2087649.html,如需转载请自行联系原作者