You need to enable JavaScript to run this app.
最新活动
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

拓扑排序(Topological Sort)是一种对有向无环图(DAG)进行排序的算法。在 Swift 中实现拓扑排序的方法如下:

在Swift中实现拓扑排序可以使用深度优先搜索(DFS)的方法。以下是一个示例代码:

class Graph {
    var adjacencyList: [Int: [Int]] = [:]
    
    func addEdge(_ from: Int, _ to: Int) {
        if adjacencyList[from] == nil {
            adjacencyList[from] = []
        }
        adjacencyList[from]?.append(to)
    }
    
    func topologicalSort() -> [Int] {
        var visited: [Int: Bool] = [:]
        var stack: [Int] = []
        
        for vertex in adjacencyList.keys {
            if visited[vertex] == nil || visited[vertex] == false {
                dfs(vertex, &visited, &stack)
            }
        }
        
        return stack.reversed()
    }
    
    private func dfs(_ vertex: Int, _ visited: inout [Int: Bool], _ stack: inout [Int]) {
        visited[vertex] = true
        
        if let neighbors = adjacencyList[vertex] {
            for neighbor in neighbors {
                if visited[neighbor] == nil || visited[neighbor] == false {
                    dfs(neighbor, &visited, &stack)
                }
            }
        }
        
        stack.append(vertex)
    }
}

// 示例用法:
let graph = Graph()
graph.addEdge(1, 3)
graph.addEdge(1, 2)
graph.addEdge(3, 4)
graph.addEdge(3, 5)
graph.addEdge(2, 7)
graph.addEdge(4, 6)
graph.addEdge(5, 6)
graph.addEdge(6, 8)

let sortedVertices = graph.topologicalSort()
print(sortedVertices) // [1, 2, 7, 3, 5, 6, 8, 4]

以上代码定义了一个Graph类,通过addEdge方法添加图中的边。topologicalSort方法使用深度优先搜索算法进行拓扑排序,并返回排序后的顶点数组。

示例用法中创建了一个有向无环图,并使用topologicalSort方法进行拓扑排序,最后打印出排序后的顶点数组。

本文内容通过AI工具匹配关键字智能整合而成,仅供参考,火山引擎不对内容的真实、准确或完整作任何形式的承诺。如有任何问题或意见,您可以通过联系service@volcengine.com进行反馈,火山引擎收到您的反馈后将及时答复和处理。
展开更多
面向开发者的云福利中心,ECS 60元/年,域名1元起,助力开发者快速在云上构建可靠应用

社区干货

火山引擎DataLeap数据调度实例的 DAG 优化方案 (一):问题与需求分析

DAG:全称为 Directed Acyclic Graph,指有向无环图,具备严密的拓扑性质,有很强的流程表达能力。DataLeap 是火山引擎自研的一站式大数据中台解决方案,集数据集成、开发、运维、治理、资产管理能力于一身的大数据研... 对数据执行一系列操作的定义。1. 实例:通过任务配置的执行频率(月级、天级等)而创建的一个任务的快照。1. DAG 布局:指根据有向无环图中边的方向,自动计算节点层级和位置的布局算法。 在当前的实例 DAG 图...

干货| 火山引擎在行为分析场景下的ClickHouse JOIN优化

