"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Aprendizagem de gráfico de conjunto disjunto

Aprendizagem de gráfico de conjunto disjunto

Publicado em 01/09/2024
Navegar:957

Disjoint Set Graph Learning

Conjunto disjunto é uma estrutura de dados usada na árvore geradora mínima de Kruskal.
Estas estruturas de dados permitem-nos criar a união de dois ou mais nós.
Permite-nos determinar se dois nós pertencem ao mesmo componente do gráfico de not.
A complexidade do tempo é O (4alpha) (se estivermos usando a compactação de caminho que estamos, caso contrário, será logarítmica), que é uma complexidade de tempo constante que foi comprovada.

Para obter mais informações, consulte


classe Principal{ int pai[] = new int[100000]; classificação int[] = new int[100000]; void makeSet(){ for(int i=1;i6->4->3 , aqui 3 é o pai desta união, então para obter o pai de 7 que é 3 podemos comprimi-lo. como 7->3,6->3,4->3 etc. } união nula(int você, int v){ você = encontrarParente(u); v = encontrarParente(v); if(classificação[u] classificação[v]) pai[v] = u; senão pai[u] =v; // ou pai[v] = u; // aqui você e v tinham a mesma classificação //e agora v se tornou pai de você, portanto sua classificação aumentará classificação[v] ; } public static void main(String args[]) lança exceção{ Principal m = new Principal(); //se recebermos o número de nós como n BufferedReader br = novo BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(br.readLine()); enquanto(n>0){ int você = n--; int v = n--; m.union(u,v);// isso criará uma união de n nós } // se 2 e 3 pertencem ao mesmo componente ou não descobre if(findParent(2)! = findParent(3)) System.out.println("Componente diferente"); else System.out.println("Mesmo componente"); } }
class Main{
    int parent[]  = new int[100000];
    int rank[] = new int[100000];
    void makeSet(){
        for(int i=1;i6->4->3 , here 3 is the parent of this union, so in order to get the parent of 7 which is 3 we can path compress it. like 7->3,6->3,4->3 etc.
    }
    void union(int u, int v){
        u = findParent(u);
        v = findParent(v);
        if(rank[u]  rank[v]) parent[v] = u;
        else parent[u] =v; // or parent[v] = u;
        // here u and v had the same rank
        //and now v became parent of u hence its rank will increase
        rank[v]  ;
    }

    public static void main(String args[]) throws Exception{
        Main m = new Main();
        //if we where given no of nodes as n
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        while(n>0){
            int u = n--;
            int v = n--;
            m.union(u,v);// this will create union of n nodes
        }
        // if 2 and 3 belong to the same component or not find out
        if(findParent(2)! = findParent(3)) System.out.println("Different component");
        else System.out.println("Same component");
    }
}
Declaração de lançamento Este artigo foi reproduzido em: https://dev.to/prashantrmishra/disjoint-set-graph-learning-1f4n?1 Se houver alguma violação, entre em contato com [email protected] para excluí-la
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3