Bounded zero-suppressed decision diagrams for sparse finite set families
moon add hutingyu-nuist/moonzdd@0.1.0import {
"hutingyu-nuist/moonzdd" @zdd,
}
options("is-main": true)fn main {
try {
let edges = @zdd.Family::from_sets(4, [[0, 1], [1, 2], [2, 3]])
let suites = edges.transversals()
let best = suites.minimum_weight([5L, 2L, 4L, 1L]).unwrap()
assert_eq(suites.count(), 3UL)
assert_eq(best.elements, [1, 3])
assert_eq(best.weight, 3L)
println("minimal suites=3, cheapest=[1,3], cost=3")
} catch {
_ => abort("example failed")
}
}moon run .| 任务 | API 与语义 |
|---|---|
| 构造 | empty、unit、singleton、from_sets、powerset、choose、items |
| 按完整成员运算 | union、intersection、difference、symmetric_difference |
| 关系判断 | contains、equivalent、is_subfamily、is_disjoint |
| 逐成员组合 | join 为 {a∪b},disjoint_join 只接受无交集对;meet 为 {a∩b},subtract_members 为 {a\b} |
| 元素处理 | excluding、containing 保留原成员;cofactor 选择含该项的成员后删除该项;toggle 翻转该项 |
| 域与筛选 | project 保留指定项且不重新编号;rename 接受全宇宙双射;restrict 保留必选项并排除禁选项 |
| 大小与统计 | cardinality 为闭区间筛选;cardinality_spectrum 为每种大小的精确计数;occurrences 为每项出现于多少个不同成员 |
| 偏序运算 | minimal、maximal、without_supersets_of、without_subsets_of;后两者排除时包括相等成员 |
| 闭包 | downward_closure、upward_closure;complement_members 将每个成员 S 映射为宇宙减 S |
| 命中集 | transversals 返回与每条超边相交的全部极小成员,不先枚举边族 |
| 访问 | count、rank、unrank、page、enumerate、first、last;size_bounds 给出大小上下界 |
| 代价 | minimum_weight、maximum_weight,返回成员及有符号 Int64 加法代价;空族返回 None |
| 交换与诊断 | to_graph / from_graph、to_json / from_json、statistics、to_dot |
let small = @zdd.Family::choose(20, 3, limits={ nodes: 2000, steps: 100000 })moon run examples/configurations
moon run examples/coverage
moon run examples/itemsetsmoon info
moon fmt --check
moon check --deny-warn
moon build --deny-warn
moon test --deny-warn
moon test --target wasm --deny-warn
moon test --target js --deny-warn
moon test --target native --deny-warnpub(all) suberror ZddError {
Invalid(String)
BudgetExceeded
CountOverflow
WeightOverflow
MissingMember
}pub(all) struct Limits {
nodes : Int
steps : Int
}pub(all) struct NodeRecord {
variable : Int
low : Int
high : Int
}Install
Download zipBounded zero-suppressed decision diagrams for sparse finite set families