首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Java中实现等价类?

如何在Java中实现等价类?
EN

Stack Overflow用户
提问于 2013-02-17 21:50:25
回答 3查看 2.1K关注 0票数 1

在Java中实现等效类的简单方法是什么?有这样的图书馆吗?

麻烦的部分是如何写一个有效的,非天真的“平等”运算符。

S = {x,y,z,w,h}。如果对S的等价类使用映射x->1, y->1, z->1, w->2, h->2,则必须将映射x->10, y->10, z->10, w->20, h->20视为相同的等价类。

当集合S的基数变大时,朴素的“相等”运算符会很快变得费时。

最简单的方法是什么?有什么想法吗?

经过编辑以澄清,具体问题可正式确定如下:

设S是一个非空集.我们用M表示从V到整数的一组部分映射。比较容易证明,下面定义的二进制关系\sim在M上导出了一个等价关系。

对于m1和m2的两个部分映射M,m1 \sim m2当且仅当,

  1. 对于V的任意a,m1(a)是定义的当且仅当m2(a)是定义的
  2. 对于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

谢谢。

EN

回答 3

Stack Overflow用户

发布于 2013-02-17 22:04:47

根据我从你的问题中了解到的,你可以找到一个集合的最大公因子(欧几里得算法)一次,然后用它来映射商--如果它们和另一个集合完全相等,它是相等的,否则就不是。只有当集合大小和映射相等时,这才能工作。

票数 2
EN

Stack Overflow用户

发布于 2013-02-17 22:25:23

如果我理解你的正确,你可以应用向量归一化。例如,通过将三维矢量的所有分量与矢量长度分开,将其归一化为1的长度。如果两个归一化向量的分量相等,它们的原始(非归一化)向量指向同一个方向(我认为这就是你定义的“相等”)。

在你的例子中,x,y,z,w,h是一个5维向量。它们属于同一类时,显示方向相同,但可能有任意长度。

票数 2
EN

Stack Overflow用户

发布于 2016-10-22 04:06:17

旁白:我假设集合S实际上是定义中的集合V。

我认为Uli在正确的轨道上,尽管我不认为Set(Set(E)).equals()对您的目的是有效的。(对不起,我不能让它或gt符号通过)

Set(E).equals()的默认实现可能是O(n_log n)或O(n^2)。Set(E).equals()几乎肯定涉及排序;O(n_log n)尽可能好。我建议你看看基数。它是O(n*log n),但生长非常缓慢。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14926490

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档