MIT6.024学习笔记(二)——图论(1)

news2024/11/28 9:30:47

学习不是为了竞争和战胜他人,而是为了更好地了解自己和世界。 - 达赖喇嘛

文章目录

  • 图的相关概念
  • 涂色问题
    • 基础涂色方法(贪婪算法)
      • 证明
  • 二分图
  • 匹配问题
    • 应用:稳定婚烟问题
    • 算法
      • 性质及其证明

图的相关概念

  • 图的定义:一组(V,E)对。
  • V:一个点集的集合。
  • E:边集,呈现形式为V上的一个关系。什么是关系

V的一个例子为{x1,x2,x3},E的一个例子为{(x1,x2),(x2,x3)},也可写成{x1-x2,x2-x3}。

  • 相邻点:如果两个点之间有边,那么这两个点就是相邻的。
  • 映射:如果(x1,x2)是E的一个元素,那么E映射到x1,E也映射到x2
  • 度数:边集映射到x1的次数称为x1的度数。
  • 环:起点和终点都是同一个点的边称为环。
  • 重边:两个起点和终点完全相同的边称为重边。
  • 简单图:没有环或者重边的图称作简单图。

涂色问题

给定一个图,如果最少能用K种颜色为图涂色,使相邻点拥有不同颜色,那么K称为该图的色度。

基础涂色方法(贪婪算法)

步骤:

  • 将点标号为x1,x2,…,xn
  • 将颜色标号为c1,c2,…,cn
  • 每次用标号最小的合法颜色涂标号最小的尚未上色的点。

易证:使用这种算法,如果图中度数最多的点有d度,那么最多使用(d+1)种颜色。

证明

可以用归纳法证明,设Pn表示有n个点的图满足命题:

  • 基础步骤:n=1时,d=0,用一种颜色,P1=T。
  • 归纳步骤:假设Pn=T,考虑有(n+1)个点的图,该图中的点最多拥有d度。若在该图中取走一个点,那么剩下的n点图中的点也最多拥有d度且一定满足Pn。再加回该点,即使该点拥有d度,且相连的d个点颜色都不同,该点也可以使用第(d+1)种颜色,因此(n+1)点图的色度<=(d
    +1),Pn+1=T。□

二分图

如果一个图可以分成左右两个集合,集合内部的点都不相邻,分属于两个集合的部分点有相邻关系,那么这个图称为二分图。不难看出,二分图色度为2。

匹配问题

  • 匹配:给定一个图,这个图的一个所有点都有且只有1度的子图称作该图的一个匹配。例如:
    在这里插入图片描述

对于这个图,{x1-x5,x2-x8,x3-x6,x4-x7}是该图的一个匹配。注意,{x1-x5}也是该图的一个匹配。

  • 如果一个匹配包括原图的所有点,那么这个匹配是一个完美匹配。
  • 对于带权图来说,一个匹配的权重是匹配中所有边的权重之和。此时完美匹配需满足两个条件:包括所有点且该匹配拥有最小权重。我们也称此时的完美匹配为最小权重匹配

应用:稳定婚烟问题

看下面的图,假定A,B是男生,C,D是女生。边的权重值越小,代表该男生、女生越喜欢ta的该相邻点:
在这里插入图片描述

我们可以看出A更喜欢D,B更喜欢C…假定如果A和C结婚,B和D结婚,那么比起伴侣,A和D都更喜欢对方,那么他们可能发生出轨行为,导致婚烟不稳定。反之,如果A和D结婚,B和C结婚,那么婚烟是稳定的,因为即使C更喜欢A,但A更喜欢他的伴侣D,因此他不愿意和C出轨。
那么,对于一个带权图,怎么找到它的稳定婚烟匹配呢?

算法

