Skip to content

mbtgraph - MoonBit 图算法库

MoonBit 生态首个生产级图算法库

8 种存储结构

邻接表、矩阵、边集、CSR/CSC 等 8 种实现,覆盖所有使用场景

5 层 Trait 分层

GraphReadable → Writable → Directed → Full → BatchReadable,渐进式复杂度

~95 个算法

遍历、最短路径、MST、连通性、网络流、匹配、着色、社区检测等全覆盖

纯函数语义

深拷贝保证无副作用,便于推理和测试,符合函数式编程最佳实践

三后端支持

原生支持 native / wasm / js 三种编译目标,跨平台运行

双轨测试体系

Blackbox 功能测试 + Whitebox 内部逻辑验证,质量有保障

mbtgraph 采用三层架构设计,通过 Trait 机制实现算法与存储的完全解耦:

┌─────────────────────────────────────────────┐
│ 算法层 (algo/) │
│ 泛型函数 + 独立类型双轨制 │
├─────────────────────────────────────────────┤
│ 存储层 (storage/) │
│ 8 种实现 × Trait 接口 │
├─────────────────────────────────────────────┤
│ 核心层 (core/) │
│ 类型定义 + 5 层 Trait + 错误处理 │
└─────────────────────────────────────────────┘
  1. 安装 mbtgraph
  2. 创建第一个图程序
  3. 学习核心概念
  4. 探索算法教程

通过 Trait 泛型机制,同一算法可适配不同存储结构:

// 模式 A: Trait 兼容型(大多数算法)
pub fn[G : @core.GraphReadable] bfs(graph : G, start : NodeId) -> BfsResult { ... }
// 可用于任何实现了 GraphReadable 的存储:AdjList、Matrix、CSR...
let result = bfs(my_adj_list_graph, start_node)

从简单只读到完全可写,用户按需选择:

Trait 层级方法数适用场景
GraphReadable12所有存储,只读操作
GraphWritable+5动态存储,增删节点
GraphDirected+6有向图,入边查询
GraphFull=W+D便捷别名
GraphBatchReadable+2CSR/CSC 批量操作

所有操作返回新实例,保证无副作用:

// 链式赋值,每次返回新的图实例
let g = @storage.new_directed()
let g = @core.GraphWritable::add_node(g, "A")
let g = @core.GraphWritable::add_edge(g, @core.NodeId(0), @core.NodeId(1), 1.0)
// 算法内部自动深拷贝,不会修改原图
let result = dijkstra(g, source) // g 保持不变
  • 社交网络分析:关注关系图、关键人物识别、社群发现
  • 推荐系统:用户-物品二分图、协同过滤、图嵌入
  • 知识图谱:实体关系抽取、图谱查询、可视化展示
  • 路径规划:地图导航、游戏寻路、物流优化
  • 网络流问题:最大流、最小费用流、资源分配
  • 生物信息学:蛋白质交互网络、基因调控网络
💡

新手推荐路线

如果你是第一次接触图算法或 MoonBit 语言,建议按以下顺序学习:

  1. 入门指南:安装环境并运行第一个示例程序
  2. 基础教程:理解 Trait 系统、存储选型和数据类型
  3. BFS/DFS 教程:掌握图遍历的基础和进阶技巧
  4. Dijkstra 教程:学习最短路径算法的经典实现
  5. 实战案例:将所学应用到真实场景中
维度数据说明
Trait 分层5 层GraphReadable → Writable → Directed → Full → BatchReadable
存储实现8 种邻接表/矩阵/边集/CSR/CSC(各有有向/无向变体)
算法覆盖~95 个遍历/最短路径/MST/连通性/流网络/匹配/着色/社区检测等
测试体系双轨制Blackbox(功能测试)+ Whitebox(内部逻辑验证)
后端支持3 种native / wasm / js

准备好开始了吗?

立即开始 →