查找描述一组实体中的引用对象的最小属性集

时间:2009-10-22 11:34:16

标签: algorithm set

我想知道是否有人可以帮我指点解决这个问题。算法链接很棒,但指向论文/信息的指针也很好。

问题如下。假设我有一组实体E={car1, car2, bicycle}和一组属性P ={red, blue, small}。我也有red(bicycle), blue(car1), blue(car2), small(car2)的知识库。假设我还有一个属于r的引用E

问题在于找到最小的属性集P' \subseteq P,以便明确地从r中挑选E。因此,如果rcar2,那么P'={small}

有什么想法吗?我想像集合覆盖问题或功能依赖性(如在DB理论中)可能提供一些见解,但我想在进入该文献之前我会问。另一种可能性是构建图形并找到子图同构的算法......也许。

感谢。

2 个答案:

答案 0 :(得分:1)

首先找到r拥有的所有属性的集合。将其称为S.对于S中的每个属性p,找到e(p),所有具有属性p的实体。对于S中的每个p,e(p)包含r是清楚的。现在对于S中的每个p取e(p)的交点。如果交集包含多个实体,则没有解,我们结束算法。

因此,我们有一组唯一确定实体r的属性。现在我们需要找到唯一确定r的S的最小子集。我们可以从S中删除任何在S中存在属性q的属性p,使得e(p)是e(q)的超集。如果你做到这一点,你最终会得到一组减少的属性T,这样T中所有p的e(p)的交点仍然是{r},但是T中不能再删除其他属性。这个集合T是最小的。

我没有想过要找到一个属性,你可以删除比仅仅尝试所有组合更有效的东西,但在我看来应该有一些方法。

答案 1 :(得分:1)

您正在寻找集合E \ {r}的minimum set cover,其中r属于那些属性的否定(补语)(属性可以被视为E的子集)。

由于这些集合可以是任何集合,因此这是NP难的。

更确切地说:

设置了一个封面实例(US),其中U是您需要涵盖的集合,S = {s1,{ {1}},...,s2}是覆盖集的系列,您可以构造问题的实例,以便其解决方案在原始问题中提供集合掩盖:

sn = E \ union {U},其中r是指示对象而r不属于r。 属性集U = {Pp1,...,p2}由pn构成,以便每个Se和每个U中,1< = i< = n我们ipi)iff e不在e。此外,每个属性都适用于si。换句话说,属性是限制为r时原始集的补充,而U具有所有属性。

现在很明显,选择r的每组属性都是原始问题的集合封面 - 如果r由属性r集合选中,那么所有其他属性元素(表示S*中的所有元素)至少失败了U中的一个属性,因此S*的每个元素都属于至少一个原始集(来自属性的构造作为补充套)。这意味着U是构建U中的属性的那些集合的并集。

相反也是如此 - S*中的集合封面转换为U - r中的选择集。

上述减少显然是多项式的,所以问题是NP难。