![]() |
1
3
我需要一个类似的算法来对具有依赖关系的任务进行排序(每个任务都可以有一个需要先完成的父任务)。 我发现 拓扑排序 . 这里是一个 iterative implementation in Python 有非常详细的评论。 在进行拓扑排序时,可以计算缩进级别。只需将节点的缩进级别设置为其父节点的缩进级别+1,因为它被添加到拓扑顺序中。 注意,可以存在许多有效的拓扑顺序。为了保证生成的拓扑顺序对具有子节点的父节点进行分组,选择一种基于局部排序信息生成的图的深度优先遍历的拓扑排序算法。 维基百科给出 two more algorithms for topological sort . 注意,这些算法没有那么好,因为第一个算法是广度优先遍历,第二个算法是递归的。 |
![]() |
2
2
对于层次结构,您几乎肯定需要递归(如果允许任意深度)。我很快编写了一些Ruby代码来说明如何实现这一点。(
如果你不说红宝石,我可以用别的东西来做。 编辑: 我更新了上面的代码以输出两个数据结构。 输出:
|
![]() |
3
1
Wonsung的文章帮助了很多,不过这是一个普通的图表,而不是一棵树。所以我对它做了一些修改,创建了一个专门为树设计的算法:
|
![]() |
Tudor Ciotlos · 递归SQL-计算层次结构中的子体数 9 年前 |
![]() |
Bondifrench · Javascript将对象数组转换为树 9 年前 |
![]() |
Gage · Oracle SQL按日期和ID统计子级和父级 9 年前 |
![]() |
Jorge Campos · 分层导入单一查询解决方案-Oracle 11 年前 |