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