Data structures 是否有执行查找、并集和反并集的良好数据结构?
我正在寻找一种数据结构,它可以相当有效地支持联合、查找和反联合(所有内容至少为O(logn)或更好),因为标准的不相交集结构不支持反联合。作为背景,我正在用MCTS[编写Go AI,这将用于跟踪在回溯过程中连接和断开连接的石头组。我认为这可能会更容易,因为反联合不是在集合中的某个任意对象上,而是始终是最新联合的“撤销” 我已经通读了下面的文章,虽然我可以完成提议的数据结构,但它似乎有点过火,需要一段时间才能实现Data structures 是否有执行查找、并集和反并集的良好数据结构?,data-structures,baduk,Data Structures,Baduk,我正在寻找一种数据结构,它可以相当有效地支持联合、查找和反联合(所有内容至少为O(logn)或更好),因为标准的不相交集结构不支持反联合。作为背景,我正在用MCTS[编写Go AI,这将用于跟踪在回溯过程中连接和断开连接的石头组。我认为这可能会更容易,因为反联合不是在集合中的某个任意对象上,而是始终是最新联合的“撤销” 我已经通读了下面的文章,虽然我可以完成提议的数据结构,但它似乎有点过火,需要一段时间才能实现 当然,虽然O(a(n))会很好,但我很确定路径压缩不会与反并集一起工作,而且我很乐
当然,虽然O(a(n))会很好,但我很确定路径压缩不会与反并集一起工作,而且我很乐意使用O(logn)。我的直觉告诉我一个解决方案可能与堆有关,但我还没有弄明白任何事情。您所描述的有时被称为联合查找拆分问题,但大多数现代数据结构(或者至少是我所知道的那些)都是这样的通常以不同的方式看待此问题。将每个元素都视为林中的一个节点。然后,您希望能够在操作下维护林
- 链接(x,y),用于添加边(x,y)
- 查找(x),它返回包含x的树的代表性节点,以及
- 剪切(x,y),将边从x剪切到y
希望这有帮助!可能会在CompSci SE获得更多关注。啊,我怎么会忘记链接/砍树!非常感谢,我也会给ET树看一看。