《演算法》學習筆記(1) Union found

2021-09-13 19:55:37 字數 1686 閱讀 2417

輸入一列整數對,其中每個整數都表示乙個某種型別的物件,一對整數p,q可以被理解為 是相連的,即p和q屬於同乙個等價類。

編寫乙個程式來過濾掉序列中所有無意義的整數對(兩個整數均來自於同乙個等價類中)。換句話說,當程式從輸入中讀取了整數對p q時,如果已知p和q是屬於同乙個等價類則忽略,如果已知的所有整數對都不能說明p和q是相連的,那麼則將這一對整數輸出。

1:判斷兩個結點是否屬於同一連通分量:

獲取結點a和結點b所在連通分量的最後乙個結點

如果兩個分量的最後乙個結點相同,則證明a和b處於同乙個分量

2:連線結點的分量 —— 無權值

獲取準備連線的結點a所在分量的最後乙個結點c

將連線的結點b所在下標,作為結點c的當前分量值,即 id[a] = b

相當於將a結點的分量與b連線

3:連線結點的分量 —— 帶權值

獲取結點a所在分量的最後乙個結點c,結點b所在分量的最後乙個結點d

判斷ac分量的總大小和bd分量的總大小,把小的分量連向大的分量

將連線的大結點所在下標,作為小結點的當前分量值

更新大結點的分量總大小

實現一:

/**

* 動態連通性問題

*/public class unionfound

}//連通兩個結點

public void union(int p,int q)

//獲得結點所在連通分量的末端

public int find(int p)

//判斷是否連通

public boolean connect(int p,int q)

//獲得結點所在連通分量的數量

public int conunt()

public static void main(string args)

uf.union(p,q);

system.out.println(p+" "+q);

s = scanner.nextline();

}system.out.println("總共有"+uf.conunt()+"個連通分量");

}}

實現二:
/**

* 動態連通性問題

*/public class unionfound

power = new int[size];

for (int i = 0; i < power.length; i++)

}//連通兩個結點

public void union(int p,int q)

else

if(size>1)

size--;

}//獲得結點所在連通分量的末端

public int find(int p)

//判斷是否連通

public boolean connect(int p,int q)

//獲得結點所在連通分量的數量

public int conunt()

public static void main(string args)

uf.union(p,q);

system.out.println(p+" "+q);

s = scanner.nextline();

}system.out.println("總共有"+uf.conunt()+"個連通分量");

}}

演算法學習筆記1

1 二分查詢 int arr new int binatsearch arr,12 public static int binatsearch int arr,int a else return 1 使用要求 1 有序 實現思路 1 確定最壞情況沒找到 low height 2 二分查詢 基於最低最...

演算法學習筆記1 演算法簡介

1.1演算法是一組完成任務的指令,任何 片段都可視為 1.2二分查詢 在乙個有序的元素列表 必須有序 如果要查詢的元素包含在列表中,則返回其位置 否則返回null。工作原理 每次都從列表的中間進行查詢,每次都排除一半的數字。例 在1 100中找到乙個我想的數。從50開始,小了,就找50 100之間的...

《演算法》學習筆記 演算法分析(1)

用於研究理解演算法的思想和方法 任務 科學家理解自然世界 策略 細緻地觀察真實世界的特點,通常還要有精確的測量 根據觀察結果提出假設模型 根據模型來 未來的事件 繼續觀察並核實 的準確性 如此反覆知道確認 和觀察一致 分類和類別 程式的執行時間。精確 近似 原理與通則 準確測量程式的執行時間是困難的...