组合数学 数论 哪个难,偏序集的问题

专业文档是百度文库认证用户/机構上传的专业性文档文库VIP用户或购买专业文档下载特权礼包的其他会员用户可用专业文档下载特权免费下载专业文档。只要带有以下“專业文档”标识的文档便是该类文档

VIP免费文档是特定的一类共享文档,会员用户可以免费随意获取非会员用户需要消耗下载券/积分获取。只要带有以下“VIP免费文档”标识的文档便是该类文档

VIP专享8折文档是特定的一类付费文档,会员用户可以通过设定价的8折获取非会員用户需要原价获取。只要带有以下“VIP专享8折优惠”标识的文档便是该类文档

付费文档是百度文库认证用户/机构上传的专业性文档,需偠文库用户支付人民币获取具体价格由上传人自由设定。只要带有以下“付费文档”标识的文档便是该类文档

共享文档是百度文库用戶免费上传的可与其他用户免费共享的文档,具体共享方式由上传人自由设定只要带有以下“共享文档”标识的文档便是该类文档。

}

这两天被Dilworth、链和反链搞到头昏脑脹终于有点眉目,现在来总结一下

Dilworth定理说的是:对于一个偏序集,其最少链划分数等于其最长反链的长度

Dilworth定理的对偶定理说的是:對于一个偏序集,其最少反链划分数等于其最长链的长度

Dilworth定理先不证,有空再不上来其对偶定理证明如下:

设一个偏序集S的最少反链劃分数是p,最长链长度是r

1.先证p≥r。这是显然的因为最长链长度是r,r个元素中的任意两个都可以比较因此它们必定两两属于不同的反鏈,因此反链个数≥r即p≥r。

2.再证r≥p设X1=S。找出X1的所有极小元组成集合Z1将其从X1删之,得到X2再找出X2的所有极小元组成集合Z2(特别注意Z2中嘚任何元素a2,在X1中必然存在一个元素a1使得a1≤a2否则a2可以放到X1中,这与X1的选取矛盾)再将Z2从X2中删除,得到X3……这样一直下去,总存在一個k使得XK不空但X(K+1)为空这样便得到一条链a1,a2a3,……ak,其中ai属于Xi由于r是最长链长度,因此r≥k另一方面,我们也得到了一个反链划分即X1,X2X3,……XK。由于p是最少反链划分因此k≥p。因此有r≥p证毕。

导弹拦截问题可以重述为:对于一个整数序列s第一问是最长不升子序列,第二问是求其最少的不升序列的划分数

首先定义一个偏序关系。对于s中的任意两个数a、b如果a的出现不晚于b,且a的值不小于b则稱a、b满足偏序关系,记作a≤b特别注意有两点:一是这个小于等于号,它是一种偏序关系而不是数值上的小于等于;二是定义中说的是“a的出现不晚于b”,而不是“a的出现先于b”这是因为偏序关系具有反对称性,即a和a自身也是满足偏序关系的

举个例子,数列s为:12,32,41,34。则红色表示的3和2满足上述定义的偏序关系即3≤2。这样一个不升子序列即一条链,最长不升子序列的长度即最长链的长度根据对偶定理,即等于最少反链划分数由对偶定理的证明,我们可以每次找一个极小元集合来得到最少的反链划分而这里的极小元集合是这样的a的集合:在a的前面不存在使得x≤a的x。再强调一次这里的小于等于号表示的是偏序关系,而不是数值大小根据上面偏序关系的定义,可以通俗的理解为“在a的前面不存在不小于a的数”即在a前面不存在大于等于a的数。转换一下不难发现,即每次贪心找一条仩升子序列!贪心过程如下如下:

其中红色的1,23,4为X1即第一条反链,蓝色的23,4为X2绿色的1为X3。即s的最长不降序列长度为3这可以茬三条反链中各取一个数获得,譬如32,1当然这个复杂度是O(n^2)的,没必要这样做有更优秀的O(nlogn)算法,这是题外话

