Esta seção apresenta as operações básicas com base na estrutura da pesquisa de união definida na seção anterior, consultando e mesclando e julgando se deve conectar.
Consulte o número da coleção onde o elemento está localizado e retorne diretamente o valor da matriz id , com uma complexidade de tempo de O(1) .
...
private int find(int p) { assert p >= 0 && p < count; id de retorno[p]; } ...Para mesclar os conjuntos aos quais pertencem o elemento p e o elemento q , o processo de mesclagem precisa percorrer todos os elementos e, em seguida, mesclar os números dos conjuntos aos quais os dois elementos pertencem.Esse processo é de complexidade O(n) .
...
public void unionElements(int p, int q) { int pID = find(p); int qID = encontrar(q); se (pID == qID) retornar; for (int i = 0; i < contagem; i++) if (id[i] == pID) id[i] = qID; } ...
Código de exemplo Java
Código do arquivo UnionFind1.java:
package runoob.union;
/**
* A primeira versão de union-Find
*/
public class UnionFind1 { // A essência de nossa primeira versão de Union-Find é um array private int[] id; // O número de dados private int count; public UnionFind1(int n) { count = n; id = new int[n]; // inicialização, cada id[i] aponta para si mesmo, nenhum elemento mesclado para (int i = 0; i < n; i++ ) id [i] = i; } // processo de busca, encontra o número da coleção correspondente ao elemento p private int find(int p) { assert p >= 0 && p < count; return id[p]; } // view elemento p e se o elemento q pertence a um conjunto // O(1) complexidade
public boolean isConnected(int p, int q) { return find(p) == find(q); } // Mescla o conjunto ao qual o elemento p e o elemento q pertencem // O(n) complexidade public void unionElements(int p , int q) { int pID = find(p); int qID = find(q); if (pID == qID) return; // O processo de mesclagem precisa percorrer todos os elementos uma vez e mesclar os números de coleção dos dois elementos for (int i = 0; i < count; i++) if (id[i] == pID) id[i] = qID; } }