拟阵中所用的若干术语多半来自于代数(比如线性代数和抽象代数)和图论。
拟阵有许多等价的定义方式,最常见的定义方式是用独立集、基、圈、闭集合、闭平面、闭包算子或秩函数。我们下面只会介绍第一个定义拟阵的方式。
下面先说拟阵到底有什么用:
拟阵有一个最为基本的优化性质:极大独立集一定是最大独立集合,而这个可以在实践中变成贪心算法。
定义
上面的第2,3个条件为了好理解,可以类比线性独立的概念。简而言之,
f
f
f集合就是所有“线性无关”的集合的集合。
第二个就是:
即大集合中两两元素都线性无关,那么大集合的任何子集中的元素都线性无关。比如A是S的子集,那么如果S集合内的元素两两线性无关,那么A集合内的元素也是两两线性无关。
类似的,第三个条件即如下:
可以看到,这两个和我们线性代数中的线性无关的特点都是一致的。
例子
给个例子,看懂了,就结束了。为了简单,我们的大集合E取3维空间的如下4个向量。
那么:
然后,根据第2个条件,上面3个集合的子集也是线性无关组。所以
f
f
f最终为:
相信此刻,你已经有了充分的理解,那么把这个理解迁移到组合最优化或者图论中就是:
目标:
这个时候,我们需要冷静的想一下,能不能建立一个拟阵,我们关键是要验证无圈子图这个概念是否满足拟阵定义中的3个条件。
- 边集为空集构成的图当然是无圈子图
- 无圈图的边集的子集构成的子图当然还是无圈图
- 这个你自己可以动手试试,条件3也是满足的,此处不证
即可以建立一个拟阵,那么我们有了思路,类比前面那个例子,找到最大的无圈子图,然后其子集全部都仍然是,这样的话,一下子就找完了全部。
支撑树就是生成树,其加上一条边就一定会构成圈。所以是“极大线性无关组”。
拓展
可图拟阵
:如果一个拟阵M可以被解释为一个图G的某一个场景(比如无圈),而且反过来也可以,那么称M和G同构,同时,称这个拟阵是可图的。
例子中的两个就是同构
关系。前者4个向量,后者4条“边”,其他的结构也一模一样,都是一一对应关系,集合中叫做双射
。
这不免让人觉得肯定任何拟阵都是可图的,那就错了,比如:
M
=
(
E
=
{
1
,
2
,
3
}
,
f
=
{
ϕ
,
{
1
}
,
{
2
}
,
{
1
,
2
}
}
)
M=(E=\{1,2,3\},f=\{\phi,\{1\},\{2\},\{1,2\} \} )
M=(E={1,2,3},f={ϕ,{1},{2},{1,2}})
这个是一个拟阵(其满足我们最开始的拟阵定义的3个条件),但是其无法对应到图中来。
因为3条边的图,无论你怎么画,f中都至少是7个元素,即至少为:
f
=
{
ϕ
,
{
1
}
,
{
2
}
,
{
1
,
2
}
,
{
3
}
,
{
1
,
3
}
,
{
2
,
3
}
}
f=\{\phi,\{1\},\{2\},\{1,2\}, \{3\},\{1,3\},\{2,3\}\}
f={ϕ,{1},{2},{1,2},{3},{1,3},{2,3}}
例如:
这个图的无圈子图集合就是上述
f
f
f。
当然了,如果画成下面这样,f中就为8个元素了。
f
=
{
ϕ
,
{
1
}
,
{
2
}
,
{
1
,
2
}
,
{
3
}
,
{
1
,
3
}
,
{
2
,
3
}
{
1
,
2
,
3
}
}
f=\{\phi,\{1\},\{2\},\{1,2\}, \{3\},\{1,3\},\{2,3\}\,\{1,2,3 \}\}
f={ϕ,{1},{2},{1,2},{3},{1,3},{2,3}{1,2,3}}
但是,无论哪一种3条边的图的画法,都不可能对应到上述
f
f
f。
f
=
{
ϕ
,
{
1
}
,
{
2
}
,
{
1
,
2
}
}
f=\{\phi,\{1\},\{2\},\{1,2\} \}
f={ϕ,{1},{2},{1,2}}
所以,这个拟阵是不可图的。
应用
这里,我想是你最关心的问题,抽象为拟阵问题有什么用?可以使用贪婪算法解决这类问题。
我们就想象上面那个图的无圈子图问题,我们要求其最大无圈子图(最小生成树),(拟阵中叫做最大独立集),每一条边会有一个权重,记为
c
(
e
i
)
c(e_i)
c(ei)。我们对这些权重排序后,假设是这样的。
注:这里的权重如果理解成边的长度的话,那么下面是求解最大生成树,看你如何理解权重了,如果理解为边越短,权重越大,那么就是求解通常的最小生成树。
那么求解最大无圈子图即为:
即每次都挑选一个剩下当中最大权值的边来进入(
e
1
e_1
e1是最大的),不过要看加入后是不是无圈子图,如果第一次中,
e
1
e_1
e1不属于无圈子图,那么不能加入到J。
算法运行结束后,就得到了最大权的无圈子图J。
这显然是一个贪心算法。其实,只要你所遇到的问题,可以抽象为拟阵的形式,都可以使用贪心算法。只是,有些问题并不能抽象为拟阵,此时,不能用贪心算法。