首先明确一点:只有二分图才有稳定婚烟匹配,因此如果混入了gay或……那么不存在稳定婚烟匹配。另外,男女生数量必须相同,这点很好理解。我们可以通过一个称作TMA的算法找到一个图的一种稳定婚烟匹配。TMA步骤如下:

  • 每个男生去找他最喜欢的女生示爱。
  • 如果女生发现有多个男生来找她,她查看自己的权重并找到她最喜欢的,拒绝其他男生。注意这并不代表留下的这个男生就是她的最终伴侣。
  • 被拒绝的男生将这个女生从他的权重名单里划掉,然后顺位去找下一个女生示爱。
  • 重复第二步和第三步,直到每个女生面前有且只有一位男生示爱,算法结束,找到稳定婚烟匹配。

举个例子说明。假定对于每个男生和女生,他们的权重名单如下(这里跳过图阶段而直接抽象出信息),最左边的是最喜欢的,最右边的是最不喜欢的:
在这里插入图片描述

  1. 男生按照权重名单去找相对应的女生。
    在这里插入图片描述

  2. 在A面前有三个男生,根据名单,她留下5;剩下的2 4两男生划掉A,分别去找下一个女生:
    在这里插入图片描述

  3. C查看名单,留下4;1划掉C,去找B:
    在这里插入图片描述

  4. B查看名单,留下2;1划掉B,去找E:
    在这里插入图片描述

至此,所有女生面前有且仅有一个男生,算法结束。
经过检验(感兴趣的读者可以自行尝试一下),这个算法是有效的。接下来我们对其性质进行证明。

性质及其证明

  • 性质1:这个算法会在不多于(n2+1)个周期内结束。这个性质很好理解,n个男生,n个女生,男生的名单最多划n2次,除了第一个回合外,每个回合至少有一个男生的名单会被划,因此算法最多执行(n2+1)个周期。
  • 性质2:如果一个女生拒绝了一个男生,那么从她拒绝的那一天开始到算法结束,她身边一定有一个她更喜欢的示爱者。这个性质可以用归纳法来形式化的证明,但直观上也很好理解,假若女孩A拒绝男孩3在某一天,那么当天她留下的那个一定是更喜欢的,未来的某一天她即使拒绝了之前留下的,也说明有更更喜欢的示爱者来了,根据传递性,该性质正确。
  • 性质3:每个人经过该算法的匹配后都有一个伴侣,这点不需证明。
  • 性质4:TMA产生一个稳定婚烟匹配。如果一个男生和女生没能结婚,那么有两种可能:女生拒绝了男生,根据性质2,女生一定更喜欢现在的伴侣,不会产生出轨;男生没来找过女生,此时男生一定更喜欢他现在的伴侣,因此也不会产生出轨。
  • 性质5(证明较复杂,参考知乎文章:稳定婚烟问题):TMA算法中男生能找到保证稳定婚烟下的最佳情侣。用算法进行的轮数来归纳证明:

首先定义:如果A和B是合适的,那么存在一种稳定婚烟匹配中A和B配对。
基础步骤:利用归谬法证明在第1轮结束时,没有男生被合适的女生拒绝,即如果一个男生被女生拒绝,那么他们一定是不合适的。设女生A在第1轮拒绝1而选择了2,那么假设在某一个稳定匹配中,A和1结婚,那么A更喜欢2,而2最喜欢A,所以会发生出轨,则这个婚烟是不稳定的,出现矛盾,假设不成立,证明完成。
归纳步骤:如果在第n轮结束时,依然没有男生被合适的女生拒绝,则证明在(n+1)轮时依然不会有。设在第(n+1)轮,女生A拒绝1而选择了2,假设A和1在某个稳定匹配中结婚,那么A更喜欢2,对2来说,在TMA算法中拒绝他的女生都是不合适的,即不可能在任何稳定匹配中出现2与她们结婚的情况,因此在假想的稳定匹配中,他的最终伴侣一定差于A,那么2也更喜欢A,所以发生出轨,出现矛盾。因此一旦女生对男生合适,那么她就不会拒绝这个男生,又因为男生是按照他的喜好顺序求爱的,因此最后找到的一定是他的稳定最佳情侣。□

  • 性质6:TMA算法中女生总会找到稳定最差情侣。依然用归谬法证明,假设存在一个稳定匹配,该匹配中有一个女生G匹配到比TMA匹配中更差的情侣B,那么她更喜欢在TMA算法中匹配到的男生B;对于B来说,由于性质5,他也一定更喜欢在TMA算法中匹配到的稳定最佳情侣G,所以出现出轨,产生矛盾,命题得证。□
    请添加图片描述
    我是霜_哀,在算法之路上努力前行的一位萌新,感谢你的阅读!如果觉得好的话,可以关注一下,我会在将来带来更多更全面的知识讲解!

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

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

