C++ 中查找最终安全状态2025年3月24日 | 7分钟阅读 引言在计算机科学与图论相关的分支中,有相当多的情况需要找到一些可以定义为“安全”状态/节点的特定状态/节点。如果一个状态开始时系统不会进入任何循环,则该状态被认为是安全的。这类问题在增强系统可靠性、避免死锁和管理依赖性方面具有实际应用。 在本文中,我们将尝试使用 C++ 专注于查找有向图的最终安全状态的问题。我们将详细介绍问题陈述、方法和代码解释。 问题陈述您有一个有向图,它使用邻接列表表示,并且您可以从一个节点迁移到任何其他节点。为了使一个节点被称为最终安全,离开该节点的所有路径都必须最终到达一个终端节点。终端节点可以定义为没有出边(即不可能迁移到另一个节点)的节点。 目标是识别那些即使从长远来看也是安全的节点。这些是我们需要关注的节点。在这种情况下,许多节点被连续地遵循循环,最终不形成循环(即安全状态)。 ![]() 在这个图中
方法为了解决这个问题,可以对图进行反向,并使用队列实现拓扑排序(如 Kahn 的拓扑排序方法)。我们从终端节点(存在不离开节点的边)的简单情况开始,并逐渐将此方法推广到尽可能多的节点,这些节点的迁移最终将导向安全节点。 步骤:
程序 1输出 Safe nodes are: 2 4 5 6 代码解释
时间复杂度
因此,总时间复杂度为 O(V + E),这对于大多数实际图来说是合理的。 空间复杂度
因此,总空间复杂度为 O(V + E)。这种空间和时间复杂度非常令人满意,并且符合图平面化在实践中的应用目标,而这正是大多数图算法应用的地方。 程序 2输出 Safe nodes are: 2 4, 5 6, 7 说明
查找最终安全节点
时间复杂度 时间复杂度被认为是整体 O(V+E),其中 V 是顶点(节点),E 是边。构建反转图的成本为 O(E)。处理队列也需要 O(E+V),因为每个顶点和边都被访问一次。 空间复杂度: 空间复杂度为 O(V+E) 优点
结论总之,这篇 C++ 文章侧重于如何确定有向图的最终安全属性。反转图和计算拓扑顺序有助于算法上解决这个问题。理解这个概念在需要避免死锁、进行依赖管理或实现系统可靠性的情况下至关重要。 |
C++ 范围和视图简介 C++20 中引入了范围和视图,以改变开发人员处理容器的方式。范围是定义元素序列的另一个概念;算法然后可以在不迭代它们的情况下对它们进行操作。范围增加了……
阅读 13 分钟
简介:集合覆盖问题是计算机科学和优化领域的一个经典问题,属于 NP-hard 问题。这是一个组合优化问题,目标是从给定的一组集合(或宇宙)中找到最小的子集,使得每个元素……
阅读 4 分钟
在当今计算时代,数据以前所未有的规模生成、处理和管理,涉及大型数据集的操作效率至关重要。在计算机科学的各个领域中,文件合并是一种经常出现的操作。无论是...
阅读 12 分钟
介绍:条形排序(Strand Sort)是一种相对简单但高效的排序算法,属于基于比较的排序算法。它最早由 Anne R. Cool 于 1985 年提出。条形排序通过反复从未排序列表中提取已排序的子列表并进行合并来工作……
阅读 16 分钟
在本文中,我们将讨论 C++ 中 rewinddir() 函数的语法、一些信息和示例。什么是 rewinddir() 函数?rewindir() 函数用于将目录流的位置恢复到目录的开头,dirp 必须调用 rewinddir() 函数。与 opendir() 函数类似,rewindir()...
阅读 3 分钟
在本文中,我们将讨论其示例和应用。什么是 Sylvester 序列?Sylvester 序列是一个具有特殊数学性质的迷人的整数系列。它被递归定义,这意味着每个项都是由所有项的乘积产生的……
阅读 4 分钟
在本文中,我们讨论。分段筛是一种普通筛算法的优化版本。与计算所有数的倍数的普通筛不同,分段筛只计算某些素数的倍数...
阅读 6 分钟
引言:竞技场分配,也称为基于区域的内存管理,是一种内存管理技术,其中内存从预先分配的“竞技场”或“池”中批量分配,然后进行细分以满足更小的分配请求。关键思想是分配一个大的连续内存块...
阅读 13 分钟
引言图论是研究图的特征的分子数学之一,图是包含顶点或节点并由边或链接连接的数学结构。这样的图可以反映社会、计算机或任何其他类型的网络、生物结构,甚至……
11 分钟阅读
在本文中,我们将讨论 C++ 中的 std::countr_zero 方法及其语法和示例。C++ 中的 std::countr_zero() 方法是什么?countr_zero 函数在 C++20 中引入。此函数位于 <bit> 头文件中。此函数用于计算末尾零的数量...
阅读 4 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India