Two-Processor Scheduling 学习笔记

news/2024/11/14 12:33:06/文章来源:https://www.cnblogs.com/yyyyxh/p/18038529/2PS

为什么有人联考放论文题啊?不过好有趣。参考的 glx 博客。

考虑这么一个问题,给定一张偏序图,即一个满足传递性和非自反性的偏序关系 \(\succ\) 连成的 DAG。你需要对这张图进行拓扑排序,每次可以同时删去一个或者两个零入度点,问最少删多少次可以把图删空并构造方案。

形式化地说,我们需要求出两个等长序列 \(a,b\),满足 \(\forall i>j,a_i/a_i \not\succ a_j/b_j\) 以及 \(a_i \not\succ b_i,b_i \not\succ a_i\),然后最小化这个序列的长度。这里 \(b_i\) 可以取空点 \(\emptyset\)

先考虑怎么玩出答案,首先我们可以得到一些答案的下界。比如我们建一张图 \(G\),如果 \(x \not\succ y,x \not\succ y\)\(x,y\) 互不可达,我们就连一条边。那么删图 \(G\) 的最大匹配一定能导出一个下界,因为同时删去的点只能取 \(G\) 中的一条边。事实上这似乎就是答案,然而一方面一般图最大匹配太难求,另一方面这个东西无法直接导出方案,毕竟删 \(G\) 中的边不能保证都是零入度点。

我们考虑一些更松的上界,对于 \(G\) 中的每一个联通块我们求它的大小除以二上取整的和,显然这是最大匹配的一个上界,也就是答案的下界,记为 \(F(G)\)。我们考虑再在 \(G\) 中删去一些点得到 \(G'\),你会发现 \(F(G')\) 有可能比 \(F(G)\) 还大,这也说明在 \(G\) 中删去一些点之后反而有可能得到一个更紧的下界。我们可以说明我们可以通过这种方式直接让这个下界等于答案并同时给出一个顶到下界的构造。

先考虑怎么构造。我们首先需要得到一个反拓扑序 \(P\),记 \(\alpha(i)\) 表示 \(i\)\(P\) 中的下标,记 \(N(u)=\{\alpha(v)|u\succ v\}\),将每一个 \(N(u)\) 从大到小排成一个序列,我们需要令此拓扑序满足 \(N(P_i)\) 字典序不降。注意到如果 \(u\succ v\),那么一定有 \(\alpha(u)> \alpha(v),N(u)\geq N(v)\)。所以我们只需要对反图拓扑排序,每次取出 \(N(x)\) 字典序最小的 \(x\) 即可构造出 \(P\)

我们说我们维护一个队列,对反图拓扑排序时每取出一个点,扫描反图上的所有出边,将这些出边对应的点从队列中取出,然后按它们在队列中的相对顺序依次放到序列末尾。由于 \(N\) 从大到小排序,我们每取出一个点需要更新其所有前驱的 \(N\) 序列,这些 \(N\) 序列会变成所有 \(N\) 序列中最大的那一批。这个过程可以用队列或可删堆简单维护。

得到 \(P\) 之后,我们再对原图直接进行拓扑排序,每次优先同时删除 \(\alpha_i\) 最大的一个或两个点,就构造出了题意所要求的方案。

接下来考虑证明这为什么是一个最小的操作方案。我们设我们刚刚得到的操作序列为 \((a_1,b_1),(a_2,b_2)\dots (a_k,b_k)\),定义 \(\alpha(\emptyset)=0\),不妨令 \(\alpha(a_i)>\alpha(b_i)\)。我们可以发现 \(\alpha(a_i)>\alpha(a_{i+1})\),否则的话,因为 \(\alpha(a_{i+1})\) 更大但我们在第 \(i\) 轮却没有取它,肯定是因为 \(a_i\succ a_{i+1}\)\(b_i\succ a_{i+1}\),这都会导出 \(\alpha(a_i)>\alpha(a_{i+1})\) 矛盾。

然后我们考虑对着操作序列分段,分段方式是这样的:首先 \(a,b\) 的最后一个元素一定是一段的末尾,我们记 \(a_k,b_k\)\((p_1,q_1)\)。设我们找到的上一段的结尾为 \(p_i,q_i\),然后我们往前找,直到找到第一个 \(\alpha(b_x)<\alpha(p_i)\),令 \((a_x,b_x)\) 为新的段的末尾 \((p_{i+1},q_{i+1})\)

注意到当 \(b_i=\emptyset\) 时,它一定会被作为段的结尾,那么这也就是说我们刚刚分的每一段除去末尾的 \(q_i\),其它的一定是非空的。即下图中的绿色部分(蒯的图)。

graph from glx

