[자료구조] 다양한 트리구조(균형 트리, N-항 트리)

2024. 6. 18. 18:14·Computer Science/Data Structure

다양한 트리 구조(균형 트리, N-항 트리)

균형 트리(Balanced Tree)

만약 BST에 다음과 같은 순서로 삽입한다고 생각해보자

bst tree;
tree.insert(10);
tree.insert(9);
tree.insert(11);
tree.insert(8);
tree.insert(7);
tree.insert(6);
tree.insert(5);
tree.insert(4);

 

다음과 같은 구조를 갖는다

  • 전체 트리가 왼쪽으로 편향되어 있다
  • 이 경우 검색을 한다면 비교 횟수가 원소 개수와 거의 같아진다

만약 다음과 같은 순서로 삽입하여 구성된 트리에서 검색을 한다면

bst tree;
tree.insert(7);
tree.insert(5);
tree.insert(9);
tree.insert(4);
tree.insert(6);
tree.insert(10);
tree.insert(11);
tree.insert(8);

 

  • 단계가 크게 감소한다
  • 위와 같은 트리는 편향되지 않은 상태이며, 이러한 트리를 균형이 잡혔다고 한다
  • 즉, find() 함수의 시간 복잡도는 단순히 원소의 개수에 영향을 받는게 아니라, 트리의 형태에도 영향을 받는다
    • 검색을 하계 되면 항상 트리의 아래쪽으로 한 단계씩 나아가서 리프 노드에서 끝난다
    • 따라서 검색에 필요한 단계의 수는 BST의 최대 레벨 수보다는 작다.
    • 검색의 시간 복잡도는 O(높이)로 표현할 수 있다
  • 원소 검색의 시간 복잡도를 최적화 하려면, 트리의 높이가 최적화 되어야 한다.
    • 이러한 작업을 트리의 균형 잡기라고 한다
  • 트리의 균형을 잡기 위해서는 원소 삽입/삭제 이후 트리 구성을 조정해야 한다
  • 이렇게 조정되어 편향성이 줄어든 이진 검색 트리를 높이-균형 BST(height-balanced BST)라고 한다
    • 이를 통해 AVL 트리, 레드-블랙 트리 같은 다양한 트리를 만들 수 있다.
      • AVL 트리의 기본 아이디어는 BST 속성을 유지하며 트리의 높이 균형을 잡기 위해 약간의 회전을 수행한다

N-항 트리(N-ary tree)

  • 각 노드가 N개의 자식을 가질 수 있다.
  • N개의 자식 노드는 벡터를 이용하여 저장할 수 있다
  • 구조체
struct nTree
{
    int data;
    std::vector<nTree*> children;
};
  • 각각의 노드는 임의 개수의 자식을 거느릴 수 있다.
    • 전체 트리도 임의의 형태를 가지게 됨
  • 평범한 N-항 트리는 그다지 유용하지 않아, 요구사항에 맞는 트리를 만들어 사용해야 한다
  • 컴퓨터 분야에서 N항 트리를 사용하는 대표적인 예
    • 컴퓨터 파일 시스템 구조
    • 컴파일러

'Computer Science > Data Structure' 카테고리의 다른 글

[자료구조] 해시 테이블(2)- 충돌  (0) 2024.06.23
[자료구조] 해시 테이블(1)  (0) 2024.06.23
[자료구조] 다양한 트리 구조(BST)  (0) 2024.06.18
[자료구조] 비선형 문제  (0) 2024.06.18
[자료구조] 트리 - 분리 집합  (0) 2024.06.15
'Computer Science/Data Structure' 카테고리의 다른 글
  • [자료구조] 해시 테이블(2)- 충돌
  • [자료구조] 해시 테이블(1)
  • [자료구조] 다양한 트리 구조(BST)
  • [자료구조] 비선형 문제
lumana
lumana
배움을 나누는 공간 https://github.com/bebeis
  • lumana
    Brute force Study
    lumana
  • 전체
    오늘
    어제
    • 분류 전체보기 (459) N
      • Software Development&Engine.. (28) N
        • Performance (0)
        • TroubleShooting (1)
        • Refactoring (0)
        • Test (8)
        • Code Style, Convetion (0)
        • Architecture (1) N
        • 이론 (18)
      • Java (72) N
        • Basic (5)
        • Core (21)
        • Collection (7)
        • 멀티스레드&동시성 (13)
        • IO, Network (8)
        • Reflection, Annotation (3)
        • Modern Java(8~) (13) N
        • JVM (2)
      • Spring (53)
        • Framework (12)
        • MVC (23)
        • Transaction (3)
        • AOP (11)
        • Boot (0)
        • AI (0)
      • DB Access (1)
        • Jdbc (1)
        • JdbcTemplate (0)
        • JPA (14)
        • Spring Data JPA (0)
        • QueryDSL (0)
      • Computer Science (130)
        • Data Structure (27)
        • OS (14)
        • Database (10)
        • Network (21)
        • 컴퓨터구조 (6)
        • 시스템 프로그래밍 (23)
        • Algorithm (29)
      • HTTP (8)
      • Infra (1)
        • Docker (1)
      • 프로그래밍언어론 (15)
      • Programming Language(Sub) (77)
        • Kotlin (1)
        • Python (25)
        • C++ (51)
        • JavaScript (0)
      • FE (11)
        • HTML (1)
        • CSS (9)
        • React (0)
        • Application (1)
      • Unix_Linux (0)
        • Common (0)
      • PS (13)
        • BOJ (7)
        • Tip (3)
        • 프로그래머스 (0)
        • CodeForce (0)
      • Book Review (4)
        • Clean Code (4)
      • Math (3)
        • Linear Algebra (3)
      • AI (7)
        • DL (0)
        • ML (0)
        • DA (0)
        • Concepts (7)
      • 프리코스 (4)
      • Project Review (6)
      • LegacyPosts (11)
      • 모니터 (0)
      • Diary (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
lumana
[자료구조] 다양한 트리구조(균형 트리, N-항 트리)
상단으로

티스토리툴바