题目来源见文章《帮一个朋友征集算法代码,大家都来开动你的脑袋发挥你的智慧参与吧》,大家提出了很多算法,很多人说类似百钱买百鸡,这里要讨论一下,拼木头问题和百钱买百鸡问题是很不一样的。
百钱买百鸡问题,每种鸡的数目没有限定,所以你可以用穷举法。
拼木头问题,每一种木头的数目一开始已经给出来了,这样,选用哪些种类的木头,最后会相互影响,如果你一开始总是选择最方便的数据来组合,很有可能陷入局部最优。
拼木头问题是一种典型的优化组合问题,应该用典型的优化算法来解决,例如:模拟退火、禁忌搜索、遗传算法等等。 |
下面的程序用禁忌搜索算法,每次得到的最终组合序列可能都不一样,但是组合个数基本上总是最大(最优)的,不保证每次都是,但是能保证大概率得到最优解,这也是优化算法的一个特点。
原始数据选用了原文中的数据,您可以修改数据,验证算法是否正确
一般情况下程序一分钟左右即可发现最优解,到结束需要运行三分钟左右,运行期间浏览器响应可能会变慢一点,正常现象!
最终答案是可以得到 48 个21米的木头 ,但是组合方法则是数不胜数,可以看出,这里5米木头的数目决定了最终结果。
提示:必须在 Chrome 中跑,别的浏览器没有测试
种类 | 根数 | 长度 |
第一种 | ||
第二种 | ||
第三种 | ||
第四种 | ||
第五种 | ||
拼接长度 | 米 | |
|
相关阅读:
《模拟退火算法应用于最优排列问题和最优组合问题 之 排列篇》
《“十滴水”游戏——求解算法挑战赛:模拟退火,用Javascript跑》
//==========================================
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 单线程的Redis速度为什么快?
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库