我们考虑记 \(G'=G/\{q_i\}\),我们只需要说明我们刚刚操作序列分的每一段除去 \(q_i\) 后正好是 \(G'\) 中的若干个连通块的并,即说明 \(\forall x,y\notin \{q_i\}\)\(x,y\) 不在同一段,那么就有 \(x\succ y\)\(y\succ x\)。这样的话 \(F(G')\) 是一个下界,而这个操作序列明显达到了这个下界。

考虑为什么 \((p_2,q_2)\) 那里 \(\alpha(q_2)<\alpha(p_1)<\alpha(x1_i),\alpha(y1_i)\) 但为什么先选了 \(q_2\),这肯定是因为 \(p_2\succ x1_i,y1_i\),因为由于 \(\alpha(q_2)<\alpha(x1_i),\alpha(y1_i)\) 不可能有 \(q_2\succ x1_i,y1_i\)

接下来只要说明 \((p_2,q_2)\) 那个段里除了 \(q_2\) 其余的全都可以到达 \(p_2\)。按字典序排的好处从这里体现出来了,由于 \(\alpha(x2_i),\alpha(y2_i)>\alpha(p_2)\),所以 \(N(x2_i),N(y2_i)\geq N(p_2)\),那么这些点要么能够到达 \(p_2\) 能到的所有点,要么直接能到达 \(p_2\) 本身,要么能到达一个更加靠后的 \(x2_j,y2_j\) 从而也能到达 \(x1_i,y1_i\) 的所有点。

综上所述,对于相邻两段绿色部分的每一对节点都是可达的。所以不同段的绿色部分的每一对节点两两可达,即在 \(G\) 中这些绿色部分是不联通的。于是就证明了操作次数顶到了下界!

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【原创软件】第8期:pdf转图片软件FAST_PDF2PNG,可选分辨率快速pdf转图片

一、背景 因为经常处理扫描件,需要将扫描件或者电子书先转为图片进行优化处理。为了省去人工时间,制作了一个软件FAST_PDF2PNG。尽管已经有不少软件可以完成该功能,但是杀鸡焉用牛刀。 本工具仅约4M,小巧方便。(优点:速度快,比pdf补丁丁更快,可选分辨率72-1200dpi,含有…

2024暑假集训测试23

前言比赛链接。T2 部分分给得特别足,\(60pts\),而且他不可能剩下的数据全放菊花,所以得到了 \(76pts\),但赛时想了很长时间正解,没有想出来,给后面题剩的时间不多,就都胡暴力了,\(T4\) 甚至忘了剪枝,剪完之后 \(20pts\to 60pts\) 没绷住。 说到这儿要吐槽一下 T4 数据…

了解LSTM网络(英文博客汉化)

Understanding LSTM Networks-了解LSTM网络原文来自于大神Cristopher Colah于2015年在Github上发布的一篇博客, 窃以为此文不失为一篇入门神经网络的经典文章, 遂产生了汉化的想法, 附原文链接Understanding LSTM Networks什么是RNN 人类不会时时刻刻都从头开始思考。譬如当你读…

[Spring]Bean生命周期

生命周期的概要流程 Bean 的生命周期概括起来就是 4 个阶段:实例化(Instantiation) 属性赋值(Populate) 初始化(Initialization) 销毁(Destruction)实例化:第 1 步,实例化一个 bean 对象; 属性赋值:第 2 步,为 bean 设置相关属性和依赖; 初始化:第 3~7 步,步骤…

4-反向传播

从这张图片,可以看出。不管我们有多少层,都可以化简成最简形式。我们添加的层就没有意义。 所以我们要对每一层的输出做非线性变换,增加模型的复杂程度,使它没法化简反向传播的流程pytorch的tensor数据结构看到代码,要能把计算图构建出来,而不是简单的乘除运算在上面这张…

QSortFilterProxyModel和QTreeView排序功能

1、需求,创建一个树有多层结构,同一层按照插入顺序逆序排列; ui.treeView->setHeaderHidden(true); //tree widget头标题是否显示,此处隐藏标题//ui.treeWidget->header()->setHorizontalScrollMode(QAbstractItemView::ScrollPerPixel);ui.treeView->heade…

【数值计算方法】非线性方程求根-数值实验

数值实验python实验本文来自博客园,作者:FE-有限元鹰,转载请注明原文链接:https://www.cnblogs.com/aksoam/p/18355743

图计数(三个思想,贼重要,紫题,非常有东西)

https://www.luogu.com.cn/problem/AT_abc180_f 第3题 图计数 查看测评数据信息给n个节点m条边,构造一些无向图,构造出来的图需要满足以下条件: (1)图中没有自环 (2)图中每个点的度最大是2 (3)图中连通块大小最大为L 问能构造出多少个这样的图出来,答案可能很大,…

CSP19

没啥可说的,暴力大赛水题,贪心的尽量向右构造即可点击查看代码 #include <bits/stdc++.h> #define speed() ios::sync_with_stdio(false),cin.tie(0),cout.tie(0); #define ll long long #define pb push_back #define ull unsigned long long #define pii pair<int…

【闲话】08.12.24

$$人生=log(-2)$$0812闲话 头图:今日推歌: 《苦若吞沙 feat.诗岸》 Zeno来吧 ba ba balala 旋转着 眩晕着 拥抱着 过去的 那一切 全都 ba ba balala 只剩下 空气还 哭泣着 来吧 ba ba balala 奔跑着 跌倒了 泥泞的 用力的 把一切 全都 ba ba balala 只剩下 我还在 等什么太符…

微信支付 Python

需求: 微信打开商品列表页面-> 点击商品后直接显示付款页面-> 点击付款调用微信支付 说明 微信支付需要你申请了公众号(appid, key - 用于签名), 商户号(mch_id, AppSecret - 用于获取openid, 获取code)调起微信支付的页面需要配置授权, 如你的页面是http://www.shazuihu…

洛谷 P4305 不重复数字——题解

洛谷P4305题解传送锚点摸鱼环节 [JLOI2011] 不重复数字 题目描述 给定 \(n\) 个数,要求把其中重复的去掉,只保留第一次出现的数。 输入格式 本题有多组数据。 第一行一个整数 \(T\),表示数据组数。 对于每组数据: 第一行一个整数 \(n\)。 第二行 \(n\) 个数,表示给定的数。…