中文
拟阵与贪心算法
拟阵可以用来分析和阐释贪心算法成立的原因。
子集系统
在了解拟阵前,需要先了解子集系统。子集系统定义在有序二元组上,满足下面几个条件
- 基础集合S是一个有限集。
- L是由S子集构成的集合(注意L是集合的集合)且L非空。
- 遗传性:,如果,则(即L中元素的子集必在L中)。
注意由第二、三点可知,空集必然在L中(包含空集的集合不是空集🤣)。
例子:集合,可以是。
拟阵
拟阵是特殊的子集系统,它需要满足交换性(又称独立扩展公理):,,,,。
即是{1,2,3}的子集系统,但是不是一个拟阵。
而是拟阵。
若中元素带权值,则为带权拟阵。
拟阵的并仍是拟阵。
独立集
独立集是拟阵中的元素,仍然用表示子集系统。对于,如果,则为独立集。对于独立集,若存在,满足且,则称为可扩展的。不可扩展的独立集为极大独立集。
它有几个性质:
- 空集一定是独立的,也就是说,(与子集系统定义的遗传性的推论相符)。
- 遗传性:每个独立集的子集是独立的(与子集系统定义遗传性相符)。
- 交换性:如果和是的两个独立集,比有更多的元素,则在中存在一个元素,当其加入时得到一个比更大独立集 (与拟阵定义中的交换性相符)。
关于拟阵和极大独立集有如下定理:
拟阵的所有极大独立集都有相同大小。
设加权拟阵的权函数为且已按权非升序排序。设是第一个使得独立的元素,若这样的元素存在,则存在一个包含的最大权独立子集。
设是对于加权拟阵由定理2中所选择的S的第一个元素,则剩下问题可归结为求加权矩阵的最大权独立集问题,其中,
定理的证明思路:
由交换性可证定理1。
设是任意非空的最优子集,且,,。构造集合,由交换性,可反复地在中找出新元素加入中直到,且仍是独立集。因此,使得。。定理2得证。
对于定理3,在中的最优解,,由定义得。中包含x的最优解X,且,即且为中最优解。定理3得证。
定理二和定理三本质提供了一个递归的算法,由它利用数学归纳法可以推出拟阵上使用贪心算法的正确性。
子集优化问题与贪心算法
子集优化问题:给集合中每个元素赋予一个正值,在子集系统中选一个元素,使得最大,其中。
该优化问题的解决方法是求权值最大的极大独立集。在拟阵中,可以使用贪心算法。将基础集合中的所有元素按从大到小排序,能加就加入到子集中的元素,就把它加入到中。回顾最小生成树问题的Kruskal算法和Prim算法,是不是就是这么解决的?注意:权值和最小等价于这里的最大,可以把权值视为负数就等价了。
GreedyAlgorithm(M, w){
A := ∅;
(S,L) := M;
Sort S to the descending order;
For each x in S do
If(A∪{x} in L)
Then A := A∪{x};
Return A;
}
案例分析:部分背包
给定一个最大载重量为T的背包和N种物品。已知第种物品最多放入,其单位价值为,确定一个方案,使得装入背包中的所有物品总价值最大。
对于部分背包问题,我们首先进行一步转化:将体积为,单位价值为的物品变成个体积为1,价值为的物品。定义:
- S是所有物品的集合。
- 这个M显然满足拟阵的前两个条件。
根据的定义,,,满足,有,因此满足遗传性,是一个子集系统。
对于,,,随意选取一个,令,显然有,所以M满足交换性。因此M是一个拟阵。
背包问题目标是使权值最大,上面提到了是所有物品的集合,将的任意元素的权值定义为的价值,那么问题就转化成了求背包问题的拟阵中权值最大的独立集,也就是上面的子集优化问题的变种。显然权值最大的独立集是极大独立集,同时因为是拟阵,故可以用贪心算法求解。
案例分析:最小生成树(MST)
一个有 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有$ n$ 个结点,并且有保持图连通的最少的边。即在一给定的无向图 中, 代表连接顶点 $u $与顶点 的边,而 代表此边的权重,若存在 为 的子集且为无循环图,使得 最小,则此 为 的最小生成树。
对于最小生成树问题,考虑无向图,我们可以定义:
- 是边集。
- 且 组成的图无环
这个显然满足拟阵的前两个条件。
根据的定义,对,,假设形成环,则形成环,矛盾,所以不形成环,所以,因此满足遗传性。
考虑,,,我们将组成的森林命名为,组成的森林命名为。有个连通分量,有个连通分量。,所以,所以中存在的一个连通分量,中的点在中不连通。那么中必然存在一条边连接中不同的连通分量的边,显然且,且无环,即。所以M满足交换性。因此M是一个拟阵。
因为M是一个拟阵,故可以用贪心算法解决它的子集优化问题。
补充:拟阵的秩
极大独立集的基数被定义为它所包含的元素个数。
对于拟阵,中的极大独立集称为拟阵的基。
用表示基的集合,则非空且它满足基交换性,即若,则使得。 基交换性得每个基大小相同。
拟阵的秩就是基的大小。
子集的秩通过秩函数定义,它有以下几种性质:
- 秩函数的值总是非负的
- 对于任意的子集,有
- 对于的任意两个子集 和 ,有,这意味着秩函数是一个子模函数(见补充:子模函数)
- 对于任意集合A和元素x,有
子集A的元素个与其秩的差叫作子集的零化度或补秩,它是从A中移除元素使得A成为独立集的最小移除数量。
基础集合在拟阵上的零化度叫做拟阵的零化度或的补秩。
补充:次模函数
次模(submodular)函数:又称“子模函数”或“亚模函数”,次模函数具有次模性(submodularity),它是经济学上边际效益递减(property of diminishing returns)现象的形式化描述(若对于连续函数,单调递增时,二阶导数递减)。
TIP
次模函数定义:
给定一个集合函数 ,其将有限集V的一个子集映射为一个实数。
如果对于任意S,满足:
则称是次模函数。
从边际效益递减的角度考虑,次模函数还有一种等价定义
TIP
次模函数定义:
从边际效益递减的角度考虑,次模函数还有一种等价定义:对任意的,并且,
上式指出,当集合越来越大,s的“价值”将越来越小,正是边际效益递减的特性。这个现象在自然界普遍存在,例如:香农熵函数就是随机变量集合上的次模函数。当时有,则称该次模函数是单调的(monotone)。 更进一步,次模性是convexity(凸性)的离散模拟。由于convexity使得连续函数更容易最优化,因而次模性在组合优化中重要作用。当目标函数是次模函数时,许多组合优化问题能够在多项式时间内得到最优解或近似解。次模函数最大化被证明是一个NP-hard问题,幸运的是,存在高效并且解的质量有保证的近似算法。一个流行的结果是:最大化一个单调非负的带基数约束(cardinality constraint,即对子集S大小的约束)的次模函数,贪心算法至少能够达到 的结果,其中表示问题的最优解,1-1/e大约是0.63。
References
基于次模函数最大化的方法: https://blog.csdn.net/hohaizx/article/details/82936743
浅谈子集系统、拟阵与贪心:https://blog.csdn.net/MaverickFW/article/details/78207719