4 个版本
| 0.0.4 | 2023 年 7 月 24 日 | 
|---|---|
| 0.0.3 | 2023 年 7 月 24 日 | 
| 0.0.2 | 2023 年 7 月 24 日 | 
| 0.0.1 | 2023 年 7 月 24 日 | 
#1873 in 算法
34KB
599 行
Knaptime
这个包旨在解决背包问题的变体。
由于在线上缺乏易于访问的背包变体算法实现,因此构建了这个包。计划添加语言绑定,以便这些函数可以在您选择的任何语言中使用。
文档
查看所有变体和其他文档 这里 (链接).
测试
理想情况下,我们会有一个全面的测试套件,但这只是我的一个副项目 ;).
目前我只实现了同一种算法两次(使用递归/原始方法和优化的动态规划方法)。对这两种方法的模糊测试通常能揭示大多数实现问题。
如果您有关于如何可靠地测试 Rust 代码而不头疼的想法,我将欢迎任何证明概念的 PR :)
贡献
欢迎 PR 和错误修复!
lib.rs:
Knaptime 包
这个包旨在解决背包问题的变体。
由于在线上缺乏易于访问的背包变体算法实现,因此构建了这个包。计划添加语言绑定,以便这些函数可以在您选择的任何语言中使用。
变体
| 变体 | 常规背包 | 01 | 阈值 | 类别 | 连续 | 
|---|---|---|---|---|---|
| 常规背包 | [dp] [递归] | 无效[^1] | 无效[^1] | [类别重复]! | [连续] | 
| 01 | x | [零一] | [零一阈值]! | [类别] | [连续零一]! | 
| 阈值 | x | x | [阈值] | [类别阈值]! | [连续阈值]! | 
| 类别 | x | x | x | [类别] | [连续类别]! | 
| 连续 | x | x | x | x | [连续] | 
带 ! 的项目(尚未实现)。请随意打开 PR 或通过 GitHub 问题请求帮助。
[^1]: 这与常规背包不兼容,因为它是直接变体。如果您有实现无效变体的想法,请随意打开 GitHub 问题。
背包优化
- [dpsliding]
- [dpwalkback]
连续价值背包
通常您需要具有固定精度才能计算最佳解决方案。浮点数有太多的精度。您可能可以使用 dpwalkback 来解决这个问题,但如果有许多物品,则不行。
一种替代方法是使用概率来找到一个具有一定百分比拟合/成为最佳解决方案机会的解决方案。
- [连续]
测试
理想情况下,我们会有一个全面的测试套件,但这只是我的一个副项目 ;).
目前我只实现了同一种算法两次(使用递归/原始方法和优化的动态规划方法)。对这两种方法的模糊测试通常能揭示大多数实现问题。
如果您有关于如何可靠地测试 Rust 代码而不头疼的想法,我将欢迎任何证明概念的 PR :)
贡献
欢迎 PR 和错误修复!
依赖项
~0.6–1.1MB
~24K SLoC