在介绍优化之前,先介绍一下基本的ClickHouse JOIN的类型和实现方式。分布式JOIN``` SELECT et.os_name, ut.device_id AS user_device_id ... 再在内存构建hash table。key为joinkey* 从左表分批读取数据,从右表hash table匹配数据* 优点是:速度快 缺点是:右表数据量大的情况下占用内存### **Merge join*** 对右表排序,内部 block 切分,超出内...

火山引擎DataLeap专家总结:3个必看的“数据血缘”建设经验!

**首先在资产领域,数据血缘主要应用在资产热度的计算。** 在资产热度计算时,有些资产会被频繁消费和广泛引用。某个资产被众多下游引用,是其自身权威性的体现,而这种权威性的证明需要一种定量的度量,因此需要引入“资产热度”的概念。 资产热度本身是参考网页排名算法PageRank算法实现的,同时我们也提供了资产热度值,根据资产的下游血缘依赖的情况,定义了资产引用的热度值,如果某个资产引用热度值越高...

揭秘|基线监控:基于依赖关系的全链路智能监控报警

实现逻辑吧。DataLeap 概念解读 **基线监控**根据监控规则和任务运行情况,基线监控能够决策是否报警、何时报警、如何报警以及给谁报警。基线监控保障的是任务整体产出链路。基线监控的核心目标包括:* 覆盖链路中的所有任务;* 降低任务监控配置成本;* 避免无效报警。保障任务一般选择有 **SLA** **要求**的任务作为保障任务加入基线,基线通过保障任务的依赖拓扑图...

特惠活动

热门爆款云服务器

100%性能独享,更高内存性能更佳,学习测试、web前端、企业应用首选,每日花费低至0.55元
60.00/1212.00/年
立即购买

域名注册服务

cn/top/com等热门域名,首年低至1元,邮箱建站必选
1.00/首年起32.00/首年起
立即购买

DCDN国内流量包100G

同时抵扣CDN与DCDN两种流量消耗,加速分发更实惠
2.00/20.00/年
立即购买

拓扑排序(Topological Sort)是一种对有向无环图(DAG)进行排序的算法。在 Swift 中实现拓扑排序的方法如下:-优选内容

火山引擎DataLeap数据调度实例的 DAG 优化方案 (一):问题与需求分析
DAG:全称为 Directed Acyclic Graph,指有向无环图,具备严密的拓扑性质,有很强的流程表达能力。DataLeap 是火山引擎自研的一站式大数据中台解决方案,集数据集成、开发、运维、治理、资产管理能力于一身的大数据研... 对数据执行一系列操作的定义。1. 实例:通过任务配置的执行频率(月级、天级等)而创建的一个任务的快照。1. DAG 布局:指根据有向无环图中边的方向,自动计算节点层级和位置的布局算法。 在当前的实例 DAG 图...
干货| 火山引擎在行为分析场景下的ClickHouse JOIN优化
在介绍优化之前,先介绍一下基本的ClickHouse JOIN的类型和实现方式。分布式JOIN``` SELECT et.os_name, ut.device_id AS user_device_id ... 再在内存构建hash table。key为joinkey* 从左表分批读取数据,从右表hash table匹配数据* 优点是:速度快 缺点是:右表数据量大的情况下占用内存### **Merge join*** 对右表排序,内部 block 切分,超出内...
火山引擎DataLeap专家总结:3个必看的“数据血缘”建设经验!
**首先在资产领域,数据血缘主要应用在资产热度的计算。** 在资产热度计算时,有些资产会被频繁消费和广泛引用。某个资产被众多下游引用,是其自身权威性的体现,而这种权威性的证明需要一种定量的度量,因此需要引入“资产热度”的概念。 资产热度本身是参考网页排名算法PageRank算法实现的,同时我们也提供了资产热度值,根据资产的下游血缘依赖的情况,定义了资产引用的热度值,如果某个资产引用热度值越高...
揭秘|基线监控:基于依赖关系的全链路智能监控报警
实现逻辑吧。DataLeap 概念解读 **基线监控**根据监控规则和任务运行情况,基线监控能够决策是否报警、何时报警、如何报警以及给谁报警。基线监控保障的是任务整体产出链路。基线监控的核心目标包括:* 覆盖链路中的所有任务;* 降低任务监控配置成本;* 避免无效报警。保障任务一般选择有 **SLA** **要求**的任务作为保障任务加入基线,基线通过保障任务的依赖拓扑图...

拓扑排序(Topological Sort)是一种对有向无环图(DAG)进行排序的算法。在 Swift 中实现拓扑排序的方法如下:-相关内容

火山引擎DataLeap数据调度实例的 DAG 优化方案

有向无环图,具备严密的拓扑性质,有很强的流程表达能力。1. DAG 布局:指根据有向无环图中边的方向,自动计算节点层级和位置的布局算法。## 业务场景以其中一个场景为例:对于任务 test_3 在 2022-09-29 的实... 而在旧版的 DAG ,针对简单链路和复杂链路的处理是一致的,为此,我们需要设计解决复杂链路场景下的方案。# 功能设计针对上面存在的问题以及对需求的分析,我们可以进行如下的功能实现与设计:## 渲染方案替换...

火山引擎DataLeap数据血缘技术建设实践

并**介绍字节跳动在数据血缘建设过程中所遇到的挑战和技术实现以及数据血缘的具体用例,具体包括数据血缘模型、数据血缘优化、数据血缘用例、未来展望四个部分。** 本文介绍的数据血缘能力和实践,目前大部分已通过火... 把这个任务资产节点和表资产节点之间的边更新到图数据库中去。在实时更新的时候,我们有两种方案:方案一:是在引擎侧,即在任务运行时,通过任务执行引擎把该任务在构建DAG后生成的血缘信息通过Hook送入。- 优...

干货 | 基于ClickHouse的复杂查询实现与优化

我们在进行计划下发和调度时,主要实现了两种策略。**第一种是依赖调度,**根据Stage依赖关系定义拓扑结构,产生DAG图,并根据DAG图调度Stage。依赖调度要等到依赖Stage启动以后,才会调度对应的Stage。例如两表Joi... 在网络传输和处理某些场景的时候,需要做一种有序性的保证。例如在Sort的场景,Partial Sort和Merge Sort的网络传输过程必须要保证是有序的,传输数据不能出现乱序的情况,否则进行Merge Sort时数据就会出问题,并影响最...

热门爆款云服务器

100%性能独享,更高内存性能更佳,学习测试、web前端、企业应用首选,每日花费低至0.55元
60.00/1212.00/年
立即购买

域名注册服务

