用于检查相等性的聪明算法

时间:2011-12-22 15:55:21

标签: algorithm search

我们需要实现下一个功能:

假设我们有一些对象列表 我们需要说明哪些对象是相同的,哪些不是 假设1等于2且2等于5 所以1等于5,我们不需要检查它们。

这个算法是否存在?
任何想法都会很棒。

3 个答案:

答案 0 :(得分:3)

我认为这可以被认为是具有相同的元素集。 IMO不相交集数据结构将非常有效地维护这样的记录集。基本思想是首先将每个元素作为一个单独的集合,每当遇到相等关系时,您将获取这些元素所属的集合并合并它们。如果使用路径压缩,则合并和查找的运行时间为子对数。 http://en.wikipedia.org/wiki/Disjoint-set_data_structure

答案 1 :(得分:1)

您希望Disjoint Set strucutre具有路径压缩功能。它实现起来非常简单,性能接近于O(1)。

答案 2 :(得分:0)

如果你有一个图形,其中顶点是对象,并且在已知的相等对象之间有一条边,那么连接到另一个对象的每个对象也是相等的。因此,要测试对象A是否等于对象B,您正在测试该图中A和B之间是否存在路径。

您可以使用任何图搜索算法来执行此操作。 Depth-first search将是一个良好的开端。

如果要查找所有连接对,则可以使用Tarjan's algorithm查找所有强连接组件。在每个组件中,所有对象都是相同的。