多维交叉算法

时间:2013-04-18 13:39:00

标签: algorithm data-structures

所有

我有一个问题需要解决,我不知道如何有效地完成它。假设我有一组具有多个属性的对象,并且每个属性可以采用多个值。

例如,在伪代码中,对象可能如下所示:

Object.Color  
Object.Size  
Object.Sides  
Object.Dimensions  

我希望能够获得集合中与一组颜色,一组尺寸,一组边和一组尺寸匹配的所有对象。

现在,我的代码基本上是ColorSet中的Object.Color和SizeSet中的Object.Size以及DimensionsSet中的Object.Dimensions,然后我标记要处理的对象(通过使用字典)。

有更有效的方法吗?我可以创建一个有助于我有效解决这个问题的数据结构或算法吗?

干杯!

1 个答案:

答案 0 :(得分:2)

如果您只想做一个这样的查询,那么您无法做到这一点。相反,我假设你想做多个这样的查询。

创建从属性到具有这些属性的对象集的字典映射。例如,对于颜色,您可能具有从Red{obj1, obj2, obj3}Blue{obj4, obj5}的映射。为每个属性(颜色,大小,边,尺寸)执行此操作。

然后,您将对整个集合表达您的查询。 ColorSet中的Object.Color成为ColorSet中颜色的相应集合的并集。要求颜色和尺寸成为具有这些颜色和尺寸的物体组的交叉点。

这可能更有效,因为您只需要检查可能具有所有属性的对象,例如,如果您对Blue对象感兴趣,则可以立即排除{{1}中的所有对象}集。