首页 > 编程语言 >【数据结构与算法】拓扑排序,关键活动,关键路径 详解

【数据结构与算法】拓扑排序,关键活动,关键路径 详解

时间:2024-06-24 12:27:31浏览次数:29  
标签:排序 int 拓扑 stk 任务 详解 关键 数据结构 id

拓扑排序算法

bool topologicalSort() {
	stack<int> stk;
	int id[N];
	int cnt = 0;
	for (int i = 1; i <= n; i++) {
		if (!inDeg[i]) {
			stk.push(i);
		}
		id[i] = inDeg[i];
	}
	while (stk.size()) {
		int t = stk.top();
		stk.pop();
		cout << t << " ";
		cnt++;
		for (auto i : g[t]) {
			id[i]--;
			if (!id[i]) {
				stk.push(i);
			}
		}
	}
	cout << endl;
	return cnt == n;
}

举例简述"拓扑排序"所解决的实际问题。

拓扑排序在很多实际问题中都有应用,其中一个常见的例子是任务调度问题。

假设有一系列的任务需要完成,而这些任务之间存在一定的依赖关系,即某些任务必须在其他任务完成后才能开始。你的目标是找到一种完成任务的顺序,使得每个任务在其依赖的任务完成后才开始。

任务可以看作是图的节点,任务之间的依赖关系可以看作是有向边。拓扑排序就是找到一种节点的排列顺序,使得每个节点(任务)都在其有向边指向的节点(依赖的任务)之后。

通过拓扑排序,可以得到一个满足所有依赖关系的任务完成顺序。如果无法找到这样的顺序,那么说明任务之间的依赖关系存在环,也就是说存在无法完成的任务。

请图示”拓扑排序”的过程。


什么是关键活动?

l(j)=e(j)的活动(活动的最迟开始时间 = 活动的最早开始时间),即关键路径上的所有活动。

什么是关键路径?

从源点到收点的最长的一条路径,或者全部由关键活动构成的路径。

举例简述"关键路径"所解决的实际问题。

可用于估算工程项目完成时间。

标签:排序,int,拓扑,stk,任务,详解,关键,数据结构,id
From: https://blog.csdn.net/qq_34988204/article/details/139782568

相关文章

  • 【数据结构与算法】最小生成树,Prim算法,Kruskal算法 详解
    最小生成树的实际应用背景。最节省经费的前提下,在n个城市之间建立通信联络网。Kruskal算法(基于并查集)voidinit(){for(inti=1;i<=n;i++){pre[i]=i;}}llroot(lla){lli=a;while(pre[i]!=i){i=pre[i];......
  • 【JS逆向百例】某点数据逆向分析,多方法详解
    前言最近收到粉丝的私信,其在逆向某个站点时遇到了些问题,在查阅资料未果后,来询问K哥,K哥一向会尽力满足粉丝的需求。网上大多数分析该站点的教程已经不再适用,本文K哥将提供3种解决方案,对于webpack不太熟练的小伙伴来说,这是一个很好的练手案例:逆向目标目标:某点数据,排行榜......
  • 深入理解泛型(经典详解)
    深入理解泛型(经典详解):<T>T和T的使用以及public<E>List<E>get()泛型方法详解、类型擦除、通配符的使用、泛型类的应用、泛型之间的继承_泛型t-CSDN博客一、为什么要使用泛型?泛型俗称“标签”,使用<E>表示。泛型就是在允许定义类,接口时通过一个标识表示某个属性的类型或者......
  • 关于锁的使用,千万不要踩这个坑!(附带Synchronized详解和ZooKeeper、Redis等分布式锁详解
    1、分布式锁在分布式系统中,我们经常会使用各种锁来保证数据的一致性和并发安全。一些常见的分布式锁实现包括:基于ZooKeeper的分布式锁:使用ZooKeeper节点的特性来实现分布式锁。基于Redis的分布式锁:利用Redis的原子性操作和过期时间特性来实现分布式锁。Redlock算法:由......
  • 线程进程以及多线程多进程(超详解)
    目录前言一、什么是进程和线程进程(Process)线程(Thread)多线程(Multithreading)多进程(Multiprocessing)相互组合关系二、资源分配进程私有资源共享资源线程私有资源共享资源多进程私有资源共享资源多线程私有资源共享资源进程的共享和私有资源线......
  • C/C++ const 和 volatile 关键字要点总结
    const 和 volatile 是C/C++的两个关键字,各有不同的用途和要点。constconst 关键字用于声明常量,一旦声明为常量,其值就不能被修改。const 可以用于各种数据类型,也包括指针、函数参数、函数返回值和类成员函数。声明常量:声明为 const 的常量,在初始化后不能被修改。co......
  • MVCC详解
    什么是MVCC:MVCC(MultiVersionConcurrencyControl的简称),代表多版本并发控制。与MVCC相对的,是基于锁的并发控制,Lock-BasedConcurrencyControl)。MVCC最大的优势:读不加锁,读写不冲突。在读多写少的OLTP应用中,读写不冲突是非常重要的,极大的增加了系统的并发性能学习MVCC前,我们先......
  • C语言编译和链接详解(通俗易懂,深入本质)
    我们平时所说的程序,是指双击后就可以直接运行的程序,这样的程序被称为可执行程序(ExecutableProgram)。在Windows下,可执行程序的后缀有.exe和.com(其中.exe比较常见);在类UNIX系统(Linux、MacOS等)下,可执行程序没有特定的后缀,系统根据文件的头部信息来判断是否是可执行程序。可......
  • 数据结构十天期末计划day0
    复习知识点大纲刷一套期末试题(了解题型分布和知识点)//下面这套年份有点早近几年的试卷老师都不发0.0,新的没有判断题重在后期编译题理论部分定义逻辑结构时可不考虑物理结构。(F) 绪论部分知识线性表采用顺序存储,必须占用一片连续的存储单元。(T)了解线......
  • 数据结构/排序/堆排序 --- 逻辑讲解、代码实现、图形展示
    一、总体逻辑:    1.写一个交换的函数swap备用    2.写一个维护堆的性质的函数heapify备用    3.数组-> 堆(不明白的别急,后面会详细解释)    4.维护整个堆(看不懂别急别急别急)    5.堆顶和堆底的最后一个元素互换(不明......