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