算法 {点覆盖集,点独立集}

算法 {点覆盖集,点独立集}

点覆盖集

定义

给定一个图G, 从中选择若干个点S,满足对于图中的任意边a->b 一定有a \in S || b \in S, S称之为点覆盖集
. 比如图是a->b->c, 则S可以为{b}, {a,c}, ...;

相关定义

#最小点覆盖集#
元素个数最小的点覆盖集, 他一定是唯一的;
. 比如a->b->c, 答案为{b};

@DELI;

#最小权的点覆盖集#
每个点有一个权值W, 找到一个点覆盖集 且其权值之和最小;
. 他不一定是唯一的, 比如a->b->c; W[a]=W[c]=1, w[b]=2, 答案为{b} 或 {a,c};

算法

非二分图求点覆盖集, 通过拆点 将其转换为二分图

@LINK: https://editor.csdn.net/md/?not_checkout=1&articleId=139158366;

性质

点覆盖集 的补集, 一定是 点独立集;
. 证明可以通过反证法, 点覆盖集A 如果他的补集AA不是独立集(即a-b边存在于AA里) 那么因为A没有a,b 所以A没有覆盖a-b边;

@DELI;

这个问题 可以想象为: 每条边就是一个宝物, 你只要选择一个点 就可以拥有该点的所有临界边(即宝物), 问最少选择几个点 可以拥有所有的宝物;

@DELI;

这个图 是有向/无向 都可以, 或者说 他俩是等价的; 因为定义里是不涉及边的方向的, 即a-b, a->b, a<-b 他们都是等价的;

点独立集

定义

给定一个图G(有向/无向均可), 从中选择若干个点S,满足对于图中的任意边a->b 一定有 0 == (a \in S && b \in S), S称之为点独立集
. 比如图是a->b->c, 则S可以为{a,c}, {a}, ...;

相关定义

#最小点独立集#
元素个数最小的点独立集, 他一定是唯一的(因为独立集的补集一定是覆盖集);
. 比如a->b->c, 答案为{a,c};

@DELI;

#最大权的点独立集#
每个点有一个权值W, 找到一个点独立集 且其权值之和最大;
. 比如a->b->c; W[a]=W[c]=1, w[b]=2, 答案为{b} 或 {a,c};

性质

点独立集 的补集, 一定是 点覆盖集;
证明: 点独立集A, 其补集AA, A内任意一点a, 设a的邻接点是b, 那么b肯定不在A里面 而是在AA里, 因此 所有A涉及到的边 AA都覆盖了, 而A没有涉及到的边x-y 因为x,y在AA里 所以AA也会覆盖这类边, 因此 AA会覆盖所有边;

@DELI;

这个问题 可以想象为: 每条边就是一个限制/互斥/矛盾关系 即二选一, 比如边a-b表示他俩有矛盾 不能共存, 你要尽可能多的选择点 使得他们两两之间都没有矛盾;

@DELI;

这个图 是有向/无向 都可以, 或者说 他俩是等价的; 因为定义里是不涉及边的方向的, 即a-b, a->b, a<-b 他们都是等价的;

应用

@LINK: https://editor.csdn.net/md/?not_checkout=1&articleId=139181665;
求图G的最大权独立集 (G满足:传递性,非对称性)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值