"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > 서로소 집합 그래프 학습

서로소 집합 그래프 학습

2024-09-01에 게시됨
검색:560

Disjoint Set Graph Learning

Disjoint Set은 Kruskal 최소 스패닝 트리에서 사용되는 데이터 구조입니다.
이 데이터 구조를 사용하면 두 개 이상의 노드의 합집합을 만들 수 있습니다.
이를 통해 두 노드가 not 그래프의 동일한 구성 요소에 속하는지 확인할 수 있습니다.
시간 복잡도는 O(4alpha)입니다(경로 압축을 사용하는 경우 그렇지 않으면 대수가 됩니다). 이는 입증된 일정한 시간 복잡도입니다.

자세한 내용은
를 참조하세요.

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");
    }
}
릴리스 선언문 이 글은 https://dev.to/prashantrmishra/disjoint-set-graph-learning-1f4n?1에서 복제됩니다. 침해 내용이 있는 경우, [email protected]으로 연락하여 삭제하시기 바랍니다.
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3