找到最小基组的算法?

时间:2013-09-18 11:57:41

标签: algorithm math

假设我们有 N 设置{ x 1 x 2 x 3 ,..., x N }。

这些 N 集的“基础”是 M 集的集合{ y 1 ,< em> y 2 y 3 ,..., y M }每个{ x 1 x 2 x 3 ,..., x N }是{<}的某种组合的并集em> y 1 y 2 y 3 , ..., y M }。

如何找到“最小”基础,即最少可能 M 的基础?

1 个答案:

答案 0 :(得分:0)

我想到的一个类似问题是分别找到basis of a vector space或找到最小generating set

由于集合的数量以及所有可能元素的Universe都是有限数,我们可以将每个集合重写为这样的向量(假设整数作为集合中的元素):

{ 1, 2, 5 } => ( 1, 1, 0, 0, 1, 0 , ... )
{ 4 }       => ( 0, 0, 0, 1, 0, ... )

所有向量x_i的集合现在形成所有集合G的Universe的(普通)生成集x_i

您搜索最小的生成器。为此,我们必须从向量集G中消除所有线性依赖关系。一个天真的方法是检查所有三元组的G元素是否符合以下条件(x,y,zG数字k,l,m向量:

  k * x + l * y  + m * z == 0

如果条件满足,我们消除这三个中的一个向量。 (哪一个并不重要。)

这种减少的向量集(及其各自的集合)构成了你的集合的基础。

上述论点的一个要求是,您允许set difference作为生成集合的操作。