zoukankan      html  css  js  c++  java
  • 【learning】加权拟阵与贪心

    ## 首先。。

      这篇东西的话算是一个关于拟阵部分知识的小总结,有些语言相对来说偏向便于理解方面,所以可能。。有一些说法会不是那么严谨大概是这样

      ​

    一些概念

      线性无关:一组数据中没有一个量可以写成其余量的线性表示,也就是对于({x_1,x_2,...x_n})不存在一组不全为(0)({k_1,k_2,k_3...,k_n})满足(sumlimits_{i=1}^{n}k_ix_i=0)

      线性相关:就是存在一组不全为(0)({k_1,k_2,k_3...,k_n})满足(sumlimits_{i=1}^n k_ix_i=0)
      ​

    拟阵是啥

      一个有限拟阵是一个满足下列条件的二元组(M=(S,I))

      1、(S)是一个有限集

      2、(I)是由(S)的一些子集组成的有限非空集合(非空族),这些子集称为(S)的独立子集。属于(I)的子集要满足的条件是如果(Bin I)(Asubseteq B),那么有(Ain I)。这种性质称为遗传性(如果(I)满足这种性质我们称(I)是遗传的)。注意,(emptyset in I)

      3、若(Ain I,Bin I)(|B|>|A|),那么(exists xin B-A)使得(Acup {x}in I)。这种性质称为交换性质(称(M)满足交换性质)

      举个栗子,(M=(S,I))是一个拟阵,其中:

    [S={1,2,3},I={size<=2的子集}={emptyset,{1},{2},{3},{1,2},{1,3},{2,3}} ]

    ​  拟阵有很多不同的类型(e.g.组合拟阵、分割拟阵、向量拟阵、列拟阵、环拟阵、图拟阵、匹配拟阵etc.)然而在这里都不会展开讲

      如果说拟阵中的一个独立子集(A)不存在扩展,那么就称它是最大的,然后有这样一个比较重要的性质:拟阵中所有的最大独立子集都具有相同的大小

    ​   

    加权拟阵

      如果说一个拟阵(M=(S,I))关联了一个权重函数(w),这个函数为(S)中的每一个元素(x)赋予一个严格大于0的权重(w(x)),那么我们称这个拟阵(M)是加权的。子集(A)的权值就是

    [w(A)=sumlimits_{xin A}w(x) ]

      现在考虑一个这样的问题:在加权拟阵中寻找最大权重独立子集,换句话说就是,给定一个加权拟阵(M=(S,I)),寻找独立集(Ain I)使得(w(A))最大。

      这个问题的求解我们可以用贪心,具体一点的话就是:

    1、将(S)中的元素按照(w)降序排列

    2、现在有一个集合(A)(初始的时候为(emptyset)),按照上面排好的顺序依次考虑(S)中的每个元素,如果说这个元素(x)满足(Acup {x})是独立的那么将(x)加入(A)

    3、(A)就是我们要求的答案

      

    ​  然后可以这样求解是因为拟阵具有以下几个十分优秀的性质

    拟阵具有贪心选择性

      假定(M=(S,T))是一个加权拟阵,加权函数为(w),且(S)已经按照权重单调递减排序。令(x)(S)中第一个满足({x})独立的元素(存在的话qwq),如果存在这样的({x}),那么存在(S)的一个最优子集(A)包含(x)

      

    如果一个元素在初始的时候不是最优的选择,那么在随后也不会被选入最优集合中

      (这里需要两个引理来说明,第二个是第一个的逆否命题)

    1、对于拟阵(M=(S,I)),如果(x)(S)中的一个元素,而且是(S)的某个独立子集(A)的一个扩展,那么(x)也是(emptyset)的一个扩展

      证明:由于(x)(A)的一个扩展,说明(Acup {x})是独立的,由于(I)是遗传的,所以({x})必然是独立的,所以是(emptyset)的一个扩展

    2、对于拟阵(M=(S,I)),如果(x)(S)中的一个元素,且不是(emptyset)的一个扩展,那么它也不是(S)中任何独立子集(A)的扩展

      证明:(就是1的逆否命题)

    ​  所以我们可以得知,如果一个元素首次不能用于构造独立集,之后永远也不可能用到了

      因此寻找起始元素时,贪心地直接跳过(S)中那些不是(emptyset)的扩展的元素不会导致错误的结果,因为这些元素永远都不会被用到

      

    拟阵具有最优子结构性质

      对于加权拟阵(M=(S,I))(x)(S)中第一个被贪心选出的元素,则接下来寻找一个包含(x)的最大权重独立子集的问题归结于寻找加权拟阵(M'=(S',I'))的一个最大权重独立子集的问题,其中:

    [egin{aligned} S'&={yin S:{x,y}in I}\ I'&={Bsubseteq S-{x}:B cup {x}in I} end{aligned} ]


      
      所以我们就可以说明贪心的正确性了ovo
      

      所以其实有些问题我们可以将其转为求加权拟阵的最大权重独立子集这样的一个问题,然后我们就可以开心贪心啦

    ​  这里为了方便理解举一个比较简短的例子:最小生成树的求解,可以看成求解(M_G=(S_G,I_G))的最大权重独立子集,其中(w)就是边权,(S_G)是边集,(Ain I_G)当且仅当(A)是无圈的

      

    (好的先写这么多了吧哈哈哈哈。。。剩了一些证明的坑。。晚点再说吧。。。)

  • 相关阅读:
    centos 安装python3.6 简易安装过程
    包装类型
    剑指offer二叉树中和为某一值的路径
    剑指offer 捡绳子
    按位与的技巧
    SpringBoot 登录拦截功能的实现
    AIO实现简单http服务器
    真题-数的分解
    重建二叉树
    旋转数组的最小数字
  • 原文地址:https://www.cnblogs.com/yoyoball/p/9218159.html
Copyright © 2011-2022 走看看