數(shù)據(jù)結(jié)構(gòu)與算法_并查集
問題:有一個(gè)親戚關(guān)系圖,如何快速的判斷兩個(gè)人是否有親戚關(guān)系?
并查集是一種樹型的數(shù)據(jù)結(jié)構(gòu),用于處理一些不相交集合(Disjoint Sets)的合并及查詢問題。主要有以下三種操作:
(1)初始化
????把每個(gè)點(diǎn)所在集合初始化為其自身。
(2)查找
????查找兩個(gè)元素所在的集合,即找祖宗。查找時(shí),采用遞歸的方法找其祖宗,祖宗集合號(hào)等于自己時(shí)停止。在回歸時(shí),把當(dāng)前結(jié)點(diǎn)到祖宗路徑上的所有結(jié)點(diǎn)統(tǒng)一為祖宗的集合號(hào)。
(3)合并
????如果兩個(gè)元素集合號(hào)不同,將兩個(gè)元素合并為一個(gè)集合。合并時(shí)只需要把一個(gè)元素的祖宗集合號(hào),改為另一個(gè)元素的祖宗集結(jié)號(hào)。擒賊先擒王,只改祖宗即可!
標(biāo)簽: