每日算法數(shù)據(jù)結(jié)構(gòu)之-連通算法-day3

媽的旺入,拖延癥發(fā)作兑凿,差點(diǎn)沒(méi)死掉凯力。。礼华。

動(dòng)態(tài)連通性問(wèn)題咐鹤,有很多的點(diǎn),我們來(lái)可以用union方法在兩個(gè)點(diǎn)之間添加鏈接圣絮,或者使用connnected方法來(lái)判斷兩個(gè)點(diǎn)是否相連祈惶;

如果一個(gè)整數(shù)對(duì)pq被認(rèn)為是相連的,那么他有三種性質(zhì):

1.自反性:p和p是相連的

2.對(duì)稱性:如果p和q相連晨雳,那么q和p也相連

3.傳遞性行瑞,如果p和q向麗娜,且q和r相連餐禁,那么p和r就相連。


應(yīng)用:

判斷兩個(gè)網(wǎng)絡(luò)是否連通突照、判斷變量名是否等價(jià)帮非、判斷元素是否屬于同一個(gè)集合中。等等


算法實(shí)現(xiàn):

1.quick-find算法:

比如有一個(gè)數(shù)組

有下面幾種類型0讹蘑、1末盔、2、3座慰、4陨舱、5、6版仔、7游盲、8、9蛮粮、0益缎;每個(gè)數(shù)字代表一種類型

當(dāng)我們要連通這些觸點(diǎn)的時(shí)候,我們就遍歷數(shù)組把找到的id[p]全部換位id[q]然想。

比如要連通 0和1兩個(gè)元素:

數(shù)組就變成了1莺奔、1、2变泄、3令哟、4、5妨蛹、6屏富、7、8滑燃、9役听、0。

然后我們連通1和4兩個(gè)元素

又變成了4、4典予、2甜滨、3、4瘤袖、5衣摩、6、7捂敌、8艾扮、9、0

只要我們?nèi)〕鰜?lái)的id[p]==id[q]我們就判定他們是連通的


連通部分代碼實(shí)現(xiàn)如下:

public void union(int p, int q){

? ? int pID= find(p);

? ? int qID = find(q);

? ? if(pID == qID ) return;

? ? for(int i=0;i<id.length;i++){

? ? ? if(id[i]==pID) id[i] = qID;

? ? }

? ? count--;

}

public int find(int index){

? ? return id[index];

}


2.quick-union算法

當(dāng)我們要連通兩個(gè)p占婉、q節(jié)點(diǎn)的時(shí)候泡嘴,我們就把q節(jié)點(diǎn)的值id[q] = p,

當(dāng)我們使用find(index)的時(shí)候逆济,只要 id[index]!=index我們就把index = id[index]并且循環(huán)查找酌予,直到找到id[index]==index為止。就返回這個(gè)index奖慌。

這種聯(lián)系我們稱為鏈接抛虫,這樣我們找到的其實(shí)是根觸點(diǎn),只要根觸點(diǎn)相同简僧,我們就判定p建椰、q是連通的。


代碼實(shí)現(xiàn):

private int find(int p){

? ? while(p!=id[p]) p = id[p];

? ? return p;

}

public void union(int p ,int q){

? ? int pRoot = find(p);

? ? int qRoot = find(q);

? ? if(pRoot) == qRoot) return;

? ? id[pRoot] = qRoot;

? ? count--;

} ? ?

3.加權(quán)quick-union算法

quick-union算法雖然是quick-find的改進(jìn)岛马,但是在一些情況下復(fù)雜程度可能是平方級(jí)別的.比如我們總是把1棉姐、2、3蛛枚、4谅海、5觸點(diǎn)連通到第0個(gè)觸點(diǎn)上。


這時(shí)候我們要用另外一個(gè)數(shù)組來(lái)保存他的深度蹦浦,然后總是把深度小的樹(shù)加到深度大的樹(shù)上扭吁。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市盲镶,隨后出現(xiàn)的幾起案子侥袜,更是在濱河造成了極大的恐慌,老刑警劉巖溉贿,帶你破解...
    沈念sama閱讀 221,888評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件枫吧,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡宇色,警方通過(guò)查閱死者的電腦和手機(jī)九杂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門颁湖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人例隆,你說(shuō)我怎么就攤上這事甥捺。” “怎么了镀层?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,386評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵镰禾,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我唱逢,道長(zhǎng)吴侦,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,726評(píng)論 1 297
  • 正文 為了忘掉前任坞古,我火速辦了婚禮备韧,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘绸贡。我一直安慰自己盯蝴,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,729評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布听怕。 她就那樣靜靜地躺著,像睡著了一般虑绵。 火紅的嫁衣襯著肌膚如雪尿瞭。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,337評(píng)論 1 310
  • 那天翅睛,我揣著相機(jī)與錄音声搁,去河邊找鬼。 笑死捕发,一個(gè)胖子當(dāng)著我的面吹牛疏旨,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播扎酷,決...
    沈念sama閱讀 40,902評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼檐涝,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了法挨?” 一聲冷哼從身側(cè)響起谁榜,我...
    開(kāi)封第一講書(shū)人閱讀 39,807評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎凡纳,沒(méi)想到半個(gè)月后窃植,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,349評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡荐糜,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,439評(píng)論 3 340
  • 正文 我和宋清朗相戀三年巷怜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了葛超。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,567評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡延塑,死狀恐怖绣张,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情页畦,我是刑警寧澤胖替,帶...
    沈念sama閱讀 36,242評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站豫缨,受9級(jí)特大地震影響独令,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜好芭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,933評(píng)論 3 334
  • 文/蒙蒙 一燃箭、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧舍败,春花似錦招狸、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,420評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至厕诡,卻和暖如春累榜,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背灵嫌。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,531評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工壹罚, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人寿羞。 一個(gè)月前我還...
    沈念sama閱讀 48,995評(píng)論 3 377
  • 正文 我出身青樓猖凛,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親绪穆。 傳聞我的和親對(duì)象是個(gè)殘疾皇子辨泳,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,585評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容