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

拓扑排序 - 先将第一个源节点添加到队列的常规顺序

拓扑排序是对有向无环图(DAG)进行排序的一种算法,常用于解决任务调度、项目依赖关系等问题。以下是使用BFS(广度优先搜索)实现拓扑排序的代码示例:

from collections import defaultdict, deque

def topological_sort(graph):
    # 统计每个节点的入度
    in_degree = defaultdict(int)
    for node in graph:
        for neighbor in graph[node]:
            in_degree[neighbor] += 1

    # 将入度为0的节点加入队列
    queue = deque([node for node in graph if in_degree[node] == 0])
    result = []

    while queue:
        node = queue.popleft()
        result.append(node)

        # 将节点的邻居的入度减1,若减至0则加入队列
        for neighbor in graph[node]:
            in_degree[neighbor] -= 1
            if in_degree[neighbor] == 0:
                queue.append(neighbor)

    # 如果图中存在环路,则无法进行拓扑排序
    if len(result) != len(graph):
        raise ValueError("存在环路,无法进行拓扑排序")

    return result

# 示例使用
graph = {
    'A': ['B', 'C'],
    'B': ['D'],
    'C': ['D', 'E'],
    'D': ['E'],
    'E': []
}

result = topological_sort(graph)
print(result)  # 输出: ['A', 'B', 'C', 'D', 'E']

以上代码中,我们首先统计了每个节点的入度,并将入度为0的节点加入队列。然后不断从队列中取出节点,将其加入结果列表,并将其邻居的入度减1。若某个邻居的入度减至0,则将其加入队列。最后,如果结果列表的长度等于图中节点的数量,则说明拓扑排序成功,否则说明图中存在环路导致无法进行拓扑排序。

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

社区干货

万字长文带你漫游数据结构世界|社区征文

