의견.png

스큐드 머클트리

해시넷
eom9522 (토론 | 기여)님의 2019년 9월 5일 (목) 15:35 판
이동: 둘러보기, 검색

스큐드 머클트리(skewed merkle tree)란 머클 트리 중에서 최소 개수의 노드를 가지면서, 왼쪽이나 오른쪽 서브 트리만 가지고 있는 트리이다. 스큐드 머클트리는 편향트리, 사향트리라고도 불리기도 한다.

개요

이진 탐색 트리의 탐색 연산은 O(log n)의 시간 복잡도를 갖는다. 트리의 높이를 하나씩 더해갈수록 추가할 수 있는 노드의 수가 두 배씩 증가하기 때문이다. 하지만 저장 순서에 따라 계속 한 쪽으로만 노드가 추가되는 경우가 발생할 수 있는데, 이러한 경우에 스큐드 머클트리가 된다. 이럴 경우 성능에 영향을 미치게 되며, 탐색의 Worst Case가 되고 시간 복잡도는 0(n)이 된다.

리밸런싱 기법

리밸런싱(Rebalancing) 기법이란 균형을 잡기 위한 트리 구조의 재조정을 말한다. 이 기법을 구현한 트리에는 AVL Tree, Red-Black Tree, B-tree 등이 있다.

Red-Black Tree

Red-Black Tree는 다음의 성질들을 만족하는 이진 탐색트리(BST; Binary Search Tree)이다.

  1. 각 노드는 'Red' or 'Black'이라는 색깔을 갖는다.
  2. 루트 노드(root node)의 색깔은 'Black'이다.
  3. 각 리프 노드(leaf node)는 'Black'이다.
  4. 어떤 노드의 색깔이 'red'라면 두 개의 Children의 색깔은 모두 Black이다.
  5. 각 노드에 대해서 노드로부터 descendant leaves까지의 단순 경로는 모두 같은 수의 blaack nodes들을 포함하고있다. 이를 해당 노드의 Black-Height라고 한다.(노드 x로부터 노드 x를 포함하지 않은 리프 노드까지의 simple path 상에 있는 black nodes들의 개수)
  • 특징
  1. 이진 탐색트리이므로 BST의 특징을 모두 갖는다.
  2. 루트 노드로부터 리프 노드 까지의 모든 경로 중 최소 경로와 최대 경로의 크기 비율은 2보다 크지 않다. 이러한 상태를 밸런스 상태라고 한다.
  3. 노드의 자식이 없을 경우 자식을 가리키는 포인터는 NIL 값을 저장한다. 이러한 NIL들을 리프 노드로 간주한다.

RBT는 BST의 삽입, 삭제 연산 과정에서 발생할 수 있는 문제점을 해결하기 위해 만들어진 자료 구조이다.

AVL트리

AVL트리는 삽입, 삭제, 탐색 등 연산을 수행할 때마다 트리 스스로 자신의 밸런스를 확인하고, 필요할 때마다 밸런스를 조정하는 트리이다. 그래서 자가 균형 트리(Self-balancing Tree)라고도 한다.

  • 특징
  1. AVL트리는 BST이면서 동시에 균형을 유지하고 있다.
  2. 모든 노드의 왼쪽과 오른쪽 서브트리의 높이 차이가 1이하다.
  3. 균형을 유지하고 있기 때문에 이진 검색시의 효율성을 보장한다.
  • 장단점
  1. 검색, 삽입, 삭제 모두 O(logN)이며 항상 균형을 맞춘다.
  2. 프로그래밍 하기가 어렵고 디버깅 또한 어렵다.
  3. 위 검색, 삽입, 삭제가 빠르긴 하지만 균형을 맞추는데 시간이 든다.
  4. 대규모 트리를 이룬 후 검색하는 것은 DB에서 주로 발생하는데 DB는 이미 B-Tree 자료구조를 사용중이다.

B-Tree

B-Tree는 데이터를 정렬하여 탐색, 삽입, 삭제 및 순차 접근이 가능하도록 유지하는 트리형 자료구조로 B는 밸런스(Balanced)를 의미하며, 리프 노드(leaf node)가 한쪽 방향으로 쏠리는(skewed) 현상이 적다.

  • 특징
  1. 각 노드는 1/2 이상 채워져야하며, 모든 리프 노드는 같은 레벨(level)에 있다.
  2. 탐색, 추가, 삭제는 루트 노드(root node)로부터 시작한다.
  3. 노드 내 값은 오름차순을 유지한다.
  4. 공백이거나 높이가 1이상인 m-원 탐색 트리(m-way search tree)
  5. 루트와 리프(leaf)를 제외한 내부 노드는 최소 m/2, 최대 m개의 서브트리를 가지며, 적어도 m/2-1개의 키 값을 가진다.(적어도 반 이상이 키 값으로 채워져 있어야 한다.)
  6. 루트는 그 자체가 리프가 아닌 이상 적어도 두개의 서브트리를 가진다.
  7. 모든 리프는 같은 레벨에 있다.(균형트리)

각주

참고자료

같이보기

  의견.png 이 스큐드 머클트리 문서는 블록체인 기술에 관한 토막글입니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 이 문서의 내용을 채워주세요.