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