TOPIC 2: Center Selection Problem(1)

问题定义

  • INPUT
    • n n n个地点: S = { s 1 , s 2 , . . . , s n } S = \{s_1,s_2,...,s_n\} S={s1,s2,...,sn}
    • 中心的个数: k k k
  • OBJECTIVE
    • 在所有地点中,使得地点到最近的中心的最大距离最小: min ⁡ max ⁡ s ∈ S min ⁡ c ∈ C e n t e r s d i s t ( s , c ) \min \max _{s\in S} \min _{c\in Centers} dist(s,c) minmaxsSmincCentersdist(s,c)

Center Selection Algorithm

  • 思路:
    1. 初始化:任意选一个site加入中心点集合
    2. 选择距离中心点集合最远的site加入中心点集合
      - 注:离中心点集合最远的site是指 max ⁡ s ∈ S min ⁡ c ∈ C e n t e r s d i s t ( s , c ) \max _{s \in S} \min _{c\in Centers} dist(s,c) maxsSmincCentersdist(s,c)
    3. 重复2直到选出了 k k k个中心点
  • 代码:
def center_selection(sites, k):
	# 初始化:选择第一个site加入中心点集合
    initial = sites[0]
    centers = [initial]
	# 重复步骤2,选择一个最远的点,加入中心点
    for i in range(k - 1):
        futherst = 0
        for site in sites:
            if site in centers:
                continue
            dis = assign_center(centers, site)[0]
            if dis > futherst:
                futherst = dis
                next_site = site
        # next_site.display_location()
        centers.append(next_site)
    return centers

算法上界

令最优解为 r ∗ r^* r,算法得到的解为 r r r

  1. 首先考虑vitural center selection算法,即当我们知道 r ∗ r^* r时,我们可以构建该 2 − a p p r o x i m a t i o n 2-approximation 2approximation算法如下:
    1. 任意选择一个地点,加入中心点集合
    2. 将所有与该中心点距离小于等于 2 r ∗ 2r^* 2r的点移除,重复步骤1直到选出了k个中心点。
      - 注:若此时仍有点未被覆盖,则说明 r ∗ r^* r无法达到,因为对于中心c而言,同属于同一中心的点之间的最大距离不超过 2 r ∗ 2r^* 2r
  2. 对于中心选址算法而言,若 s s s离中心集合的距离大于 2 r ∗ 2r^* 2r,则可看作与虚拟中心选址算法相同,否则,说明所有的点离中心的距离都小于 2 r ∗ 2r^* 2r
  3. 因此,此为 2 − a p p r o x i m a t i o n 2-approximation 2approximation算法

例子

  1. r ( C ) ≈ 2 r ( C ∗ ) r(C) \approx 2r(C^*) r(C)2r(C)
    选(0,0)为初始点
  2. r ( C ) = r ( C ∗ ) r(C) = r(C^*) r(C)=r(C)
    选(1,1)为初始点
    在这里插入图片描述
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值