最大团的一种剪枝证明

针对这里面的第三种剪枝操作的证明

假设无向图中顶点标号是0 ~ n - 1。
依次求出[n - 1, n - 1], [n - 2, n - 1][n - 3, n - 1], … , [0, n - 1]区间内的最大团siz。
分别记为 s i z n − 1 , s i z n − 2 , s i z n − 3 , . . . , s i z 0 siz_{n-1}, siz_{n-2}, siz_{n-3}, ... , siz_{0} sizn1,sizn2,sizn3,...,siz0

要证明: s i z i − 1 − s i z i ≤ 1 siz_{i - 1} - siz_{i} \leq 1 sizi1sizi1
分两种情况:
第一种: s i z i − 1 − s i z i = 0 siz_{i - 1} - siz_{i} = 0 sizi1sizi=0 或者 s i z i − 1 − s i z i = 1 siz_{i - 1} - siz_{i} = 1 sizi1sizi=1
第二种: s i z i − 1 − s i z i ≥ 2 siz_{i - 1} - siz_{i} \geq 2 sizi1sizi2

第一种情况是很显然会存在的,不做证明。
下面仅证明情况二不会发生:
用反证法:
假设 s i z i − 1 − s i z i = k , k ≥ 2 siz_{i - 1} - siz_{i} = k, k \geq 2 sizi1sizi=k,k2
也就是说加入标号为 i − 1 {i-1} i1的顶点后,最大团由 s i z i siz_{i} sizi 变成了 s i z i + k siz_{i}+k sizi+k
显然,新的最大团肯定包含标号 i − 1 {i - 1} i1 的顶点(否则, 最大团不会变大)。
有这样一个事实:删除最大团中的任何一个顶点,最大团size减少1。
那么将 s i z i + k siz_{i}+k sizi+k 这个新的最大团中标号为 i − 1 i-1 i1的顶点删除,最大团的size变为了 s i z i + k − 1 siz_{i} + k - 1 sizi+k1
s i z i + k − 1 siz_{i} + k - 1 sizi+k1这个团不含 i − 1 i - 1 i1这个顶点,仅由标号在[i, n - 1]的顶点组成。
那么 s i z i + k − 1 siz_{i}+k-1 sizi+k1应该小于等于[i, n - 1]中最大团size,
s i z i + k − 1 ≤ s i z i siz_{i}+k-1 \leq siz_{i} sizi+k1sizi
k ≤ 1 k \leq 1 k1
这与假设相矛盾。
所以k不能大于或等于2。

所以一旦dfs能够更新ans( s i z i − 1 = s i z i + 1 siz_{i - 1} = siz_{i}+1 sizi1=sizi+1), 就不用继续dfs了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值