cn/top/com等热门域名,首年低至1元,邮箱建站必选
1.00/首年起32.00/首年起
立即购买

DCDN国内流量包100G

同时抵扣CDN与DCDN两种流量消耗,加速分发更实惠
2.00/20.00/年
立即购买

火山引擎混沌工程之云原生场景实现

**混沌工程是一套通过在系统基础设施上进行实验,主动找出系统中脆弱环节的方法**。通过实验性的方法,去发现系统中潜在的、可以导致灾难性故障、或让用户受损的薄弱环节,并推动研发自主地进行问题修复、代码优化,最... 抖音等业务方实现了生产环境的容灾演练。* **混沌工程平台**:2019 年字节跳动的混沌工程平台演进到了 2.0 版本。在架构上使得故障注入更加简单可控,在模型抽象上使得故障注入的扩展性更强,同时结合自动化指标分...

字节跳动开源 Katalyst:在离线混部调度,成本优化升级

在该资源池混部方案落地实践的过程中,基础设施团队完成了资源并池可行性的验证,完成了混部基础能力的构建,并且在部分核心业务集群实现了整机天级利用率从 **23%** **到****60%** 的提升。![picture.image](https://p3-volc-community-sign.byteimg.com/tos-cn-i-tlddhu82om/10f9ccb653234d1cb3c73dd11cb3e4a8~tplv-tlddhu82om-image.image?=&rk3s=8031ce6d&x-expires=1715962856&x-signature=2hXHl5mMDAgfO0Y%2BPJOQ1D...

基于ClickHouse的复杂查询实现与优化|社区征文

我们在进行计划下发和调度时,主要实现了两种策略。**第一种是依赖调度,** 根据Stage依赖关系定义拓扑结构,产生DAG图,并根据DAG图调度Stage。依赖调度要等到依赖Stage启动以后,才会调度对应的Stage。例如两表Join... 在网络传输和处理某些场景的时候,需要做一种有序性的保证。例如在Sort的场景,Partial Sort和Merge Sort的网络传输过程必须要保证是有序的,传输数据不能出现乱序的情况,否则进行Merge Sort时数据就会出问题,并影响最...

State Migration on Flink SQL

**SQL 作业的 DAG 极易随着用户的修改发生变更的**。包括两种修改:- 第一种是**隐式修改**:例如,在上图的 SQL 中,Bigint Field 后面增加了一个加 2000 这样的逻辑,导致 DAG 图里新增一个 Calc 节点;打开了 M... 仍然需要用户为剩余的有状态节点手动设置 UID / UID Hash,对于这部分节点的定位,我们可以通过 JSON 代码的形式来呈现。按照拓扑排序的顺序以 JSON 的形式呈现算子属性列表,当新增或者删除节点时,通过 JSON 代码的...

State Migration on Flink SQL

**SQL 作业的 DAG 极易随着用户的修改发生变更的**。包括两种修改:* 第一种是 **隐式修改**:例如,在上图的 SQL 中,Bigint Field 后面增加了一个加 2000 这样的逻辑,导致 DAG 图里新增一个 Calc 节点;打开... 仍然需要用户为剩余的有状态节点手动设置 UID / UID Hash,对于这部分节点的定位,我们可以通过 JSON 代码的形式来呈现。按照拓扑排序的顺序以 JSON 的形式呈现算子属性列表,当新增或者删除节点时,通过 JSON 代...

字节跳动 Flink 状态查询实践与优化

一种是状态数据文件,比如上图中的 opA-1-state ,这个文件里面保存着算子 A 在第一个 SubTask 状态的明细数据;还有一种元数据文件,对应上图中的 \_metadata,元数据文件中保存了每个算子和状态文件的映射关系。 ... **我们在使用 State** **P** **rocessor** **API** **的过程中发现一些问题:**1. 每次查询 State 我们都需要独立开发一个 Flink Batch 任务,对用户来说具有一定的开发成本;2. 实现 ReaderFunction 的...

特惠活动

热门爆款云服务器

100%性能独享,更高内存性能更佳,学习测试、web前端、企业应用首选,每日花费低至0.55元
60.00/1212.00/年
立即购买

域名注册服务

cn/top/com等热门域名,首年低至1元,邮箱建站必选
1.00/首年起32.00/首年起
立即购买

DCDN国内流量包100G

同时抵扣CDN与DCDN两种流量消耗,加速分发更实惠
2.00/20.00/年
立即购买

产品体验

体验中心

云服务器特惠

云服务器
云服务器ECS新人特惠
立即抢购

白皮书

一图详解大模型
浓缩大模型架构,厘清生产和应用链路关系
立即获取

最新活动

爆款1核2G共享型服务器

首年60元,每月仅需5元,限量秒杀
立即抢购

火山引擎增长体验专区

丰富能力激励企业快速增长
查看详情

数据智能VeDI

易用的高性能大数据产品家族
了解详情

一键开启云上增长新空间

立即咨询