【发布时间】:2010-01-01 04:45:47
【问题描述】:
我有一堆 Puzzle 类的对象。我已经覆盖了equals() 和hashCode()。当需要向用户展示解决方案时,我想过滤掉所有“相似”的谜题(按照我定义的标准),这样用户只能看到每个谜题中的一个。
相似性是传递性的。
例子:
Result of computations:
A (similar to A)
B (similar to C)
C
D
在这种情况下,只有 A 或 D 和 B 或 C 会呈现给用户 - 而不是两个类似的拼图。两个类似的谜题同样有效。重要的是不要同时向用户显示它们。
为了实现这一点,我想使用一个禁止重复的 ADT。但是,我不想更改 equals() 和 hashCode() 方法来返回一个关于相似性的值。是否有一些Equalator,比如Comparator,我可以在这种情况下使用?还是我应该这样做的另一种方式?
我正在学习的课程是一个维护字母网格的拼图。 (如拼字游戏。)如果拼图包含相同的单词,但方向不同,则认为它是相似的。所以下面要解惑:
(2, 2): A
(2, 1): C
(2, 0): T
类似于:
(1, 2): A
(1, 1): C
(1, 0): T
【问题讨论】:
-
相似度如何计算?例如,如果所有谜题都产生一个整数值,那么您可以创建一个 int -> Puzzle 的 Hashmap,将每个产生的值四舍五入到某个相似度阈值。
标签: java collections similarity comparator equivalence