【算法理论】拟阵的理解

CLRS在讲贪心算法的时候,提到了贪心算法的理论基础是一种叫做拟阵的结构,凡是符合该结构的模型均可采用贪心算法。当然,它也提到该理论并不能完全覆盖贪心所能使用的全部范围 -- 例如活动选择和huffman编码就不能应用该理论。这个只是CLRS上讲的,具体为什么不能使用,需要思考一下。


活动选择问题不是拟阵。集合A是独立的当且仅当集合中所有的活动室相互兼容的,则A必然具有遗传性。

但是这种独立性的集合却不具有交换性质,例如|A|=2,|B|=3,具体如下:

A: |_____|    |___________|

B:          |_____|  |___|  |______|

则这种情况下,B-A任何一个元素{X}UA都不是独立的 --  不是所有元素都兼容。


拟阵由线性代数矩阵中的向量无关性扩展而来,一个向量组X={X1,X2,..., Xk}。众说周知,X或向量无关或向量相关,而且一个向量组是线性无关的,则它的任意子组也是向量无关的。另外,如果向量组X线性无关,同时向量组Y也线性无关,且有|X|<|Y|,则必存在Yi属于Y,使得X并上Yi所得的新向量组线性无关。


通过对线性无关的扩张,可得拟阵的定义:M(S, I)


1、S是非空的集合

2、I是S的独立子集的集合,且如果A属于I,则它的所有子集属于I -- 这里独立是线性无关的扩展,具体看I的定义

3、交换性质 -- A属于I,B属于I,且|A|<|B|,必存在x属于B-A(注意这里说的是存在,而不是每个x属于B-A),使得A并x属于I


这里的独立性跟I的定义有关系,比如S定义为无向图边的集合E,I定义为所有组成非环路的边的集合的集合(有点绕,体会下)。这里的独立性就是不构成环路 -- 说I的一个元素是独立的,判断依据就是其各个边不存在环路。这里的拟阵可以用来求最小生成树!



其中子集{AB, AC}小于子集{BC, BD, DE}的大小,存在边形成的新集合是独立的 -- 集合中的边不构成环。

注意:边不能选择BC,因为并操作后形成的新集合形成了环。同时,也再次说明拟阵定义的第3点,存在一个元素而不是所有元素!


那这里,如果将I定义成任意边的集合,M'也是一个拟阵。不过在这个拟阵上能干啥呢?



你可能感兴趣的:(数据结构,算法理论)