使用哈希集比较数据

问题描述

我正在创建一个模块来比较两个数据集 A 和 B。它们都有不同的列数。

为了让 A 中的一行等于 B 中的一行,我需要将 A 中的 3 列与 B 中的两列进行比较。让我们称它们为 A1-3B1-2。标准是:

1:A1 == B1

2:A2 == B2 OR A3 == B2

我正在尝试使用 HashSet 和覆盖哈希码和 equals 方法创建解决方案。好吧,OR 标准真的让我很头疼。

我仅通过比较 A1==A2B1==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)?

因此,您无法将其转换为单个哈希比较。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...