8 个版本
0.4.3 | 2021 年 7 月 11 日 |
---|---|
0.4.2 | 2021 年 7 月 10 日 |
0.3.1 | 2020 年 2 月 21 日 |
0.2.0 | 2020 年 2 月 21 日 |
0.1.1 | 2020 年 2 月 21 日 |
#319 in 科学
每月 25 下载
185KB
2.5K SLoC
tallystick
tallystick 是一个用于计票的 Rust 库,目前仍在开发中。
当前状态非常不稳定。目前不推荐使用。以下复选框列出了已完成的特性列表。
目标
- 易用 - 使用简单。
- 快速 - 成为世界上最快的一般用途计票库。
- 安全 - 没有未定义的行为。
- 完整 - 支持所有知名投票方法。
- 确定性 - 重复执行相同的计票应始终产生相同的结果。
- 泛型 - 在候选人和计数类型上都是泛型的。
特性
-
wasm
支持在浏览器中使用,或在区块链智能合约中使用。 -
rational
支持使用有理分数进行精确计票,而不是使用浮点数。 -
fixed_point
支持十进制定点计票,这是某些法规所要求的。 -
ffi
支持从其他编程语言调用。 -
alloc
支持嵌入式和其他应用程序,其中存在分配器但没有标准库。
支持的计票方法
状态¹ | 计票方法 | 支持的变体 | 性能² | 备注 |
---|---|---|---|---|
✓ | 复数 | 120 百万次/秒 | 第一顺位投票制 (FPTP) | |
✓ | 得分 | 3 百万次/秒 | ||
✓ | 批准 | 4 百万次/秒 | ||
⚠ | STV | Newland-Britton, Meek, Warren | 3 百万次/秒 | 单次可转让选票 |
CPO-STV | ||||
⚠ | 即时重选 | |||
条件 | ||||
补充 | ||||
✓ | 孔多塞 | 2 百万次/秒 | ||
Copeland | ||||
✓ | Schulze | 赢家、差距、比率 | 2 百万次/秒 | |
Schulze STV | ||||
Kemeny–Young | ||||
Minimax | ||||
✓ | Borda | 经典、Dowdall、修改 | 3 百万次/秒 | |
Borda - Nanson | 经典、Dowdall、修改 | |||
Borda - Baldwin | 经典、Dowdall、修改 | |||
Dodgson | Quick, Tideman | |||
排序对 | 差距、赢家 | |||
STAR | ||||
多数判断 | ||||
D'Hondt | Sainte-Laguë, Huntington-Hill, Quota |
- ✓ 表示已完成,⚠ 表示正在进行中,空白表示尚未开始但计划支持。
- 单线程性能以每秒计票次数衡量。在 2017 年 MacBook Pro 上进行基准测试。
贡献者
依赖项
约2.6–3.5MB
约64K SLoC