相关文章

We need you | 隐语开源共建计划第一期任务等你认领

作为隐私计算开源界的一颗新星&#xff0c;隐语一直致力于推动隐私计算行业的发展&#xff0c;同时也在不断发展和完善中。通过开放、透明和共享的方式&#xff0c;协同行业优秀人才协同合作&#xff0c;推动隐私计算领域蓬勃发展&#xff0c;这是隐语开源的意义。因此&#xf…

FPGA多路视频叠加融合 HLS算法实现 提供2套工程源码和技术支持

目录 1、前言2、视频叠加模块的功能和性能3、HLS视频叠加融合设计4、vivado工程1--单路同源视频的缩放叠加详细设计方案vivado工程详解SDK工程详解 5、vivado工程2--两路非同源视频的缩放叠加详细设计方案vivado工程详解SDK工程详解 6、上板调试验证7、福利&#xff1a;工程代码…

MySQL底层数据结构

1、引入 一个sql语句在mysql中究竟是如何运行的&#xff1f;又应该通过怎样的方式去查找我们要找的数据&#xff1f;这里就涉及到几种存储数据的算法&#xff1b; 可以做索引的数据结构有数组、链表、二叉搜索树和B树&#xff08;B-树、B树&#xff09;。 2、各种数据结构 …

flutter多版本切换

方式一&#xff1a;符号连接(软链接) 注&#xff1a;无需修改环境变量&#xff0c;也不用重启AndroidStudio mac具体flutter版本切换操作步骤&#xff1a; 1、项目clean然后切换自己需要的分支 2、删除文件夹flutter目录文件&#xff08;这里的flutter是原来的符号连接&…

若依集成分库分表(一)

1.本次需求为同库分表 1.1 引入pom依赖 <!-- sharding-jdbc分库分表 --> <dependency><groupId>org.apache.shardingsphere</groupId><artifactId>sharding-jdbc-core</artifactId><version>4.1.1</version> </dependenc…

Linux内核中内存管理相关配置项的详细解析2

接前一篇文章&#xff1a;Linux内核中内存管理相关配置项的详细解析1 3. Default compressor&#xff08;默认压缩器&#xff09; 此项展开后如下图所示&#xff1a; 此项的内核源码详细解释为&#xff1a; Selects the default compression algorithm for the compressed cac…

谷歌发布一个免费的生成式人工智能课程

在过去几周&#xff0c;我们看到的都是AI将如何改变生活&#xff0c;无论是ChatGPT的文本生成&#xff0c;还是SD&#xff0c;Midjourney 的图像生成&#xff0c;这些AI的特点就是都是生成式的AI。而几天前&#xff0c;谷歌推出了一个生成式人工智能学习课程&#xff0c;课程涵…

美团太细了:Springcloud 微服务优雅停机,如何实现?

说在前面 关于Spring Boot、Spring Cloud应用的优雅停机&#xff0c;平时经常会被问到&#xff0c;这也是实际应用过程中&#xff0c;必须要掌握的点。 在40岁老架构师 尼恩的读者社区(50)中&#xff0c;最近有小伙伴拿到了一线互联网企业如美团、拼多多、极兔、有赞、希音的…

深度学习应用篇-计算机视觉-语义分割综述[5]:FCN、SegNet、Deeplab等分割算法、常用二维三维半立体数据集汇总、前景展望等

