외부 이진 탐색 알고리즘: 두 판 사이의 차이

IT 위키
(새 문서: 외부 이진 탐색 트리(external binary search tree)는 모든 키(key)를 '''리프 노드(외부 노드)'''에 저장하는 이진 탐색 트리 구조이다. 내부 노드에는 실제 키 대신 탐색을 위한 비교 정보만 저장되며, 키와 연관된 실제 데이터는 리프 노드에 위치한다. ==개념== *외부 노드만 실제 키를 저장하고, 내부 노드는 탐색 경로를 위한 정보만 갖는다 *삽입, 삭제, 탐색 과정에서 비교는...)
 
(외부 이진 탐색 트리 문서로 넘겨주기)
태그: 새 넘겨주기
 
1번째 줄: 1번째 줄:
외부 이진 탐색 트리(external binary search tree)는 모든 키(key)를 '''리프 노드(외부 노드)'''에 저장하는 이진 탐색 트리 구조이다. 내부 노드에는 실제 키 대신 탐색을 위한 비교 정보만 저장되며, 키와 연관된 실제 데이터는 리프 노드에 위치한다.
#넘겨주기 [[외부 이진 탐색 트리]]
==개념==
*외부 노드만 실제 키를 저장하고, 내부 노드는 탐색 경로를 위한 정보만 갖는다
*삽입, 삭제, 탐색 과정에서 비교는 내부 노드를 통해 이루어지고, 실제 데이터는 외부 노드에 도달했을 때 확인된다
*일부 문헌에서는 이를 '''트라이 기반 탐색 구조''' 또는 '''2-포인터 노드 구조'''와 비교하기도 한다
==특징==
*모든 데이터는 리프에 존재 → 외부 노드 수 = 데이터 수
*내부 노드는 비교 기준만 가지므로 공간 절약 가능
*균형 잡힌 구조로 만들면 디스크 I/O를 고려한 외부 기억장치 기반 탐색 구조로도 활용 가능
==구조 예시==
삽입된 키: 10, 20, 30
 
트리 구조 (내부 노드: (), 외부 노드: [키])<pre>
          (20)
        /    \
    (10)      [30]
    /    \
[10]  [20]
</pre>
 
== 동작 예시 ==
 
=== 삽입 ===
#외부 노드를 탐색해 삽입 위치를 찾는다
#해당 외부 노드를 분할하여 새로운 내부 노드와 두 개의 외부 노드를 생성한다
<syntaxhighlight lang="py3">
Insert(K):
    e ← Lookup(K)  // e는 외부 노드
    K1 ← e.key
    p ← e.parent
 
    if K1 == K: 실패 (중복 삽입 불가)
   
    // 새로운 노드 만들기
    e1 ← new external node (K)
    u ← new internal node
 
    if K < K1:
        u.key ← K1
        u.left ← e1
        u.right ← e
    else:
        u.key ← K
        u.left ← e
        u.right ← e1
 
    // 부모와 연결
    if p.left == e:
        p.left ← u
    else:
        p.right ← u
</syntaxhighlight>
 
=== 삭제 ===
#삭제 대상이 있는 외부 노드를 찾는다
#부모 내부 노드와 그 자식을 함께 제거하고, 자식을 대체할 외부 노드를 연결
<syntaxhighlight lang="py3">
Delete(K):
    x ← Lookup(K)
    if x.key ≠ K: 실패
 
    u ← x.parent
    y ← x의 sibling (u.left 또는 u.right 중 x가 아닌 쪽)
 
    if u가 root면:
        root ← y
    else:
        p ← u.parent
        if p.left == u:
            p.left ← y
        else:
            p.right ← y
</syntaxhighlight>
 
=== 검색 ===
<syntaxhighlight lang="py3">
Lookup(K):
    u ← root
    while u는 internal node:
        if K < u.key: u ← u.left
        else:        u ← u.right
    return u  // external node
</syntaxhighlight>
 
==장점==
*외부 노드에만 키 저장 → 탐색 구조가 단순화됨
*일부 외부 저장구조(B-tree, B+트리)의 기초 개념으로 사용됨
*삽입/삭제 시 리프 단에서만 변화 발생 → 병렬성 증가
==단점==
*일반 [[이진 탐색 트리]]에 비해 깊이가 깊어질 수 있음
*내부 노드에 값이 없기 때문에 비교 연산이 비효율적으로 될 수 있음
*최악의 경우 균형이 무너지면 선형 구조가 될 수 있음
==활용==
*외부 메모리 기반 탐색 알고리즘 설계
*[[B트리]], [[B+트리]] 같은 고차원 자료구조의 기반 이론
*네트워크 라우팅 테이블, 파일시스템 인덱스
==같이 보기==
*[[이진 탐색 트리]]
*[[AVL 트리]]
*[[B트리]]
*[[B+트리]]
*[[외부 정렬]]
==참고 문헌==
*Cormen, T. H., Leiserson, C. E., Rivest, R. L., & Stein, C. (2009). Introduction to Algorithms. MIT Press
*Knuth, D. E. (1998). The Art of Computer Programming Vol. 3: Sorting and Searching. Addison-Wesley

2025년 4월 10일 (목) 06:17 기준 최신판