基于size和基于rank优化的问题:
我的理解是:
基于size是因为:被同化的树的所有节点 迭代找根的次数会+1,而size小的话受影响的节点就少,合并后整个树的 平均迭代找root的次数 更少;
但另一个方面:如果基于rank,会尽可能避免合并后树的 最大高度 增加;
我觉得,每次查询都是从某个节点出发,到所在根停止的,那从以上的分析来看,基于size的思路不应该更贴切吗? 难道说其实基于size的优化会出现某些极端场景吗??可是我按代码思路大概画了画,好像并不会出现很长的近似于链表般的情况?
测试来测试去,两种思路似乎拉不开差距。 但我有看到bobo老师在别的问答下边说过:并查集的标准优化形式是基于 rank 的优化,而基于size的优化只是向基于rank优化的过渡。 所以我想我可能是思路就有问题,因为现在是在复习代码,视频已经挺久没再看了。