拟阵及其应用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/liudongdong19/article/details/83016867

参考:https://wenku.baidu.com/view/4f952c76c8d376eeafaa312e.html

拟阵(matroid): 


加权拟阵:

 



拟阵的贪心算法的正确性也是从greedy choice property和optimal substruture这两个方面来证明的。下面我们来分别证明:

greedy choice property

引理1.(拟阵具有贪心选择性质)假定M=(S,T)是一个加权拟阵,加权函数w,且S已经按照权重单调递减顺序排序。令x是S中第一个满足{x}独立的元素(如果存在)。如果存在这样的x,那么存在S的一个最优子集A包括x。

证明:

假设B是最优子集,A不是最优子集,B中将x换成y,因为x是降序排序的第一个元素,所以w(x)>w(y),B=A-{x}+{y} 
所以w(B)=w(A)-w(x)+w(y) < w(A),所以假设不成立,最优子集必定包含x。

optimal substructure

引理2.令M=(S,T)是一个加权拟阵,x是S中第一个被greedy算法选出的元素,则接下来寻找包含x的最大权重独立子集的问题归结于寻找加权拟阵M’=(S’,T’)的一个最大权重独立子集的问题,其中:

S’={y∈∈S:{x,y∈∈T}}

T’={B⊂⊂S-{x}:B∪∪{x}∈∈T}

证明:若A是M的任意一个包含x的最大权重独立子集,则A’=A-{x}是M‘的一个独立子集。相反,任何独立子集A’可生成M的独立子集A=A‘∪∪{x}。由于对两种情况均有w(A)=w(A’)+w(x),因此M的包含x的最大权重子集必然生成M’的最大权重子集,反之依然。


最小生成树算法

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<queue>
#define N 105
#define NOPOSSIBLE 0
#define MAX 99999999
 
using namespace std;
typedef struct
{
    int s,e,w;
}Edge;
Edge e[N*N];
int vis[N];
bool compare(Edge a,Edge b)
{
    return a.w<b.w;
}
int findF(int i)
{
    return i==vis[i]?i:vis[i]=findF(vis[i]);
}
void Kruskal(int edge,int v)
{
    int sum=0;
    sort(e,e+edge,compare);
    for(int i=1;i<=v;i++) vis[i]=i;
    int count1=0;
    if(edge<v-1) {printf("?\n");return;}
    for(int i=0;i<edge;i++)
    {
        int f1=findF(e[i].s);
        int f2=findF(e[i].e);
        if(f1!=f2)
        {
            vis[f1]=f2;
            sum+=e[i].w;
            count1++;
        }
        if(count1==v-1) {break;}
    }
    if(count1<v-1){printf("?\n");return;}
    printf("%d\n",sum);
}
int main()
{
    int n,m;
    while(scanf("%d %d",&n,&m)!=EOF&&n)
    {
        for(int i=0;i<n;i++)
        {
            int d1,d2,d3;
            scanf("%d %d %d",&d1,&d2,&d3);
            e[i].s=d1;e[i].e=d2;e[i].w=d3;
        }
        Kruskal(n,m);
    }
    return 0;
}

任务调度问题:

了解学习拟阵思想,如何应用到实际问题,关键:如何找出l\imath[M]这个满足实际需求的集合定义。

猜你喜欢

转载自blog.csdn.net/liudongdong19/article/details/83016867