对于第二个问题,求嘚是最少不升序列划分即链划分,根据定理可以转换成求最长反链长度。实际上一般情况下Dilworth定理是反过来用的,即求最长反链长度轉换成球最少链划分这可以通过求DAG的最小路径覆盖求得。当然这题也可以这样做

网上看了很多文章,说第二问可以贪心解但到底为什么可以贪心解,说的倒是乱七八糟贪心解实际上是运用是Dilworth定理的对偶定理的基础上的,就像上面的证明过程2一样但网上很多都说贪惢解是因为Dilworth定理,这简直就是胡说八道!(当然不排除我没仔细看Dilworth定理的证明过程的原因有可能Dilworth定理的证明也是贪心的,但我看过一次記得不是)

这题是可以贪心解的但不是因为Dilworth定理,更不是直接像上面一样套用其对偶定理(如果这样就更扯淡了)我们重新看第二问,求的是最少不升序列划分即链划分,即最长反链长度反链是什么?就是上升子序列因此第二问求的是最长上升子序列长度。如果峩们把序列反过来如s反过来后是s':4,31,42,32,1;即原序列的最长上升子序列变为s'的最长下降子序列,这是显然的

我们对s‘重新萣义一个不严格的偏序关系,对于s'中的任意两数a和b如果a的出现早于b且a的值大于b,则定义a≤b这里我忽略了反对称性,但对于此题并不影響Dilworth定理的对偶定理的证明

于是可以像上面那样贪心了:每次选一个极小元子集,使得里面的每个a都满足:在a前面不存在值大于a的数再轉换一下,即每次贪心找一条不降序列!于是这样一个新“偏序”关系下的反链划分:

于是其最长链长度为4即s'的最长下降子序列长度为4,即原题第二问答案为4

这个方法也可以用于pku1065。即对于反链也可以定义一种偏序关系使之成为另一种“链”

总结一下,对于特殊情况下嘚链和反链问题可以通过Dilworth定理的对偶定理来求。特殊情况是什么情况就是存在两个不同的偏序定义,使得在一种偏序定义下的反链可鉯构成另一种偏序定义下链!例如导弹拦截求最长不升序列可以通过用贪心法求升序列的个数求得,求最长下降序列可以通过用贪心法求不降序列的个数求得真是神奇啊!!

现在想想hdu那题整除不整除的貌似也可以通过这样来转换?嗯过两天有空想想。

ps:重温第二问求的是最少不升序列划分,实际上我们可以重新定义一种“偏序”关系,使得不升序列在这个定义下是一条反链!那怎样定义可以这樣:反链的“反”就是链。不升序列的定义是a出现于b前且数值上≥b;那什么情况下不符合呢我们可以枚举两个限制的组合:

(1)a出现于b湔且数值上a≥b

(2)a出现于b前且数值上a<b

(3)b出现于a前且数值上b<a

(4)b出现于a前且数值上b≥a

其中(1)即不升序列,实际上(4)也是不升序列,(1)和(4)是等价的只是把变量互换了而已!同理(2)和(3)是等价的。要使(1)和(4)是反链令(2)和(3)是链即可,即把链定义荿升序列!于是不升序列在这种定义下变成反链即第二问变成求最少反链划分。这里要重新解释一下Dilworth定理的对偶定理其贪心思想是用於求最长链长,即最少反链划分方法是每次找一条反链。一句话就是贪心地寻找反链可以得到最少的反链划分。于是每次找一个极小え集(即每次贪心找一个不升子序列)如下:

答案还是4!真是牛逼!

但这种方法只适用于可以定义两种偏序关系使得一种偏序关系下的鏈是另一种偏序关系下的反链的情况!

}

 1个人准备(算法书,习题集网上做题和讨论) 2,1000题=亚洲冠军=世界决赛 3做好资料收集和整理工作 

 

个别题目的分類并不准确

}

我要回帖

更多关于 组合数学 数论 哪个难 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信