E pesquisa pesquisa rápida

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;     } }


















Acho que você gosta

Origin blog.csdn.net/unbelievevc/article/details/131370151
Recomendado
Clasificación