![]() |
|
||||||||
경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지 |
|
B-Tree는 검색의 속도를 높였지만 속도를 높이는 대신 삽입과 삭제시 과연산이 발생합니다. 이 과연산을 줄여 보고자 계선한 것인 B*Tree입니다.
B+Tree는 B-Tree가 모든 자료를 All 스캔시 오버헤드를 발생 시키는 문제를 해결한 것입니다. 즉 트리 순회 방법 중에서 in-order pre-order post-order가 있는것은 아실겁니다. B+Tree는 이런 복잡한 절차없이 트리의 값을 순차 접근이 가능하게 만든겁니다. 아직 C++로 구현 하라면 하겠는데.. 설명이 힘들군요... 어째 설명하고도 뭔가 설명이 모자란다는 생각이 드는군요. 고수님께서 덧말을 붙여 주시기 바랍니다. 그럼 B는 Balance의 약자 아닌가요??^^
B-Tree에서는 일명 multilevel indexing을 사용하는것으로 알고있습니다. B-Tree가 기본적이며 B+, B-, B*는 그것의 단점을 개량한것으로 알고있구요.. 뭘 개선했는지는 모르겠네요.. 기존 이진트리의 문제점이 깊이가 너무깊어지고, 한쪽으로 기울림이 심해진다는 문제가 있쬬..그래서 AVL이란것으로 해결방법이 나오기도 했구요.. 기존 이진트리는 루트를 정하고 아래로 트리를 만들어 가는 반면(Top-Bottom) B-Tree는 아래에서 위로(Bottom-Top)으로 트리를 만들어 나가죠. 즉 노드가 꽉차면 분할하여 노드를 부모로 올리는 식으로 말이죠..에고..설명이 난해했네요.. 관련 글 리스트
|
Copyright © 1999-2015, borlandforum.com. All right reserved. |
전 B-Tree가 필요하면 걍 그거 복사해다가 씁니다.
function TStringList.Find(const S: string; var Index: Integer): Boolean;
var
L, H, I, C: Integer;
begin
Result := False;
L := 0;
H := FCount - 1;
while L <= H do
begin
I := (L + H) shr 1;
C := CompareStrings(FList^[I].FString, S);
if C < 0 then L := I + 1 else
begin
H := I - 1;
if C = 0 then
begin
Result := True;
if Duplicates <> dupAccept then L := I;
end;
end;
end;
Index := L;
end;