最大独立集问题

By sayhello 2018年8月5日

Given N sets of integers, remove some sets so that the remaining all sets are disjoint with one 另东西。 Find the optimal solution so that the number of sets remaining at the end is 最大值。 please explain your algorithm properly rather than pasting code .

剖析

在上加标题构成的数学模型正是简略。,每一组都被以为是东西点。,是否两组达到目标数字完整同一的,与两组的点侧面衔接。终极的,它将形成物东西无向图。,我们家执意命令这人图的最大孤独集。命令东西图的最大孤独集执意求其补图的最堆积。

最堆积

在这一点上绍介一下最堆积

事先安排东西无向图g=(v),E),是否你属于E,任性地,v)属于U,同时它属于E,U是G的完整子图。 G的完整子图U是G的最堆积当且仅当U不容纳在G的更大的完整子图中,即U执意最大的完整子图。

如下图:

此图的最堆积有:

 

我们家怎样才能找到东西数字?普通搜索将是N*2 ^ n的工夫复合物。,因而你必要修剪,记载若干条款,DP DFS的思惟。先写加密。

#define SIZE 102
int 垫子[上胶料] [份量]  /*图矩阵*/
int 份量[份量]
int mx;
int 堆栈[体积] [体积]
void 国际标准化组织 N,int num,int 脚步)

    if(num==0){
        是否(脚步) > MX)
            mx=step;
        }
        return ;
    }

    为(int) i=0;i=0;i--){
        int sz =0;
        为(int) j=i+1;j

上面简略地说一下思绪(杂种的下标是从0开端的):
dp[i]表现从i到n-1达到目标最堆积的杂种的数。
列举每个杂种的,看一眼这人杂种的,谁数字大于它的杂种的。,记载这些杂种的,与反复地处置杂种的。。。。
健康状况如何修剪?
是否X杂种的在组条款,K杂种的的处置,判别
x+n-k <= mx

x+dp[k] <= mx
两个前提。只贫穷东西设置,何苦持续种植。。

最大孤独集

最大孤独集执意其补图的最堆积
poj1419是东西很一直的求最大孤独集的成绩,你可以试着去做

二分图的最大孤独集

图是东西二分图,这么它的最大孤独集执意聚合工夫可以处理的成绩了 |最大孤独集| = |V|-|最大婚配数|
证实:
设最大孤独片断为U,最大婚配数为M,M交叠的顶峰集中是EM。。
证实u=v v-m m,我们家有两个脚步来证实u<=|V|-|M|和|U|>=|V|-|M|
1 先证实 |U|<=|V|-|M|
M达到目标两个晚期的衔接起来。,持有m金中都有东西点缺点U集。,因而M<=|V|-|U|
2 再次证实u>v v-μm
承认(X),Y属于M
率先,我们家发生必不可少的事物有东西Uü>=Ⅴ-ε。,这么,我们家能把M集中达到目标晚期的放到U中吗?
承认在(A),x),(b,y),(a,B)不参加EM搜集
是否(a),B)衔接,有拳击竞赛更大的竞赛。,反驳
是否(a),B)断线,A->X-> Y-> B有项目新的提高路途,因而有东西更大的竞赛,反驳
因而我们家可以拘押将M达到目标晚期的涂到U中必定弱衔接到诸如此类点。,因而|U|>=|V|-|EM|+|M|=|V|-|M|
因而,|U|=|V|-|M|

两部图的最小顶峰交叠

构成释义:

寻觅点集,如此,图中诸如此类边的至多东西晚期的都位置该图中。。二分图的|最小圆点集|=|最大婚配|

证实:
基金构成释义,执意最大婚配达到目标每个婚配的东西杂种的执意最小圆点集。
是否两个晚期的不参加消磨,那最大婚配就会制定|M|+1,发生反驳。这么最小圆点集<=|最大婚配|
我们家如今只看最大婚配M,是否最小圆点集不足m,因而必不可少的事物有东西不克不及沾手的面貌,如此|最小圆点集|>=|最大婚配|
因而有|最小圆点集|=|最大婚配|
由于普通图,NP 难以应付的问题或情况,由于两部图,它可以是聚合可解的。

最小远远地交叠

构成释义:

东西有向无圈图,必要用最小的不可被切割的简略远远地交叠持有杂种的。。

构图:

找到二分图,将原始身负重担的人达到目标持有杂种的划分为两个节(x集中为i),y集中是i′,是否原始图中有I ->j的有向边,在两部图中,I->J的有向边是建立的。。终极最小远远地交叠度=ⅤⅤ-μm

证实:

上图中,对应左派的DAG证明了右手的二分图,可以找到二分图的东西最大婚配M:1->3'' 3->4'',这么M的这两个婚配边健康状况如何对应于远远地达到目标边?
两节图的边对应于DAG达到目标有向边。:1 -3'对应于左图达到目标1~3。,以这种办法,DAG的1具有继位杂种的(3 Ma的特别的后续杂种的)。,由于两个图的东西顶峰与东西边相关性。!),因而1弱变成DAG路途的起点。,同一,3 -4'对应于左图达到目标3~4。,3弱是完毕的起点,如此,原始图中有4个顶峰。,负2个延续顶峰,仍两个顶峰,DAG远远地的晚期的,每个顶峰对应于东西远远地。。二分图中寻觅最大婚配M,执意找到了对应DAG达到目标非远远地煞尾顶峰的最大数量,DAG是DAG最小的起点。,DAG的最小远远地数。
接下来,排东西两点婚配图。反复办法的加密:

#define SIZE 100

int 垫子[上胶料] [份量]  /*图矩阵*/

int match1[SIZE];
int 婚配[份量]

int 色[份量]

bool 国际标准化组织 N,int u){
    为(int) i=0;i

再写东西二分图最大婚配的非反复办法

#define SIZE 100

int 垫子[上胶料] [份量] /*图矩阵*/

int match1[SIZE];
int 婚配[份量]

int 队列[体积]
int head,tail;

int 预[份量]

int maxMatch(int N){
    int ret = 0;
    memset(match1,-1,sizeof(match1));
    memset(match2,-1,sizeof(match2));

    为(int) i=0;i=0;j=t){
                            MatCH2[j]=k=PR[ J ]
                            t=match1[k];
                            match1[k]=j;
                        }
                    }
                }
        }
    }
}

发表评论

电子邮件地址不会被公开。 必填项已用*标注