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…...
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...
C# 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
深度学习习题2
1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...
【JavaSE】多线程基础学习笔记
多线程基础 -线程相关概念 程序(Program) 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存…...
MinIO Docker 部署:仅开放一个端口
MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...
Bean 作用域有哪些?如何答出技术深度?
导语: Spring 面试绕不开 Bean 的作用域问题,这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开,结合典型面试题及实战场景,帮你厘清重点,打破模板式回答,…...
书籍“之“字形打印矩阵(8)0609
题目 给定一个矩阵matrix,按照"之"字形的方式打印这个矩阵,例如: 1 2 3 4 5 6 7 8 9 10 11 12 ”之“字形打印的结果为:1,…...
《信号与系统》第 6 章 信号与系统的时域和频域特性
目录 6.0 引言 6.1 傅里叶变换的模和相位表示 6.2 线性时不变系统频率响应的模和相位表示 6.2.1 线性与非线性相位 6.2.2 群时延 6.2.3 对数模和相位图 6.3 理想频率选择性滤波器的时域特性 6.4 非理想滤波器的时域和频域特性讨论 6.5 一阶与二阶连续时间系统 6.5.1 …...
从0开始学习R语言--Day17--Cox回归
Cox回归 在用医疗数据作分析时,最常见的是去预测某类病的患者的死亡率或预测他们的结局。但是我们得到的病人数据,往往会有很多的协变量,即使我们通过计算来减少指标对结果的影响,我们的数据中依然会有很多的协变量,且…...
使用homeassistant 插件将tasmota 接入到米家
我写一个一个 将本地tasmoat的的设备同通过ha集成到小爱同学的功能,利用了巴法接入小爱的功能,将本地mqtt转发给巴法以实现小爱控制的功能,前提条件。1需要tasmota 设备, 2.在本地搭建了mqtt服务可, 3.搭建了ha 4.在h…...
