You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

带路径压缩按大小合并的DSU:find_set是否需调整size?

关于并查集路径压缩时是否需要修改父节点size的问题

不需要修改原父节点的size值,你提供的修改后的find_set实现是错误的。

原因如下:

  • 在按大小合并的DSU实现中,size哈希表的核心定义是:只有根节点的size值才代表对应集合的总大小,非根节点的size值是无意义的,从不会被程序逻辑使用。
  • 原实现里,只有union_sets操作会更新size:合并两个集合时,只会把小集合的size加到根节点的size上,非根节点的size自创建后就不会再被修改——因为所有涉及集合大小的判断,都会先通过find_set找到根节点,再用根的size做比较。
  • 路径压缩的本质是调整节点的父指针,让非根节点直接指向根,从而加速后续查找。这个过程中,非根节点的父节点本身就不是根,它的size值本来就无效,修改它既没必要,还可能引入错误(比如后续若有人错误访问非根节点的size,会得到错误数值)。

举个实际例子:
假设存在节点链 1 → 2 → 3,其中3是根节点,size[3] = 3,size[1]和size[2]都是创建时的初始值1。调用find_set(1)进行路径压缩时,会把1的父指针直接改为3。此时原父节点是2,它的size值本来就不代表任何集合的大小,修改size[2] -=1只会让它变成0,完全没有实际作用。

总结:按大小合并的DSU中,只需保证根节点的size值准确即可,路径压缩操作不需要对任何节点的size做修改。

内容的提问来源于stack exchange,提问作者David

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 04:45:10