動(dòng)態(tài)連通性問(wèn)題之快速查找算法筆記

快速查找(貪心算法)

目的:通過(guò)并查集解決動(dòng)態(tài)連通性問(wèn)題

定義: 在一個(gè)N個(gè)元素的數(shù)組中,當(dāng)且僅當(dāng) p、q的id相等時(shí),p和q是連通的。

課程鏈接
github地址

接口

/**
 * 判斷兩個(gè)元素是否連通: 比對(duì)id值是否相等即可
 */
public boolean connected(int p, int q);


/**
 * 連通p、q
 * 將所有與p相同id的元素的id值都變更為q的id值
 */
public void union(int p, int q);

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

/**
 * 動(dòng)態(tài)聯(lián)通問(wèn)題之快速查找(貪心算法)
 *
 * 定義: 在一個(gè)N個(gè)元素的數(shù)組中,當(dāng)且僅當(dāng) p、q的id相等時(shí),p和q是連通的。
 *
 */
public class QuickFindUF {

    private int[] id ;

    public QuickFindUF(int n) {
        id = new int[n];
        for (int i = 0; i < n; i++) {
            id[i] = i;
        }
    }

    /**
     * 判斷p、q是否連通
     * @param p
     * @param q
     * @return
     */
    public boolean connected(int p, int q) {
        return id[p] == id[q];
    }

    /**
     * 連通p、q
     * 將所有與 p 相同 id 的元素的 id 值 都變更為 q 的 id 值
     * @param p
     * @param q
     */
    public void union(int p, int q) {
        int pid = id[p];
        int qid = id[q];
        for (int i = 0; i < id.length; i++) {
            if (id[i] == pid ) id[i] = qid;
        }
    }

    public static void main(String[] args) {
        QuickFindUF quickFindUF = new QuickFindUF(10);
        quickFindUF.union(0,5);
        quickFindUF.union(5,6);
        quickFindUF.union(1,2);
        quickFindUF.union(2,7);
        quickFindUF.union(8,3);
        quickFindUF.union(3,4);
        quickFindUF.union(4,9);

        System.out.println(quickFindUF.connected(1,3));
        System.out.println(quickFindUF.connected(8,9));
    }

}

算法效率:

image

總結(jié)

查詢速度為1(即直接比對(duì)元素的id值即可),但進(jìn)行N次連通操作的時(shí)間復(fù)雜度為指數(shù)級(jí)增長(zhǎng),速度太慢。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1.問(wèn)題描述: 有N個(gè)對(duì)象,對(duì)象間可以連通。假設(shè)有一個(gè)命令用來(lái)連接兩個(gè)對(duì)象,將兩個(gè)對(duì)象傳入該命令就會(huì)連接兩者,還有...
    luckygong閱讀 1,138評(píng)論 0 0
  • 算法第一章 動(dòng)態(tài)連通性 首先,我們講到第一個(gè)問(wèn)題,也就是第三張PPT,動(dòng)態(tài)連通...
    心語(yǔ)yx閱讀 561評(píng)論 0 0
  • 漢水漁夫水上游閱讀 267評(píng)論 0 0
  • 燕子,你常常會(huì)在心里倚靠 神:這件事我該怎么做?我怎么回答?我怎么能更理解我的孩子?我怎樣變得和他們一樣?怎樣跟她...
    永遠(yuǎn)福分閱讀 146評(píng)論 0 0
  • 紅樓終是一場(chǎng)夢(mèng) 水中月,鏡中花 為色為財(cái)為官為情 人去樓空,人亡家散 同床異夢(mèng),各懷鬼胎,雞犬不寧 寒塘雁影,冷月...
    聽(tīng)心隨性閱讀 243評(píng)論 0 0

友情鏈接更多精彩內(nèi)容