【深度学习入门到进阶】必看系列&#xff0c;含激活函数、优化策略、损失函数、模型调优、归一化算法、卷积模型、序列模型、预训练模型、对抗神经网络等 专栏详细介绍&#xff1a;【深度学习入门到进阶】必看系列&#xff0c;含激活函数、优化策略、损失函数、模型调优、归一化…

【新版】系统架构设计师 - 软件可靠性分析与设计

个人总结&#xff0c;仅供参考&#xff0c;欢迎加好友一起讨论 文章目录 架构 - 软件可靠性分析与设计考点摘要可靠性相关基本概念软件可靠性分析可靠性指标串联系统&#xff08;可靠性&#xff09;并联系统&#xff08;可靠性&#xff09;混合系统&#xff08;可靠性&#xff…

(转载)从0开始学matlab—总结

1.编程实例 下面的例子将向大家介绍如何用 MATLAB 解决问题。 例1 温度转换程序 问题&#xff1a; 设计一个 MATLAB 程序&#xff0c;读取一个华氏温度的输入&#xff0c;输出开尔文温度。 答案&#xff1a; 华氏温度和开尔文温度的转换关系式可在物理学课本中找到。其关系式…

压力测试分为稳定性测试和破坏性测试

压力测试分为稳定性测试和破坏性测试 压力测试是一种对软件系统进行负载测试的常见手段&#xff0c;可以评估其在不同负载条件下的稳定性、性能和可靠性等指标。常见的压力测试分为两种类型&#xff1a;稳定性测试和破坏性测试。 1. 稳定性测试 稳定性测试也称为基准测试&#…

shell脚本基础3——正则表达式

文章目录 一、基本了解二、基本正则表达式2.1 字符匹配2.2 位置锚定2.3 匹配次数2.4 分组 三、扩展正则表达式3.1 字符匹配3.2 位置锚定3.3 匹配次数3.4 分组3.5 或者 一、基本了解 正则表达式分2种&#xff1a;基本正则表达式和扩展正则表达式。grep 、sed命令使用正则较多&am…

软考A计划-系统架构师-官方考试指定教程-(9/15)

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分享&am…

spiderflow的初步使用

1、简介 spider-flow 是一个爬虫平台&#xff0c;以图形化方式定义爬虫流程&#xff0c;无需代码即可实现一个爬虫 官网地址&#xff1a;https://www.spiderflow.org/ 2、spiderflow的初步使用 2.1拉取&#xff0c;配置和启动 从gitee上拉取 执行db里面的sql 里面会有6张表 …

为什么说高性能计算工程师越老越吃香?还难以被AI替代?

一般越老越吃香的岗位或者行业&#xff0c;一定是拥有无法或者难以轻易被替代的经验。 这些经验一般是靠时间、靠思维、靠试错不断积累起来的。然而AIGC来了&#xff0c;好像宣布AI会取代所有人一样&#xff0c;如经验丰富的律师、医生、教师等等&#xff0c;尤其是贡献了AIGC…

java ssm贸易平台-物流管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java ssm贸易平台-物流管理系统是一套完善的web设计系统&#xff08;系统采用SSM框架进行设计开发&#xff0c;springspringMVCmybatis&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主…

【运维知识进阶篇】用阿里云部署kod可道云网盘(DNS解析+CDN缓存+Web应用防火墙+弹性伸缩)

本篇文章依托kod可道云项目继续介绍阿里云产品&#xff0c;介绍DNS解析&#xff0c;CDN缓存&#xff0c;Web应用防火墙&#xff0c;弹性伸缩。 DNS解析 这里我将二级域名设为kod&#xff0c;一般都是设为www和&#xff0c;带表示可以不加二级域名&#xff0c;直接访问。也可以…

基于html+css的图展示117

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

Java 八股文-集合框架篇

Java 集合框架 一、常见集合 1.说说有哪些常见集合&#xff1f; 集合相关类和接口都在java.util中&#xff0c;主要分为3种&#xff1a;List&#xff08;列表&#xff09;、Map&#xff08;映射&#xff09;、Set(集)。 其中Collection是集合List、Set的父接口&#xff0c…