k-中心问题

首先,我们通过给出一个实例来讲述一下什么是k-中心问题?

       给定一个城市集合以及城市间的距离,从中选取k个城市来设置仓库,使得各城市与离它最近的仓库的距离中的最大者达到最小。(此类问题就称为k-中心问题)

如下图所示:

仓库:C   F    城市:A  B  D  E

A   距离C仓库最近  距离为5

B   距离C仓库最近  距离为15

D   距离F仓库最近  距离为4

E    距离F仓库最近  距离为9

各城市最近仓库距离中的最大值为15

 

本章研究的是k-中心问题以及它在边费用满足三角不等式限制下的加权形式。(重要前提:P≠NP)

问题:

以之前的城市-仓库为例,S为城市,V为仓库,connect(v,S)为最近距离,max{connect(v,S)}为各城市最近仓库距离中的最大值15。现在想要的是最小化该最大值15.

一、参数模型剪枝(Parametric pruning)应用于度量k-中心

首先,我们来介绍一下关于剪枝的概念(参考https://www.cnblogs.com/fusiwei/p/11759489.html):

          以深度优先遍历为例,从起始节点开始深搜,若要完全遍历,则需要搜索所有的节点。但是在解决实际问题的过程中,我们往往可以发现,有一些点和它们的子节点显然不符合题意,压根就没必要进行搜索。那么我们就在算法中加入一个判断条件,使得这棵子树在搜索的时候不会被进入,以此优化时空复杂度。因为这个优化的技巧非常像在树上砍冗余的枝条,所以起了一个名字叫做:剪枝。

支配集(dominating set):

          对于图G = (V, E) 来说,支配集指的是从顶点集 V 中取一些点组成一个集合,使得 V 中剩余的点都与取出来的点中的某个点有边相连.也就是说,设 D 是图的一个支配集,则对于图中的任意一个顶点 u ,要么属于集合 D, 要么与 D 中的顶点相邻.

最小支配集(minimum dominating set ):

          称G 的所有支配集中顶点个数最少的支配集为最小支配集,最小支配集中的顶点个数称为支配数.如下图:

(C,D)(C,D,E)等等都是支配集,也是最小支配集

 

图的平方( square of graph):

        若无向图H中u,v之间(u≠v)存在长度不超过2的路,则H的平方包含边(u,v).如下图所示:

 

下面介绍k-中心算法:

算法思想:将图G中的边按cost大小从小到大进行排序,然后从中找到一个最小的i,使得Gi有一个大小至多为k的支配集(这里的k个支配集可以理解为一开始的城市问题中的设置了仓库的城市集合,其余城市和支配集中的城市有路连接)。

 

                M1={B,C,D}(不唯一)                                  M2={A,B}                                                  M3={A}或{B}或{C}或{D}                                 M4={A}或{B}或{C}或{D}

所以,取M3即可,即最优解为{A}或{B}或{C}或{D}(假设k=1)

具体证明详见《近似算法》第44-45页。

二、加权形式

除了边集上的费用函数外,还给定顶点集上的权函数和界限

得到了下面的改进算法:

区别在于多了第三步和第四步(s(u)表示顶点u在图H中的权重最轻的邻接点)

 

具体证明参见《近似算法》第46-47页

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值