Dilworth 定理
这是一个关于偏序集的定理,事实上它也可以扩展到图论,dp等中,是一个很有意思的东西
偏序集
偏序集是由集合 S S S以及其上的一个偏序关系 R R R定义的,记为 ( S , R ) (S,R) (S,R)
偏序关系:
对于一个二元关系 R ⊂ S × S R\subset S\times S R⊂S×S,如果其满足:
- ∀ x ∈ S , x R x \forall x\in S,xRx ∀x∈S,xRx 自反性
- ∀ x , y ∈ S \forall x,y\in S ∀x,y∈S,若 x R y xRy xRy且 y R x yRx yRx,则 x = y x=y x=y 反对称性
- x R y , y R z → x R z xRy,yRz\rightarrow xRz xRy,yRz→xRz 传递性
显然自然数集 N N N以及最常见的小于等于关系 ≤ \leq ≤, ( N , ≤ ) (N,\leq) (N,≤)就构成了一个偏序集
事实上 ( N ∗ , ∣ ) (N^*,|) (N∗,∣)也是一个偏序集,其中 ∣ | ∣表示正整数的整除关系
以下为了讨论方便,我们将 R R R简记为 ≤ \leq ≤,当然它可以指代小于等于关系之外的其它关系
此外, ∀ x , y ∈ S \forall x,y\in S ∀x,y∈S,如果 x ≤ y x\leq y x≤y或 y ≤ x y\leq x y≤x,那么我们就说它们是可比的,否则说它们是不可比的
定义完了偏序集,我们可以从图上来看看它具体的样子
哈斯图(Hasse 图)
考虑一个偏序集 ( S , ≤ ) (S,\leq) (S,≤), ∀ x , y ∈ S \forall x,y\in S ∀x,y∈S,如果 x ≤ y x\leq y x≤y且不存在 z S . T . x ≤ z ≤ y z\ S.T. \ x\leq z\leq y z S.T. x≤z≤y,我们称为 y y y覆盖 x x x,那么此时我们就连一条从 x x x指向 y y y的有向边,最后得到的图就称为这个偏序集 ( S , ≤ ) (S,\leq) (S,≤)的Hasse图
比如下图是 x , y , z {x,y,z} x,y,z的幂集关于包含关系得到的Hasse图
由于偏序关系满足了反对称性,所以Hasse图里面一定没有自环(否则就会合并成一个点),所以我们可以说Hasse图一定是一张DAG
其它偏序集的前置芝士
还是记我们要讨论的偏序集为 ( S , ≤ ) (S,\leq) (S,≤)
链:
偏序集中的一个全序子集。形式化地说,若集合 C ⊂ S C\subset S C⊂S,且 ∀ a , b ∈ C \forall a,b\in C ∀a,b∈C, a , b a,b a,b是可比的,那么 C C C就是 S S S的一个链
链这个名字起的就很有水平,因为我们不难发现,偏序集中的一个全序子集,其在Hasse图中似乎就一定表现为一条链。比如上图中的 { { x , y , z } , { x , z } , { x } , { ϕ } } \{\{x,y,z\},\{x,z\},\{x\},\{\phi\}\} {{x,y,z},{x,z},{x},{ϕ}}就是一个全序子集,在图中刚好也表现成一条链。但我没有严格证明,这边搁置。
类似地,我们定义一个反链
反链:
若集合 C ⊂ S C\subset S C⊂S,且 ∀ a , b ∈ C \forall a,b\in C ∀a,b∈C, a , b a,b a,b是不可比的,那么 C C C就是 S S S的一个反链
在图上看的话, { { x } , { y } , { z } } \{\{x\},\{y\},\{z\}\} {{x},{y},{z}}就是一个反链
深度:
最长链大小
宽度:
最长反链大小
以上两个定义也是相当的形象。因为我们不难发现,如果把Hasse图按照偏序关系从低到高排列的话,链在图中往往就是一条竖着的,而反链是横着的,由此给出如上定义
最小链划分:
将集合 S S S划分为最少的若干个不相交的链
最小反链划分:
将集合 S S S划分为最少的若干个不相交的反链
Dilworth 定理
现在可以给出Dilworth 定理的具体内容了
Lemma1 对于任意有限偏序集,其最长反链大小必等于最小链划分中链的数目
其对偶形式也成立:
Lemma2 对于任意有限偏序集,其最长链大小必等于其最小反链划分中反链的数目
以下讨论均假定偏序集有限
总结以下:
最小链划分 = 最长反链大小 = 偏序集宽度
最小反链划分 = 最长链大小 = 偏序集深度
先来证Lemma2:
记定理中的最长链大小为n,我们对n做数学归纳法
显然n=1时定理成立
若n=k时定理成立,我们来证 n=k+1时定理成立
此时偏序集中的最长链长度为k+1,我们取出集合 S S S的所有极大元,组成集合 M M M,显然 M M M是一个反链,并且考虑 S − M S-M S−M,其最大链长一定为k(因为取出了所有的极大元),根据之前的归纳假设, S − M S-M S−M的最小反链划分数目为 k,再加上M自己是一个反链,从而此时S的最小反链划分数为 k+1 = 最长链长度 □ \square □
再来看Lemma1:
考虑偏序集 ( S , ≤ ) (S,\leq) (S,≤),记 ∣ S ∣ = m |S|=m ∣S∣=m,我们对m进行归纳
m = 1 m=1 m=1时Lemma1显然成立
若 m = k m=k m=k时定理成立,我们来证 m = k + 1 m=k+1 m=k+1时定理成立:
设 A A A是集合 S S S的一条最长反链,记为
A = { a 1 , a 2 , . . . a w } A = \{a_1,a_2,...a_w\} A={a1,a2,...aw}
其中 ∣ A ∣ = w |A|=w ∣A∣=w
我们取
D ( A ) = { x ∉ A ∣ ∃ α ∈ S , x ≤ a } D(A) = \{x\notin A|\exists \alpha \in S,x\leq a\} D(A)={x∈/A∣∃α∈S,x≤a}
U ( A ) = { x ∉ A ∣ ∃ α ∈ S , a ≤ x } U(A) = \{x\notin A|\exists \alpha \in S,a\leq x\} U(A)={x∈/A∣∃α∈S,a≤x}
显然 D ( A ) ⋃ U ( A ) ⋃ A = S D(A)\bigcup U(A)\bigcup A = S D(A)⋃U(A)⋃A=S
若存在最长反链 A A A使得 D ( A ) , U ( A ) D(A),U(A) D(A),U(A)均非空:
A A A是 S S S的最长反链,故 A A A也是 A ⋃ D ( A ) A\bigcup D(A) A⋃D(A)的一个最长反链。注意到 ∣ U ( A ) ∣ ≥ 1 |U(A)|\geq 1 ∣U(A)∣≥1,故 ∣ A ⋃ D ( A ) ∣ ≤ k |A\bigcup D(A)|\leq k ∣A⋃D(A)∣≤k,从而由归纳假设, A ⋃ U ( A ) A\bigcup U(A) A⋃U(A)可以划分为 w w w条链 c 1 , c 2 , . . . c w c_1,c_2,...c_w c1,c2,...cw,其中 c i c_i ci的极大元是 a i a_i ai.(这一点显然)
同理, A ⋃ D ( A ) A\bigcup D(A) A⋃D(A)也可以划分为 w w w条链 d 1 , d 2 , . . . d w d_1,d_2,...d_w d1,d2,...dw,其中 d i d_i di的极小元是 a i a_i ai
从而,我们就可以将 S S S划分为 w w w条链: c 1 ∪ d 1 , . . . . c w ∪ d w c_1\cup d_1,....c_w\cup d_w c1∪d1,....cw∪dw
若对于任意最长反链 A A A,都有 D ( A ) = ϕ D(A)=\phi D(A)=ϕ或 U ( A ) = ϕ U(A)=\phi U(A)=ϕ
由假设,任一条反链 A A A必定构成全上界或者全下界。在 S S S中选一个极大元 y y y,再选一个极小元 x x x满足 x ≤ y x\leq y x≤y, { x , y } \{x,y\} {x,y}构成一条链 C C C,从而在集合 S − C S-C S−C中,任一条最长反链的大小为 w − 1 w-1 w−1(必定去除了一个元素),从而根据归纳假设, S − C S-C S−C的最小链划分数为 w − 1 w-1 w−1,再加上 C C C自己是一条链,故 S S S的最小链划分数为 w w w
□ \square □
应用举例
求一个序列的最大非递增序列长度以及其最少可以划分为多少个非递增序列
考虑由(位置,元素大小)这个二元组组成的集合,再定义一个偏序关系 < < <:
a < b a<b a<b当且仅当 a a a的位置< b b b的位置且 a a a的值 < b <b <b的值
从而这就构成了一个偏序集 ( s , < ) (s,<) (s,<),并且要求的分别就是集合的最长反链以及最小反链划分数
第一个问题可以直接dp即可,第二个问题,根据Dilworth 定理,实际上就是求偏序集的最长链大小,实际上也就是序列的LIS,非常妙的一个转化。
与DAG
之前说过,Hasse图就是一个DAG,而反过来,我们将DAG的点作为集合 S S S的元素,将偏序关系 ≤ \leq ≤定义为点之间的可达性,就定义了一个偏序集 ( S , ≤ ) (S,\leq) (S,≤)
从而DAG上的最小可重路径覆盖(要求覆盖所有点)就等价于偏序集 ( S , ≤ ) (S,\leq) (S,≤)上的最小链覆盖
同理,将DAG上的有向边作为集合 T T T的元素,将偏序关系 ≤ ′ \leq' ≤′定义为边之间的可达性,就得到的另一个偏序集 ( T , ≤ ′ ) (T,\leq') (T,≤′)
从而DAG上的最小可重路径覆盖(要求覆盖所有边)就等价于偏序集 ( T , ≤ ′ ) (T,\leq') (T,≤′)上的最小链覆盖
Erdős–Szekeres 定理
含至少 r s + 1 rs+1 rs+1个元素的实数序列 { a } \{a\} {a}要么有一个长为 r + 1 r+1 r+1的不下降子序列,要么有一个长为 s + 1 s+1 s+1 的不上升子序列
Proof:
设序列长度为 n ≥ r s + 1 n\geq rs+1 n≥rs+1,定义偏序集 { ( i , a i ) } i = 1 n \{(i,a_i)\}_{i=1}^{n} {(i,ai)}i=1n,其上的偏序关系 ≤ \leq ≤定义为:
( i , a i ) ≤ ( j , a i ) ⇔ ( i ≤ j ∧ a i ≤ a j ) (i,a_i)\leq (j,a_i)\Leftrightarrow (i\leq j \ \wedge \ a_i\leq a_j) (i,ai)≤(j,ai)⇔(i≤j ∧ ai≤aj)
假设该偏序集的宽度 ≤ s \leq s ≤s,则由Dilllworth定理可知其最小链覆盖数 ≤ s \leq s ≤s,若这些链的长度都 ≤ r \leq r ≤r,则总元素数 ≤ r s < r s + 1 ≤ n \leq rs< rs+1\leq n ≤rs<rs+1≤n
矛盾。
□ \square □
相关文章:

Dilworth 定理
这是一个关于偏序集的定理,事实上它也可以扩展到图论,dp等中,是一个很有意思的东西 偏序集 偏序集是由集合 S S S以及其上的一个偏序关系 R R R定义的,记为 ( S , R ) (S,R) (S,R) 偏序关系: 对于一个二元关系 R ⊂…...

BUUCTF---web---[BJDCTF2020]ZJCTF,不过如此
1、点开连接,页面出现了提示 传入一个参数text,里面的内容要包括I have a dream。 构造:?/textI have a dream。发现页面没有显示。这里推测可能得使用伪协议 在文件包含那一行,我们看到了next.php的提示,我们尝试读取…...

力扣刷题---2206. 将数组划分成相等数对【简单】
题目描述🍗 给你一个整数数组 nums ,它包含 2 * n 个整数。 你需要将 nums 划分成 n 个数对,满足: 每个元素 只属于一个 数对。 同一数对中的元素 相等 。 如果可以将 nums 划分成 n 个数对,请你返回 true …...

2461. 长度为 K 子数组中的最大和(c++)
给你一个整数数组 nums 和一个整数 k 。请你从 nums 中满足下述条件的全部子数组中找出最大子数组和: 子数组的长度是 k,且子数组中的所有元素 各不相同 。 返回满足题面要求的最大子数组和。如果不存在子数组满足这些条件,返回 0 。 子数…...
range for
1. 基于范围的for循环语法 C11标准引入了基于范围的for循环特性,该特性隐藏了迭代器 的初始化和更新过程,让程序员只需要关心遍历对象本身,其语法也 比传统for循环简洁很多: for ( range_declaration : range_expression ) {loo…...

leetcode230 二叉搜索树中第K小的元素
题目 给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 个最小元素(从 1 开始计数)。 示例 输入:root [5,3,6,2,4,null,null,1], k 3 输出:3 解析 这道题应该是能做出…...
.Net Core学习笔记 框架特性(注入、配置)
注:直接学习的.Net Core 6,此版本有没有startup.cs相关的内容 项目Program.cs文件中 是定义项目加载 启动的地方 //通过builder对项目进行配置、服务的加载 var builder WebApplication.CreateBuilder(args); builder.Services.AddControllers();//将…...

利用AI技术做电商网赚,这些百万级赛道流量,你还不知道?!
大家好,我是向阳 AI技术的飞速扩展已经势不可挡,不管你承不承认,AI 已经毫无争议的在互联网中占有一席之地了 无论你是做内容产业的,还是做电商的,你现在都躲不开 AI。 现在互联网行业的竞争就是这么残酷 互联网行业…...
leetcode-560 和为k的数组
一、题目描述 给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的子数组的个数 。 子数组是数组中元素的连续非空序列。 注意:nums中的元素可为负数 输入:nums [1,1,1], k 2 输出:2输入:num…...
Spring Boot实战指南:从入门到企业级应用构建
目录 一、引言 二、快速入门 1. 使用Spring Initializr创建项目 三、Spring Boot基础概念与自动配置 1. 理解SpringBootApplication注解 2. 自动配置原理 3. 查看自动配置报告 四、Spring Boot核心特性及实战 1. 外部化配置 2. Actuator端点 3. 集成第三方库 五、Sp…...

OneAPI接入本地大模型+FastGPT调用本地大模型
将Ollama下载的本地大模型配置到OneAPI中,并通过FastGPT调用本地大模型完成对话。 OneAPI配置 新建令牌 新建渠道 FastGPT配置 配置docker-compose 配置令牌和OneAPI部署地址 配置config.json 配置调用的渠道名称和大模型名称 {"systemEnv": {&qu…...

Training-Free Consistent Text-to-Image Generation # 论文阅读
URL https://arxiv.org/pdf/2402.03286 TL;DR 2024 年 2 月 nvidia 的文章。提出了一种不需要任何额外训练的主体保持方法,可以一次生成的 batch 中,通过多个 prompt 生成对应的多张图片,这些图片都可以拥有一个主体。 本文提出的方法通过…...
Spring 中常用的手动装载 bean 方法
在 Spring 的 bean 装载条件中,虽然 Spring 给我们提供了非常好用便捷的 Condition 相关注解,但是很多时候 Condition 相关注解并不满足我们的需求,我需要更复杂的条件手动控制是否装置 bean。这个时候我们就可以实现 Spring 为我们提供的几个…...
如何合理设置Java线程池大小
如何合理设置Java线程池大小:依据任务类型定制策略 Java线程池的合理配置直接关系到系统性能和资源利用率。根据任务性质的不同,合理的线程池大小设置策略也有所区别,主要包括CPU密集型、IO密集型及混合型任务。 1. CPU密集型任务 特点&am…...
python3 pandas
pandas - Python Data Analysis Library...

【B站 heima】小兔鲜Vue3 项目学习笔记Day02
文章目录 Pinia1.使用2. pinia-计数器案例3. getters实现4. 异步action5. storeToRefsx 数据解构保持响应式6. pinia 调试 项目起步1.项目初始化和git管理2. 使用ElementPlus3. ElementPlus 主题色定制4. axios 基础配置5. 路由设计6. 静态资源初始化和 Error lens安装7.scss自…...
RedisTemplate 实现基于 Value 操作的简易锁机制
在高并发场景下,确保操作的原子性和避免竞态条件至关重要。Redis 提供了丰富的数据结构和操作,是实现分布式锁的一个高效选择。本文将介绍如何使用 RedisTemplate 的 opsForValue().setIfAbsent() 方法来实现一种简单的锁机制,并提供一个示例…...

其它高阶数据结构⑦_Skiplist跳表_概念+实现+对比
目录 1. Skiplist跳表的概念 2. Skiplist跳表的效率 3. Skiplist跳表的实现 3.1 力扣1206. 设计跳表 3.2 Skiplist的初始化和查找 3.3 Skiplist的增加和删除 3.4 Skiplist的源码和OJ测试 4. 跳表和平衡搜索树/哈希表的对比 本篇完。 1. Skiplist跳表的概念 skiplist是…...

力扣230. 二叉搜索树中第K小的元素
Problem: 230. 二叉搜索树中第K小的元素 文章目录 题目描述思路复杂度Code 题目描述 思路 直接利用二叉搜索树中序遍历为一个有序序列的特性: 记录一个int变量rank,在中序遍历时若当前rank k则返回当前节点值 复杂度 时间复杂度: O ( n ) O(n) O(n);其…...

Linux_应用篇(07) 系统信息与系统资源
在应用程序当中,有时往往需要去获取到一些系统相关的信息,譬如时间、日期、以及其它一些系统相关信息,本章将向大家介绍如何通过 Linux 系统调用或 C 库函数获取系统信息, 譬如获取系统时间、日期以及设置系统时间、日期等&#x…...

Redis底层数据结构之深入理解跳表(2)
上一篇文章中我们详细讲述了跳表的增添、查找和修改的操作,这篇文章我们来讲解一下跳表在多线程并发时的安全问题。在Redis中,除了网络IO部分和大文件的后台复制涉及到多线程外,其余任务执行时全部都是单线程,这也就意味着在Redis…...

在 Ubuntu 24.04 LTS 上安装 Jenkins 并配置全局工具(Git、JDK、Maven)
在 Ubuntu 24.04 LTS 上安装 Jenkins 并配置全局工具(Git、JDK、Maven) Jenkins 是一款开源的持续集成和持续交付(CI/CD)工具,在 DevOps 实践中有着广泛的应用。本文将手把手带你在 Ubuntu 24.04 LTS 系统中完成 Jenkins 的安装,并配置所需的全局工具:Git、JDK 和 Maven…...

当丰收季遇上超导磁测量:粮食产业的科技新征程
麦浪藏光阴,心田种丰年!又到了一年中最令人心潮澎湃的粮食丰收季。金色的麦浪随风翻滚,沉甸甸的稻穗谦逊地低垂着,处处洋溢着丰收的喜悦。粮食产业,无疑是国家发展的根基与命脉,是民生稳定的压舱石。在现代…...
B+树知识点总结
核心目标:减少磁盘 I/O 数据库系统(如 MySQL)的主要性能瓶颈通常在于磁盘 I/O(读取和写入数据到物理硬盘的速度远慢于内存访问)。B 树的设计核心就是最大限度地减少访问数据时所需的磁盘 I/O 次数。 一、B 树的基本结…...
vue-20(Vuex 状态管理的最佳实践)
Vuex 状态管理的最佳实践 Vuex 是管理大型 Vue.js 应用状态的一个强大工具,但其有效性取决于其组织和维护的质量。管理不善的 Vuex 存储可能会变得难以控制、难以调试,并成为性能瓶颈。本课程深入探讨构建 Vuex 存储的最佳实践,重点关注可维…...

自托管图书搜索引擎Bookologia
简介 什么是 Bookologia ? Bookologia 是一个专门的书籍搜索引擎,可以在几秒钟内找到任何书籍。它是开源的,可以轻松自托管在 Docker 上,为用户提供一个简单而高效的书籍查找体验。 主要特点 简洁的用户界面:界面设计…...
.net jwt实现
.NET 中实现 JWT 认证:详细指南 在现代的 Web 应用开发中,安全认证是至关重要的一环。JSON Web Token(JWT)作为一种广泛使用的认证机制,为 API 提供了安全、便捷的身份验证方式。本文将详细介绍如何在 ASP.NET Core 项…...
C++11完美转发
在 C11 之前,泛型函数在传递参数时无法保证参数的原始类型(左值或右值)导致额外的拷贝或移动操作,完美转发是一种高效传递技术,能够保持参数的原始特性,避免额外的性能开销 完美转发是指在泛型编程中以参数…...

C#里与嵌入式系统W5500网络通讯(3)
有与W5500通讯时,需要使用下面的寄存器: PHYCFGR (W5500 PHY Configuration Register) [R/W] [0x002E] [0b10111XXX] PHYCFGR configures PHY operation mode and resets PHY. In addition, PHYCFGR indicates the status of PHY such as duplex, Speed, Link. 这张表格详细…...
中达瑞和SHIS高光谱相机在黑色水彩笔墨迹鉴定中的应用
在文件检验与物证溯源领域,对书写材料(如墨水)进行快速、准确、无损的鉴别至关重要。由陈维娜等人撰写的《高光谱技术结合化学计量法鉴别黑色水彩笔墨迹》(发表于《光谱学与光谱分析》2023年第7期)利用中达瑞和SHIS凝采…...