悄然无声的 Blog
不是我不明白,这世界变化快!
posts - 113,comments - 713,views - 34万

题目来源见文章《帮一个朋友征集算法代码,大家都来开动你的脑袋发挥你的智慧参与吧》,大家提出了很多算法,很多人说类似百钱买百鸡,这里要讨论一下,拼木头问题和百钱买百鸡问题是很不一样的

 

百钱买百鸡问题,每种鸡的数目没有限定,所以你可以用穷举法。

 

拼木头问题,每一种木头的数目一开始已经给出来了,这样,选用哪些种类的木头,最后会相互影响,如果你一开始总是选择最方便的数据来组合,很有可能陷入局部最优。

 

拼木头问题是一种典型的优化组合问题,应该用典型的优化算法来解决,例如:模拟退火、禁忌搜索、遗传算法等等。

 

下面的程序用禁忌搜索算法,每次得到的最终组合序列可能都不一样但是组合个数基本上总是最大(最优)的,不保证每次都是,但是能保证大概率得到最优解,这也是优化算法的一个特点。

 

原始数据选用了原文中的数据,您可以修改数据,验证算法是否正确

 

一般情况下程序一分钟左右即可发现最优解,到结束需要运行三分钟左右,运行期间浏览器响应可能会变慢一点,正常现象!

 

最终答案是可以得到 48 个21米的木头 ,但是组合方法则是数不胜数,可以看出,这里5米木头的数目决定了最终结果。

 

提示:必须在 Chrome 中跑,别的浏览器没有测试

种类 根数 长度
第一种
第二种
第三种
第四种
第五种
拼接长度


相关阅读:

《模拟退火算法应用于最优排列问题和最优组合问题 之 排列篇》

《“十滴水”游戏——求解算法挑战赛:模拟退火,用Javascript跑》 

//==========================================
posted on   左洸  阅读(2117)  评论(2编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 单线程的Redis速度为什么快?
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
< 2011年6月 >
29 30 31 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 1 2
3 4 5 6 7 8 9

点击右上角即可分享
微信分享提示