JAVA算法1——連通性問題之快速查找算法

    假設現在有一個整數對序列,每個整數對代表某周類型的對象,我們用P-Q對錶示“P鏈接到Q”。我們假設這種關係具有傳遞性,即如果p鏈接到q,而q又連接到r,則p連接到r。

    下面的程序是一個簡單算法的實現,這個算法是解決連通性問題的快速查找算法。該算法的基礎是一個整數數組,當且僅當第p個數組元素和第q個數組元素是相等的,則p與q是相連的。我們把第i個元素初始化爲i(0 ≤i≤N)。要完成p和q的合併操作,需要搜索整個數組,把所有與第p個數組元素相同的元素全部改爲第q個數組元素的值。

    

public class QuickFind
{
    public static void main(String[] args)
    {
        int N=Integer.parseInt(args[0]);
        int id[]=new int[N];
        for(int i=0;i<N;i++)
        id[i]=i;
        for(In.init();!In.empty();)
        {    
            int p=In.getInt(),q=In.get();
            int t=id[p];
            if(t==id[q])
            continue;
            for(int i=0;i<N;i++)
            if(id[i]==t)
            id[i]=id[q];
        }
    }
}

    爲了實現查找操作,我們只需檢查所指示的數組元素值是否相等,另一方面,合併操作需要爲每一對輸入掃描一次整個數組。

    性質:快速查找算法要解決N個對象的連通性問題,需要進行M次合併操作,至少要執行MN條指令。

    現代計算機計算能力很強,如果M和N都很小的話,算法對性能影響不大,但是在現代應用中,可能需要處理幾十億個對象和數百萬個輸入對,所以這種快速查找算法已經不適合解決此類問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章