路径压缩优化并查集大家一定很熟练了,那么它的复杂度是多少呢? O ( m α ( n ) ) O(m\alpha(n)) O(mα(n))?
的确,很多人都是这么说的,但是事实上它的复杂度是 O ( m log 1 + m / n n ) O(m\log_{1+m/n}n) O(mlog1+m/nn)的,并且能找到一种方法卡到这样的复杂度。
要卡并查集,首先要构造一种树——二项树。这种二项树还与普通的不太一样。
定义:在给定 j j j的情况下,二项树 T k T_k Tk定义如下:
- 若 k ≤ j k\leq j k≤j, T k T_k Tk是一个点。
- 若 k > j k>j k>j, T k T_k T