5 个版本

0.2.7 2020 年 12 月 20 日
0.2.1 2020 年 12 月 17 日
0.2.0 2020 年 12 月 17 日
0.1.1 2020 年 11 月 24 日
0.1.0 2020 年 11 月 22 日

算法 类别中排名 2098

MIT 许可证

250KB
5.5K SLoC

Rusty 算法和数据结构用于教育和 LeetCode 解决方案

Crates.io Crates.io Crates.io Continuous Integration Coverage Status lines of code

此仓库展示了常见算法和数据结构的 Rust 实现,其中大部分基于 William Fiset 的 Java 实现:https://github.com/williamfiset/Algorithms。我强烈推荐他的 YouTube 频道https://www.youtube.com/user/purpongie,他在那里使用插图、动画和伪代码详细解释了许多算法。

除了实现 W. Fiset 的算法外,我还编写了解决竞赛编程问题的解决方案。一些代表性问题在 src/problems 中解释,还有一个 leetcode 文件夹用于我的 LeetCode 解决方案。两者都远未完成。

用法

实现细节在注释和文档中解释,示例用法在单元测试中暗示。要运行测试

cargo test

我在文档中使用 LaTeX 编写一些数学表达式。为了在文档中正确渲染它们,请运行

RUSTDOCFLAGS="--html-in-header katex-header.html" cargo doc --no-deps --open

或此命令的别名

./doc

这个简单的设置提供了大多数 decent IDE 都会提供的功能(重要的是跳转到定义和类型标记)

内容

图表示

  • 邻接矩阵(加权和非加权)
  • 邻接表(加权和非加权)
  • 浓缩邻接矩阵(加权)

基本图算法

  • 深度优先搜索(迭代和递归)
  • 广度优先搜索(迭代)

树算法

  • 树表示:是否包含指向父指针
  • 基础知识(DFS、树高、树和等)
  • 树中心
  • 树根
  • 树同构
  • 最近公共祖先(LCA)

最小生成树/森林

  • 普里姆算法
  • 克鲁斯卡尔算法

网络流

  • 福特-富克森 + DFS
  • DFS 带容量缩放
  • Edmonds-Karp 算法(BFS)
  • Dinic 算法(BFS + DFS)

最短路径

  • BFS(非加权)
  • 带拓扑排序的有向图最短路径
  • 迪杰斯特拉算法(非负权重,SSSP)
  • 贝尔曼-福特算法(SSSP)
  • 弗洛伊德-沃舍尔算法(APSP)

其他

  • 二分图检查
  • 有向无环图图的拓扑排序和最短路径
  • 欧拉路径/回路
  • 强连通分量(Tarjan算法)

数据结构

  • 位操作
  • 优先队列(二叉堆)
  • 平衡树
    • AVL树
  • 并查集(集合归并)
  • 稀疏表(范围查询)(通用)

机器学习

聚类

  • 层次聚类

数学

  • 最大公约数/最小公倍数
  • log2

问题

动态规划

  • 编辑距离
  • 背包问题0/1

回溯法

  • 数独
  • N皇后问题

  • 旅行商问题(暴力破解与DP)

网络流

  • 老鼠和猫头鹰

依赖关系

~2.5MB
~36K SLoC