码迷,mamicode.com
首页 > 编程语言 > 详细

关于WQS二分算法以及其一个细节证明

时间:2018-05-16 15:19:29      阅读:748      评论:0      收藏:0      [点我收藏+]

标签:连通性   等于   等价   技术   需要   比较   答案   ext   最大化   

说实话我感觉这像是“Wang Qishan二分”

应用分析

它的作用就是题目给了一个选物品的限制条件,要求刚好选$m$个,让你最大化(最小化)权值,

然后其特点就是当选的物品越多的时候权值越大(越小)。

算法分析

我们先不考虑物品限制条件,

假定我们要最大化权值。

然后其中我们二分一个$C$,表示选一次物品的附加权值,

如果我们$C$越大,我们选的物品个数越多,权值越大,

于是当选的物品个数大于$m$时,减小$C$,否则增大$C$,

最后计算答案的时候去掉$C$值的影响即可。

问题分析

这看起来是没什么问题的,然而我们考虑一件事情,就是如果我们最终要求$C$是个小数才能刚好选出m怎么办?

有人说:小数二分啊

然而结果是

技术分享图片

所以小数二分会导致效率不高。

我们思考一个问题:我们真的需要得到精确的$C$吗?

其实是不需要的,我们只需要在一个那个正确的$C$下的方案即可,因为$C$在最后从答案中减去了。

然而可能出现一种情况,我假定二分到了$mid$,$mid$会使选的物品数为$m-1$,$mid+1$会使选的物品数为$m+1$......

于是我们思考:能不能不二分到小数?

答案是可以的:

我们二分,当$选的物品个数 \geq m$时我们更新答案。

为什么?

接下来可能是一个比较理论的证明

基于bzoj2654 tree的证明

题意大概是:

给你一个N个点M条边无向带权连通图,每条边是黑色或白色。让你求一棵最小权的恰好有K条白色边的生成树。

解法就是WQS二分+MST

然而这题的二分就有上面的问题

反证:不存在没有白边黑边相等的情况会出现二分在$mid$和$mid+1$的C不确定

首先:如果没有白边黑边相等,我们假定白边权值为$w_1,w_2,w_3..w_x$,黑边$b_1,b_2,b_3...b_y$,增加为$C_1、C_2$,$w_1+C_2 \neq b_1 ...$(所以是$white \geq need$) ...

那么如果发生二分C值无解的情况,那么两个C1,C2($C2=C1+1$)导致的至少选出来的白边数量至少差了2(need-1&&need+1),由于差距大于2的和二的情况在下面等价,所以我们先考虑差距为2

然后由于如果让两条白边与黑边的权值大小关系改变,那么我们至少需要让2条白边+1后的结果分别大于等于2条黑边

所以唯一情况就是刚好有两条白边的权值=两条黑边的权值-1或两条白边的权值=两条黑边的权值(基于C1)

注意我们还没有考虑连通性,但是这是必要条件

由于第一种情况直接不符合题设证明了结论的一部分,我们考虑第二种情况,由于此时的白边权值在C1下等于黑边权值,那么如果我们可以发现这个时候在没有减去我们的克鲁斯卡一定会先统计黑边,使得白边没有被统计。然而这个问题我们可以直接通过在排序的时候允许第二关键字排序是的不存在这种情况。

所以提出的两种无解情况均不存在或者是可以通过算法避免 

如果有不严谨出请指正
然而我并没有写证明的经验

关于WQS二分算法以及其一个细节证明

标签:连通性   等于   等价   技术   需要   比较   答案   ext   最大化   

原文地址:https://www.cnblogs.com/CreeperLKF/p/9045491.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!