let $ e $ 是在set $ s $ 上定义的等价关系。访问 $ e $ 仅通过表单 $ m(s_1,s_2)= 1 $ 如果 $ s_1 $ $ s_2 $ 在同一类和 $ 0 $ 否则。 computing $ m $ 是昂贵的(例如, $ o(n ^ 2)$ )。

我正在寻找一个有效的数据结构 $ d $ ,它支持表单的查询“给定 $ s $ < / span>,do $ d $ 包含一个元素 $ s'$ 与< SPAN Class=“math-container”> $ s $ “?
一个天真的方法是通过元素在 $ d $ 和测试中搜索元素,但是还有其他解决方案吗?

有帮助吗?

解决方案

您可以做的最好的是使用Union-Find数据结构跟踪所有当前已知的等效性。最初,每个元素都在自己的组中。每当您发现两个元素等同时,您都会合并组(通过UNION操作)。

然后,您可以做的最好的回答查询您列出的是枚举所有组(除了包含 $ s $ )的组中,找到一个代表 $ x $ 每个这样的组,测试是否 $ s $ 等同于 $ x $

许可以下: CC-BY-SA归因
不隶属于 cs.stackexchange
scroll top