关于导弹拦截问题(偏序集)(转自a2520123)
来源:互联网 发布:Kafka数据怎么接入 编辑:程序博客网 时间:2024/06/07 13:30
这里要讲的是导弹拦截的第二问,即:给定一个序列,求它的最小链覆盖。
经典的做法是对每两个可以搞到一起的点连边,用之前讲的h-k算法求一遍最大匹配,但是,这种方法的复杂度可能会退化到O(n^2)。一种有效的解法是利用dilworth定理求一遍最长反链,其复杂度为O(nlog(n))。
先介绍一下偏序关系:对集合A中的两个元素,引入一个序的概念,设为R,很明显,要么R(x,y),要么R(y,x),要么x,y之间根本没有序。若对一个集合A和定义在A之上的序R,恒有:(1)R(x,x)(自反性);(2)若R(x,y)且R(y,x)则x=y(反对称性);(3)若R(x,y)且R(y,z),则有R(x,z)(传递性),则称A为偏序集,记为(A,R)。
对一个偏序集(A,R),若R(x,y)或R(y,x),则称x,y是可比的,否则就是不可比的。
一个链是偏序集的一个子集,它的任意两个元素都是可比的。
一个反链是偏序集的一个子集,它的任意两个元素都是不可比的。
很明显,导弹拦截中给出的序列对于R(i>j且ai<aj)是一个偏序集。题目所求的就是他的最小链覆盖。
dilworth定理:对一个有限偏序集A,它的最小链覆盖=最长反链。证明自己翻书。
于是,原问题就得到了一个完美的解决:求出原序列的的最长上升子序列,即为所求的答案。
总之,在有限偏序集中,有:
(1)最长链=最小反链覆盖
(2)最长反链=最小链覆盖
再附一个链接:http://blog.csdn.net/emoizhang/article/details/8009123,他讲了一下证明,不过他把链和反链的概念弄混了,不知道现在改过来没有。对他的证明只要看思路就行了。
推荐例题:poj3636
- 关于导弹拦截问题(偏序集)(转自a2520123)
- 关于导弹拦截问题
- [遗传算法]冰与火之歌 (转自 a2520123)
- 拦截导弹问题(贪心算法)
- 【3005】拦截导弹问题(noip1999)
- 拦截导弹问题(贪心算法)
- 导弹拦截问题系列(dp)
- 洛谷P1020/CODEVS1044 导弹拦截(拦截导弹)
- noip2010 导弹拦截 (贪心)
- 拦截导弹(经典dp)
- 导弹拦截(1999noip)
- 拦截导弹(贪心+动态)
- 导弹拦截(动态规划)
- [转]拦截导弹类问题 (Codevs4888零件分组POJ1065Wooden Sticks)(LIS及其覆盖问题)
- 导弹拦截 最长递减(增)子序列问题
- 拦截导弹问题
- 导弹拦截问题
- 导弹拦截问题ACM
- 励志--男儿当自强
- connect by prior
- 35岁前要做的33件事列表
- 虚继承---虚基类
- SQL Server 桌面引擎”(也叫 MSDE 2000)使用方法的简单介绍。
- 关于导弹拦截问题(偏序集)(转自a2520123)
- arch linux下关闭双显卡,没关之前独显是100%运行的
- 生如夏花
- include标签
- 算法连载4
- 【总结】10.4
- 从地址角度看
- param标签
- android中的系统广播