mbtgraph

MoonBit 图算法库 - 完整的图数据结构和算法实现

moonbit
graph
algorithms
data-structures
trait-based
moon add morning-start/mbtgraph@0.1.3
Download zip
Version
0.1.3
License
MIT
Last updated
last month
Downloads
21
README
mbtgraph


你在 MoonBit 里要做图算法? BFS 遍历、Dijkstra 最短路径、社区检测、网络流……如果每次都要自己从零实现,太浪费时间了。mbtgraph 让你一行代码拿到生产级结果。


#🚀 快速开始

moon add morning-start/mbtgraph

moon add 会自动配置好依赖。然后在 .mbt 源文件中直接使用 @core@storage 等别名:

// 1. 创建图 → 2. 跑算法 → 3. 拿结果
fn main {
let g = @storage.new_directed()
let n0 = @core.GraphWritable::add_node(g, 0.0)
let n1 = @core.GraphWritable::add_node(g, 1.0)
let n2 = @core.GraphWritable::add_node(g, 2.0)
let n3 = @core.GraphWritable::add_node(g, 3.0)
@core.GraphWritable::add_edge(g, n0, n1, 1.0) |> ignore
@core.GraphWritable::add_edge(g, n1, n2, 2.0) |> ignore
@core.GraphWritable::add_edge(g, n0, n2, 4.0) |> ignore
@core.GraphWritable::add_edge(g, n2, n3, 1.0) |> ignore

// BFS 遍历
let bfs_result = @traversal.bfs(g, n0)
println("BFS 0 → 3 最短跳数: \{bfs_result.distance(n3)}") // => 2

// Dijkstra 最短路径
let sp_result = @shortest_path.dijkstra(g, n0)
println("Dijkstra 0 → 3 最短距离(带权): \{sp_result.distance_to(n3)}") // => 3.0
}

更多完整示例见 *_test.mbt文档站点 → 教程


#📌 能做什么

你在做什么用 mbtgraph 怎么做省了什么
社交网络分析 → 找关键人物betweenness_centrality(g)手写 Brandes 算法 50+ 行
路径规划 → 最短路径dijkstra(g, src)手写堆优化 Dijkstra 80+ 行
推荐系统 → 社区发现louvain(g, resolution)手写模块度优化 200+ 行
依赖分析 → 拓扑排序topological_sort(g)手写 Kahn 算法 30+ 行
网络流 → 最大流量dinic(net, s, t)手写 Dinic 150+ 行
图可视化 → 导出 DOTwrite_dot(g, "graph.dot")手写 DOT 序列化 40+ 行

覆盖 18 个模块 · 65+ 算法 · 8 种存储结构 —— 所有主流图算法开箱即用。


#✅ 为什么选 mbtgraph,而不是自己写?

维度自己从零写用 mbtgraph
时间成本每个算法 30-200 行 + debug一行函数调用
测试覆盖你自己写几个 case772 个测试(黑盒 + 白盒 + NetworkX 交叉验证)
存储选型写死一种结构,换场景重写8 种存储切换,只需改一行构造函数
跨存储兼容不存在,换存储要重写算法5 层 Trait 隔离,算法与存储完全解耦
性能保证可能 O(n²) 而不自知经过基准测试的工业实现
bug 风险你的算法只有你知道772 测试 + CI 门禁


#⚡️ 和竞品比好在哪

#MoonBit 生态内

维度mgraphgraphvizmbtgraph
定位轻量遍历Graphviz 封装完整算法库
算法数2065+
存储种类018
Trait 层数105
测试~10fixture parity772

#跨语言对比

特性mbtgraphNetworkXpetgraphJGraphT
语言MoonBit ⭐PythonRustJava
多后端native+wasm+js ⭐Python onlyNativeJVM only
Trait 层数5 ⭐334
存储种类8 ⭐456
wasm 体积53 KB(gzip 23 KB)N/A~2MB>50MB
纯函数语义部分


#💾 不想花时间选型?直接抄

你的场景用这个存储一句话理由
80% 的通用有向图DirectedAdjList默认选它,不出错
无向图(好友关系等)UndirectedAdjList省一半内存
小图(<1000节点)DirectedMatrixO(1) 查边,写起来最快
Kruskal 最小生成树UndirectedEdgeListGraph边已排序,拿来就用
10万+ 节点大图CSRGraph缓存友好,内存紧凑

选型原则: 不知道选什么 → DirectedAdjList。有特殊需求 → 看存储选型指南


#🧪 测试说了算

moon test # 全量 772 测试,秒级通过 moon test lib/algo/flow # 只跑网络流模块

  • 双轨制: Blackbox(公开 API)+ Whitebox(内部实现)
  • 跨存储一致性: 同一算法在不同存储上结果相同
  • NetworkX 交叉验证: 55 个算法、295 个随机图、Python ground truth 对照


#🔧 版本 & 路线图

版本重点状态
v0.1.065+ 核心算法完成
v0.1.118 个模块补齐 + 文档站点上线
v0.1.2用户体验改进 + 文档完善
v0.1.3 ← 当前性能基线采集 + 文档改进
v0.2.0高级图算法 + 大规模优化⬜ 规划中

完整变更记录 → CHANGELOG.md


#🤝 贡献

欢迎任何形式的贡献!流程:

  1. Fork → git checkout -b feature/awesome-algo
  2. 编码 → 测试 (moon test)
  3. PR → CI 通过 → merge

详见 CONTRIBUTING.mdAGENTS.md(含编码陷阱速查)。


#📄 许可证


#🙏 致谢

设计灵感来源: NetworkX (Python), petgraph (Rust), JGraphT (Java), LEMON (C++)

官方赛事支持: 2026 MoonBit 创新大赛 — 本项目为 MoonBit 生态图算法赛道的参赛作品


⭐ 如果这个项目对你有帮助,请给一个 Star!⭐

Made with ❤️ using MoonBit