ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Set - 집합에 랭크를 추가
    C 자료구조/Set 2020. 6. 30. 20:01

    < 쉽게 배우는 알고리즘 > 인용

     

    1. 설명

    앞에서 한 기본적인 내용을 기반으로 랭크를 추가할 것. 

    각 노드는 자신을 루트로 하는 서브트리의 높이를 랭크(Rank)라는 이름으로 저장한다.

    단 하나의 노드로 이루어진 트리의 높이는 0이라고 정의한다.

    루트 노드의 랭크가 해당 집합의 랭크가 된다.

    아래의 [그림 1]은 집합을 나타내는 트리에서 각 노드의 랭크를 사각형 안에 표기한 것이다.

    랭크를 이용한 Union에서는 두 집합을 합칠 때, 랭크가 낮은 집합을 랭크가 높은 집합에 붙인다. 

     

    [그림 1]

    아래의 [그림 2]에서 두 집합의 랭크는 각 각 2와 1이다.

    랭크가 1인 집합을 랭크가 2인 집합에 붙였고, 두 집합의 랭크는 여전히 2이다.

    이런 방식으로 합칠 때, 합집합의 랭크가 커지는 경우는 두 집합의 랭크가 동일한 경우 밖에 없다. [그림 3]을 보자.

     

    [그림 2]

    [그림 3]

     

    2. 알고리즘

    아래는 랭크를 이용한 경우의 알고리즘들이다.

    FindSet은 앞과 동일하다.

     

    3. 구현

    집합 구조체에 랭크를 추가

    아래는 집합의 연산 함수들

    메인 함수

    실행 결과

    헤더 파일 & 소스 파일

    common.h
    0.00MB
    main.c
    0.00MB
    SetTree.c
    0.00MB
    SetTree.h
    0.00MB

    'C 자료구조 > Set' 카테고리의 다른 글

    Set - 경로 압축  (0) 2020.07.02
    Set - Basic  (0) 2020.06.29

    댓글

Designed by Tistory.