离散数学_九章:关系 —— 拓扑排序

news2025/1/8 5:51:39

拓扑排序

  • 背景知识
    • 相容
    • 一个引理
    • 什么是拓扑排序
  • 拓扑排序算法(伪代码)
  • 几个实例
    • 例1
    • 例2

假设一个项目由20个不同的任务构成。某些任务只能在其他任务结束之后完成。如何找到关于这些任务的顺序?

为了对这个问题建模,我们在任务的集合上构造一个偏序,使得:
a ≺ b iff a 和 b 是任务且直到a结束后b才能开始
( iff:if and only if,当且仅当)

为安排好这个项目,需要得出与这个偏序相容的所有20个任务的顺序,下面我们说明如何做到这一点

背景知识

相容

如果只要 aRb 就有 a ≼ b,则称一个全序 ≼偏序R是相容的
(回顾一下aRb:表示(a, b)∈R。当(a, b)属于R时,称a与b有关系R)

一个引理

引理:每个有穷非空偏序集 ( S,≼ ) 至少有一个极小元

证明:选择S的一个元素a0 。如果 a0 不是极小元,那么存在元素a1满足a1 ≺ a0。如果 a1 不是极小元,那么存在元素a2 ,满足a2 ≺ a1 ······

(继续这一过程,使得如果 an 不是极小元,那么存在元素 an+1 满足 an+1≺ an 。因为在这个偏序集元素个数有穷,所以这个过程一定会结束并且具有极小元an

什么是拓扑排序

一个偏序构造一个相容的全序称为拓扑排序。

❗注意我们这里将要描述的拓扑排序算法对任何有穷非空偏序集都有效

为了在偏序集 (A, ≼ ) 上定义一个全序,首先选择一个极小元素a1 ,由上面的引理可知,这样的元素存在。接着,(A - { a1 }, ≼ )也是一个偏序集。如果它是非空的,选择这个偏序集的一个极小元 a2 然后再移出 a2 ,如果还有其他的元素留下来,在 A - { a1 , a2 } 中选择一个极小元 a3 继续这个过程,只要还有元素留下来,就在 A - { a1 , a2 ,······,ak } 中选择极小元ak+1

因为A是有穷集,所以这个过程一定会终止。
最终产生一个元素序列a1 , a2 ,······,an。所需要的全序 ≼t 定义为:a1t a2t ······ ≺t an

这个全序与初始偏序相容
(因为如果在初始偏序中 b ≺ c ,c在算法的某个阶段 b 已经被移出时,被选择为极小元,否则 c 就不是极小元。

*①集合 S 与定义在其上的偏序关系R 一起称为偏序集,记作 (S, R)

②全序:偏序集,且 S 中的每对元素都是可比的;
可比:a,b是集合S中的元素,存在a ≼ b 或 b ≼ a

③极小元素:假设a为极小元(素),则任取与a具有关系R的元素x,都有aRx(a ≼ x,在Hasse图中的表现:汇聚到下部的结点)

拓扑排序算法(伪代码)

procedure topological sort(( S, ≼ ):有穷非空偏序集)
	k:=1
	while S ≠ ∅
		ak := S的极小元
		S := S - {ak}
		k := k+1

return a1, a2, a3, ···, an

(上面的 " ak ": k是下标)

几个实例

例1

📗找出与偏序集( { 1,2,4,5,12,20 },| )相容的一个全序。

🔴解:

先画出Hasse图:

在这里插入图片描述
第一步选择一个极小元,这个元素只能是1(因为1是唯一的极小元)
然后除去我们所选的那个极小元:

下面四种都可以:
在这里插入图片描述

例2

📗一个计算机公司的开发项目需要完成7个任务。其中某些任务只能在其他任务结束后才能开始。考虑如下建立任务上的偏序,如果任务 Y 在 X 结束后才能开始,则任务 X < 任务 Y 。这7个任务对应于这个偏序的哈塞图如图所示。求一个任务的执行顺序,使得能够完成这个项目

在这里插入图片描述

🔴解:

可以通过执行一个拓扑排序得到7个任务的排序。排序的步骤显示在下面的图中。这个排序的结果,A ≺ C ≺ B ≺ E ≺ F ≺ D ≺ G,给出了一种可行的任务次序。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/541985.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mysql强制修改mysql数据库密码(无需原密码)

1.创建新记事本new_password.txt 定位到记事本绝对路径&#xff0c;我直接放桌面 C:\Users\bao123\Desktop 为用户为 root 新密码 123456为例 ALTER user rootlocalhost identified by 123456; 为用户为 mytest 新密码 88888888为例 ALTER user mytestlocalhost identifi…

opencv_c++学习(十三)

一、创建滑动条 createTrackbar(const String & trackbarname, const String & winname, int* value, int count, onChange , TrackbarCallback 0, void * userdata 0)trackbarname:滑动条的名称。 winname:创建滑动条窗口的名称。 value:指向整数变量的指针&#xff0…

Harbor在arm架构下亲测编译成功

先安装好Docker,docker-compose 华为云arm架构安装Docker arm架构安装docker-compose Harbor官网: https://github.com/goharbor/harbor/releases Harbor官方没有提供arm架构的包,需要自己编译,我编译好的版本是:harbor-1.9.1 大家可以按我的博客,自己去编译,或评论留言给…

Vivado 下 LED 流水灯实验

目录 Vivado 下 LED 流水灯实验 1、实验简介 2、实验环境 3、实验原理 3.1、LED硬件电路 3.2、程序设计 4、Vivado 工程 4.1、创建工程 4.2、编写流水灯的 verilog代码 1. 点击 Project Manager 下的 Add Sources 图标&#xff08;或者使用快捷键 AltA&#xff09;。…

基于协同过滤的推荐算法

基于协同过滤的推荐算法 基于协同过滤&#xff08;CF&#xff09;的推荐基于近邻的协同过滤基于用户的协同过滤&#xff08;User-CF&#xff09;基于物品的协同过滤&#xff08;Item-CF&#xff09;User-CF 和 Item-CF 的比较基于协同过滤的推荐优缺点基于模型的协同过滤隐语义…

WoW 游戏软件

访问【WRITE-BUG数字空间】_[内附完整源码和文档] 我们选择Tcp协议进行传输&#xff0c;之所以采用tcp,首先是因为tcp传输稳定&#xff0c;相比于udp不稳定的传输&#xff0c;tcp能确保消息一定传输出去。然后是tcp有服务器&#xff0c;相比于 p2p 无服务器模型&#xff0c;tc…

RocketMQ 下载安装

一、下载地址 https://rocketmq.apache.org/download/ 下载完成解压即可 二、安装 2.1 系统环境变量配置 1、右键我的电脑–>属性 ​ 2、高级系统设置–环境变量 ​ 3、系统变量中–>新建 2.2 启动NAMESERVER cmd命令框执行进入至‘MQ文件夹\bin’下 start mqnames…

【教学类-33-02】食物加加加2.0版(3、4、5、10、15、20以内数字加法,随机抽数)

作品展示 3以内点数加法&#xff1a;加法最大值6 4以内点数加法&#xff1a;加法最大值8 背景需求&#xff1a; 幼儿在完成“5以内加法21题、5以内减法21题”时&#xff0c;有两个特点&#xff1a; 1、50%幼儿口算、另外50%不会做的孩子虽然画圈划圈&#xff0c;但更多还是习…

数据结构_图

目录 1. 图的基本概念 1.1 图的定义 1.1.1 有向图 1.1.2 无向图 1.1.3 简单图、多重图 1.1.4 完全图&#xff08;也称简单完全图&#xff09; 1.1.5 子图 1.1.6 连通、连通图和连通分量 1.1.7 强连通图、强连通分量 1.1.8 生成树、生成森林 1.1.9 顶点的度、入度和出…

MapReduce【自定义InputFormat】

MapReduce在处理小文件时效率很低&#xff0c;但面对大量的小文件又不可避免&#xff0c;这个时候就需要相应的解决方案。 默认的输入格式为TextInputFormat&#xff0c;对于小文件&#xff0c;它是按照它的父类FileInputFormat的切片机制来切片的&#xff0c;也就是不管一个文…

Java基础学习(17)网络编程

Java基础学习 一、 网络编程1.1 什么是网络编程1.2 常见的软件架构&#xff1a;1.3 网络编程的三要素1.4 IP1.4.1 InetAddress用法 1.5 端口号1.6 协议1.6.1 UDP协议1.6.1.1 UDP的三种通信方式 1.6.2 TCP协议1.6.2.1 TCP底层原理 一、 网络编程 1.1 什么是网络编程 解释&…

C++常用的支持中文的GUI库Qt 6之一:下载、安装与使用

C常用的支持中文的GUI库Qt 6之一&#xff1a;下载、安装与使用 因为Qt发展变化较快&#xff0c;网上许多介绍Qt的下载、安装与使用已过时&#xff0c;初学者常因行不通而受挫&#xff0c;故此发布本文&#xff0c;以Qt 6.2.4开源版在Windows 10安装与使用为例介绍。 C好用的GU…

DM8:达梦数据库宕机版本记录汇总(持续更新中)

DM8:达梦数据库宕机版本记录汇总&#xff08;持续更新中&#xff09; 环境介绍1 SQL引起的数据库故障1.1 SQL引起的数据库故障汇总表1.2 gdb dmserver core 调试得到数据库崩溃时的内存信息1.3 优化参数解决故障 环境介绍 在测试环境或生产环境&#xff0c;特别情况下会遇到数…

go tool pprof 参数 ‘-base‘ 和 ‘-diff_base‘ 之间的区别

go tool pprof 工具是用于分析由 runtime/pprof包 或 net/http/pprof包产生的profile数据&#xff0c;完整的帮助文档在 https://github.com/google/pprof/blob/main/doc/README.md &#xff0c;pprof 工具支持的参数很多&#xff0c;可以用命令 go tool pprof --help来查看全部…

DJ5-4 交换局域网(第一节课)

目录 一、局域网概述 1、LAN 的特点和分类 2、常见的网络拓扑结构 二、计算机与局域网的连接 三、局域网体系结构 四、链路层寻址地址 1、MAC 地址分配 2、MAC 地址识别 五、ARP 地址解析协议 1、ARP 地址解析协议 2、ARP&#xff1a;两个主机位于同一个局域网 3、…

网络计算模式复习(六)

什么是CDN CDN的全称是Content Delivery Network&#xff0c;即内容分发网络。 其目的通过在现有的Internet中增加一层新的网络架构&#xff0c;将网站的内容发布到最接近用户的网络“边缘”&#xff0c;使用户可以就近取得所需的内容&#xff0c;解决Internet网络拥挤的状况&…

socket套接字通信 TCP传输控制协议/IP网络协议 5.18

B/S :浏览器和服务器 C/S :客户机和服务器 网络的体系结构&#xff1a; 网络的层次结构和每层所使用协议的集合 网络采用分层管理的方法&#xff0c;将网络的功能划分为不同的模块 OSI模型&#xff1a; 共7种&#xff1a; 应用层&#xff1a;接收用户的数据&#xff0c;面…

Blender基础技巧小结(三)

本文续签一篇&#xff1a;Blender基础技巧小结&#xff08;二&#xff09;_皮尔斯巴巴罗的博客-CSDN博客 将物体显示为模板&#xff0c;类似Maya Template 四窗口视图 调整3d视图远截面 Blender并不直接支持放样&#xff0c;可以用第三方插件&#xff0c;但效果并不好 基于me…

usb摄像头驱动打印信息

usb摄像头驱动打印信息 文章目录 usb摄像头驱动打印信息 在ubuntu中接入罗技c920摄像头打印的信息如下&#xff1a; [ 100.873222] usb 3-2: new high-speed USB device number 5 using xhci_hcd [ 101.230728] usb 3-2: New USB device found, idVendor046d, idProduct08e5 …

SpringMVC的拦截器(Interceptor)

文章目录 1 拦截器概念2 拦截器入门案例2.1 环境准备2.2 拦截器开发步骤1:创建拦截器类步骤2:配置拦截器类步骤3:SpringMVC添加SpringMvcSupport包扫描步骤4:运行程序测试步骤5:修改拦截器拦截规则步骤6:简化SpringMvcSupport的编写 3 拦截器参数3.1 前置处理方法3.2 后置处理方…