在 Java 中实现等价类的简单方法是什么?有没有为此目的的图书馆?
麻烦的部分是如何编写一个高效且非天真的“相等”运算符。
让S = {x,y,z,w,h}
. 如果我们x->1, y->1, z->1, w->2, h->2
对 S 的等价类使用映射,则必须将映射x->10, y->10, z->10, w->20, h->20
视为相同的等价类。
当集合 S 的基数变大时,幼稚的“相等”运算符会很快变得耗时。
什么是简单的方法?任何想法?
[编辑]为了澄清,具体问题可以形式化如下:
令 S 为非空集。我们用 M 表示一组从 V 到整数的部分映射。比较容易证明下面定义的二元关系 \sim 导出了 M 上的等价关系。
对于 m1 和 m2 M 的两个部分映射,m1 \sim m2 当且仅当,
- 对于 V 的任何 a,当且仅当定义了 m2(a) 时,才定义 m1(a)
对于 V 的任何 a,b,m1(a) 和 m1(b) 都被定义为相同的整数值 'z1' 当且仅当 m2(a) 和 m2(b) 都被定义为相同的整数值“z2”(可能与“z1”不同,也可能不同)
例子。
a->9,b->9,w->1 \sim a->10,b->10,w->0
但是这样说是不对的
a->5 \sim b->9
谢谢。