数据元素之前的关系在计算机中有两种不同的表示方法:**顺序映像和非顺序映像**,并且由此得到两种不同的存储结构:**顺序存储结构**和**链式存储结构**,比如顺序存储结构,我们要表示复数`z1 =3.0 - 2.3i `,可以直接借... 我们看看插入节点的具体过程(这里只展示中间位置的插入,头尾插入比较简单):![](https://markdownpicture.oss-cn-qingdao.aliyuncs.com/blog/20220108113826.png)![](https://markdownpicture.oss-cn-qingdao...

Actor模型 - 分布式应用框架Akka

Actor 是按照**消息达到的先顺序(FIFO)进行读取和处理**的。**Actor 工作原理**:3 个 Actor 之间基于消息和消息队列的工作流程进行说明。这 3 个 Actor 的工作流程:![picture.image](https://p3-volc-co... `JMM`中定义了一些先行发生的关系,天然存在的,只有以下几种:1. **程序次序规则** `(Program Order Rule)`:一**个线程内**,按照程序代码顺序,写在前面的操作先行发生于后面的操作。2. **管程锁定规则** `(Moni...

超复杂调用网下的服务治理新思路

在开始这个话题前,我们先对标题进行拆解。什么是调用网?下图是一个常规的微服务架构,流量从客户端过来后,会通过 Gateway 进入微服务层,这时微服务之间相互调用、相互依赖就形成了所谓的调用链。这些调用链相互交... 且其实例数达到 300 个以上* 对外 API 普遍涉及至少 10 个微服务在内部技术实践中,我们发现系统达到这个量级后,超复杂调用网就会产生许多棘手的问题。第一个要点是微服务的数量。如果一个系统内的微服务数...

火山引擎大规模机器学习平台架构设计与应用实践

申请到的资源能在一台机器肯定是最好。申请多台机器时,这些机器之间的网络连接肯定是越近越好。所以在调度上我们有一些相应的调度策略,包括多队列调度(排队、抢占)、Gang 调度、堆叠调度等。![1280X1280 (2).PN... 这些算子的性能往往比好的开源实现有非常明显的提升。在通信上:我们开源了 BytePS 的通信框架。BytePS 同时利用了 CPU 和 GPU 两种异构资源来加速通信,在对拓扑的探测上做了细致和智能的优化,并且支持异步和同步...

特惠活动

热门爆款云服务器

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

域名注册服务

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

DCDN国内流量包100G

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

拓扑排序 - 先将第一个源节点添加到队列的常规顺序-优选内容

万字长文带你漫游数据结构世界|社区征文
数据元素之前的关系在计算机中有两种不同的表示方法:**顺序映像和非顺序映像**,并且由此得到两种不同的存储结构:**顺序存储结构**和**链式存储结构**,比如顺序存储结构,我们要表示复数`z1 =3.0 - 2.3i `,可以直接借... 我们看看插入节点的具体过程(这里只展示中间位置的插入,头尾插入比较简单):![](https://markdownpicture.oss-cn-qingdao.aliyuncs.com/blog/20220108113826.png)![](https://markdownpicture.oss-cn-qingdao...
2024年03月
用户使用该功能进行聚合计算时将去除重复值。 新增 圈选控件新增 排除 功能,在圈选组件最外层支持“且排除”逻辑(与原圈选结果平级排列)。更新后,支持用户快速创建具有排除条件的分群包,使得新建分群包结果含义... 主要新增功能包括: 任务状态查询:用户可在该板块查看资源执行状态。 自定义优先级:支持用户对标签任务导入进行优先级的排序,队列顺序决定实际运行顺序。 自定义查询: 支持用户查询已建任务执行情况,帮助排查数据是...
Actor模型 - 分布式应用框架Akka
Actor 是按照**消息达到的先顺序(FIFO)进行读取和处理**的。**Actor 工作原理**:3 个 Actor 之间基于消息和消息队列的工作流程进行说明。这 3 个 Actor 的工作流程:![picture.image](https://p3-volc-co... `JMM`中定义了一些先行发生的关系,天然存在的,只有以下几种:1. **程序次序规则** `(Program Order Rule)`:一**个线程内**,按照程序代码顺序,写在前面的操作先行发生于后面的操作。2. **管程锁定规则** `(Moni...
超复杂调用网下的服务治理新思路
在开始这个话题前,我们先对标题进行拆解。什么是调用网?下图是一个常规的微服务架构,流量从客户端过来后,会通过 Gateway 进入微服务层,这时微服务之间相互调用、相互依赖就形成了所谓的调用链。这些调用链相互交... 且其实例数达到 300 个以上* 对外 API 普遍涉及至少 10 个微服务在内部技术实践中,我们发现系统达到这个量级后,超复杂调用网就会产生许多棘手的问题。第一个要点是微服务的数量。如果一个系统内的微服务数...

拓扑排序 - 先将第一个源节点添加到队列的常规顺序-相关内容

KubeWharf 适合场景 | 社区征文 开源赛道 3:深入云原生

包括资源对象、事件、日志、指标、拓扑、调度、审计等。- KubeZoo:一个轻量级的 Kubernetes 多租户网关,利用现有的命名空间模型,为 Kubernetes 增加多租户能力。KubeZoo 通过捕获和转换请求和响应,实现了租户之... 大规模多租户集群管理:当需要管理一个包含数千个节点和数万个 Pod 的大规模 Kubernetes 集群,或者您需要为多个租户提供 Kubernetes 服务,那么 KubeWharf 项目可以为您提供一个强大而灵活的解决方案。您可以利用...

浅谈分布式操作系统 KubeWharf 的第二批开源项目|社区征文

具体来说我们将 QoS 分为四类:独占型、共享型、回收型和为系统关键组件预留的系统型; **微观上**,Katalyst 最终期望状态无论什么样的 workload,都能实现在相同节点上的并池运行,不需要通过硬切集群来隔离,实现更好的资源流量效率和资源利用效率。 在 QoS 的基础上,Katalyst 同时也提供了丰富的扩展 Enhancement 来表达除 CPU 核心外其他的资源需求: - QoS Enhancement:扩展表达业务对于 NUMA / 网卡绑定、网...

字节跳动 EB 级 Iceberg 数据湖的机器学习应用与优化

经过前文了解到基于 MOR 读时合并的轻量级更新操作是加速特征调研和工程迭代周期的关键。所以我们首先开发、引入了第一个核心特性:Iceberg 上的轻量级数据更新和分支管理。Iceberg 数据湖管理了以下文件类型:Data File 数据文件—表达新增的行记录、Delete File 删除文件—表达行删除信息,在此基础上增加 Update File 更新文件—表达列更新信息。在写入数据、更新或者加列时,用户只需要提供行号、主键和回填列数据信息即可,极大...

热门爆款云服务器

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

域名注册服务

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

DCDN国内流量包100G

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

State Migration on Flink SQL

首先来看看问题一,**SQL 作业的 DAG 是极易随着用户的修改发生变更的**。包括两种修改:- 第一种是**隐式修改**:例如,在上图的 SQL 中,Bigint Field 后面增加了一个加 2000 这样的逻辑,导致 DAG 图里新增一个 Calc 节点;打开了 Mini-batch 优化或者为 Source 新增了Watermark,也会导致作业的 DAG 中新增 Mini-batch Assigner 或者 Watermark Assigner 节点。- 另一种是**显式修改**:例如,新增维表,输入的 Source,输出的 Si...

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

其基本的查询模式可分为两个阶段。第一阶段,Coordinator在收到查询后,将请求发送给对应的Worker节点。第二阶段,Worker节点完成计算,Coordinator在收到各Worker节点的数据后进行汇聚和处理,并将处理后的结果返回。![picture.image](https://p6-volc-community-sign.byteimg.com/tos-cn-i-tlddhu82om/03fa06ace2a44eba8b290fc20f8db5e8~tplv-tlddhu82om-image.image?=&rk3s=8031ce6d&x-expires=1716135652&x-signature=H5iKJwhi...

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

随着接入应用以及DAU日益增加,如何针对ClickHouse JOIN进行优化,提升执行效率、降低错误率。> > > > ![picture.image](https://p3-volc-community-sign.byteimg.com/tos-cn-i-tlddhu82om/46287946818f434... 一个Clickhouse节点作为Coordinator节点,给每个节点分发子查询,子查询sql(tob\_apps\_all替换成本地表,users\_unique\_all保持不变依然是分布式表)2. 每个节点执行Coordinator分发的sql时,发现users\_unique\_al...

干货|8000字长文,深度介绍Flink在字节跳动数据流的实践

字节跳动数据流ETL遇到的挑战主要有四点: * **第一点**, **流量大,任务规模大**。* **第二点**,处在所有产品数据链路最上游,下游业务多,**ETL需求变化频繁**。* **第三点**,**高SLA**要求,下游推... 实时数据需求日益增加,分流规则新增和修改也会日益频繁。如果每次规则变动都需要修改代码并重启Flink Job,会影响很多下游,因此 **分流规则的动态更新**也是这一场景中的强需求。DataLeap 字节跳...

干货|8000字长文,深度介绍Flink在字节跳动数据流的实践

实时数据需求日益增加,分流规则新增和修改也会日益频繁。如果每次规则变动都需要修改代码并重启Flink Job,会影响很多下游,因此**分流规则的动态更新**也是这一场景中的强需求。## 字节跳动数据流实践### 01 - ... 第一个是数据流稳定性治理中最常见的一个问题——**Yarn单机问题**导致Flink任务fail-over、反压、消费能力下降。Yarn单机问题的类型有很多,比如:队列负载不均、单机load高、其他进程导致CPU负载高、硬件故障等...

火山引擎大规模机器学习平台架构设计与应用实践

申请到的资源能在一台机器肯定是最好。申请多台机器时,这些机器之间的网络连接肯定是越近越好。所以在调度上我们有一些相应的调度策略,包括 **多队列调度(排队、抢占)、Gang 调度、堆叠调度** 等。![picture.i... 这些算子的性能往往比好的开源实现有非常明显的提升。在 **通信上** :我们开源了 BytePS 的通信框架。BytePS 同时利用了 CPU 和 GPU 两种异构资源来加速通信,在对拓扑的探测上做了细致和智能的优化,并且支持异...

特惠活动

热门爆款云服务器

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

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

一键开启云上增长新空间

立即咨询