1. 项目背景
上一篇文章我们讲解了搭建数据挖掘可视化系统(大数据数据挖掘系统可视化设计艺术-CSDN博客)的主要内容,通过构建算子工作流可以完成数据挖掘的工作。这时这里的算子可以提交到本地计算请求,也可以提交大数据集群做计算,本文将详细介绍搭建本地计算请求的过程。
2.拓扑排序核心算法
2.1算法描述
拓扑排序是针对有向无环图(DAG)的一种排序方法,它可以用来解决任务调度、依赖关系等问题。
核心算法逻辑描述如下:
1. 初始化一个数组inDegree,用来记录每个顶点的入度数(即有多少其他顶点指向该顶点)。
2. 遍历图的所有顶点,统计每个顶点的入度数,并将其存入inDegree数组中。
3. 初始化一个队列queue,并将所有入度为0的顶点放入队列中。
4. 初始化一个空数组result,用于存储排序后的顶点。
5. 当队列不为空时,执行以下操作:
- 取出队首顶点v,并将其放入result数组中。
- 遍历v的所有邻接顶点u:
- 将u的入度减1。
- 若u的入度变为0,将u放入队列中。
6. 当队列为空时,如果result数组的长度等于图的顶点数,说明拓扑排序成功,返回result;否则,说明图中存在环,拓扑排序失败。
拓扑排序的时间复杂度为O(V+E),其中V为顶点数,E为边数。
2.2代码实现
/**
* @param links 节点关系
* @param opMapper 算子id -> Operator映射
* @param flag
* @return
*/
private List<String> splitLinks(JSONArray links, HashMap<String, Operator> opMapper, boolean flag) {
List<String> flow = new ArrayList<>();
List<String> fullFlow = new ArrayList<>();
HashMap<String, Integer> fromMap = new HashMap<>();
HashMap<String, Integer> toMap = new HashMap<>();
for (Object obj : links) {
JSONObject link = (JSON
标签:HashMap,拓扑,result,new,顶点,Spark,排序,搭建,SpringBoot
From: https://blog.csdn.net/jy739761380/article/details/139689012