算法學習——kruskal重構樹

kruskal重構樹是一個比較冷門的數據結構。數據結構

其實能夠看作一種最小生成樹的表現形式。spa

在普通的kruskal中,若是一條邊鏈接了在2個不一樣集合中的點的話,咱們將合併這2個點所在集合。blog

而在kruskal重構樹中,若是一條邊鏈接了在2個不一樣集合中的點,咱們將新建一個節點出來,並用這個新節點做爲一箇中轉鏈接這2個集合。重構

如圖就是一棵kruskal重構樹,方點表示新建出的節點,圓點是原圖中的點,方點點權即邊權。im

這樣建出的樹會有一些美妙的性質,例如往上走點權是遞增的,原圖中的每一個點都是葉子節點等。數據

固然一個更重要的是,若是咱們要在最小生成樹上求一些東西,這些建出的方點能夠給咱們提供方向。img

緣由就是咱們每次都將新建的節點做爲父親,那麼這些節點將會引導每一個原圖中的節點一步步向上,從而造成一個有根樹,並且因爲每一個點被新建出的順序將直接決定它的深度等信息,這棵樹會有不少奇妙的性質。集合

例如咱們能夠一直向上走,找到某個節點使得這個節點即如下的點都知足點權小於k,這樣咱們就能夠篩選出知足互相到達不會通過超過k的權值的邊的點對。co

固然也能夠有別的用法,因而咱們就能夠快速的篩選出最小生成樹上知足具備某些性質的節點。生成

同時kruskal重構樹也將平時隱藏在並查集裏的一些關係提出來放在了樹裏,所以也能夠看作kruskal重構樹實際上是維護了一個相似並查集的關係

相關文章
相關標籤/搜索