比较对象对

时间:2014-04-17 18:54:51

标签: algorithm data-structures

这是一个相当简单的问题,但我不记得我的所有编码和数据结构,感觉有点空白。

假设我有一个列表/数组(例如结构或对象)。需要在所有这些对象之间保持某种属性(真或假)。检查任何一对对象之间是否违反该属性的最快方法是什么?

2 个答案:

答案 0 :(得分:4)

除非您有关于该属性的其他信息(例如,它是可传递的),否则您唯一的解决方案是使用两个嵌套循环检查列表中每对的属性:

for (int i = 0 ; i != N ; i++)
    for (int j = 0 ; j != N ; j++)
        if (i != j) // This assumes that the property might not be reflexive
            // This will check the property both ways, i.e.
            // there is no implication that the property is commutative.
            checkProperty(list[i], list[j]);

对于交换属性(即当A ? B暗示B ? A时),您可以通过在j = i+1开始第二个循环来完成一半的比较

如果属性具有传递性(即当A ? BB ? C暗示A ? C,其中?表示属性检查),则可以构建更快的检查。

答案 1 :(得分:0)

您需要一个双循环来比较每个项目。假设您只需要检查每个2项组合(即顺序无关紧要),您可以循环遍历内循环中的其余项。

for (int i = 0 ; i < N ; i++)
    for (int j = i+1 ; j < N ; j++)
            checkProperty(list[i], list[j]);
相关问题