问题描述
我正在创建一个模块来比较两个数据集 A 和 B。它们都有不同的列数。
为了让 A 中的一行等于 B 中的一行,我需要将 A 中的 3 列与 B 中的两列进行比较。让我们称它们为 A1-3
和 B1-2
。标准是:
1:A1 == B1
2:A2 == B2 OR A3 == B2
我正在尝试使用 HashSet
和覆盖哈希码和 equals 方法创建解决方案。好吧,OR
标准真的让我很头疼。
我仅通过比较 A1==A2
和 B1==B2
就能够创建解决方案。在那种情况下,我对两列使用了 hash 和 equals。但是我如何解释哈希码中的 OR
?我应该散列第一列吗?让平等决定平等?
我的方法在这里错了吗?或者任何人都有更好的方法来做到这一点?试图保持 O(n)
最坏的情况。
编辑:我使用集合的 addAll 和 retainAll 方法来查找匹配项
解决方法
您可以按照您所说的那样在 Java 中使用 equal 方法实现一个简单的代码,但是,作为数学家,我可以回答您不能仅对每一行使用散列来解决,因为您在那里的“OR”导致到非传递关系:
例如,您可能有 3 行,A=(0,1,1),B=(2,0) 和 C=(3,0),这样
-
A 等于 B(根据您的标准)
-
B 等于 C(根据您的标准)
-
A 不等于 C(根据您的标准)
那么,hash(A)=hash(B) 和 hash(B)=hash(C) 但是 ¿hash(A)!=hash(C)?
因此,您无法将其转换为单个哈希比较。