C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
분야별 포럼
C++빌더
델파이
파이어몽키
C/C++
프리파스칼
파이어버드
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

자유게시판
세상 살아가는 이야기들을 나누는 사랑방입니다.
[12250] B-Tree 에 대한 질문...
김상면 [windyboy] 5891 읽음    2006-10-18 14:09
정말 어렵군요...B-Tree
요놈 정복하는데 1달 걸렸습니다.....
어메 어려운것....
이놈 공부 할려고 화일 처리론2권하고 이재규님의 책을 안고 뒹군지가...
어언 한달.... 이제는 제 돌머리가 솜방망이가 되어 B-Tree에 대한 정보가 속속 잘 들어 옵니다.
크.....
여러분 가르쳐 드릴까요?.......

저만 알고 있을려니 입이 근질 하군요...
아직 실력이 부족하여 완벽한 설명은 못하고 간단히 한마디만 힌트를 드립니다.
자료 구조를 공부하신 분이라면  자료 정리 법 중에 '분할 과 정복'이라는 기법이 있을겁니다.
이 '분할과 정복' + '2진 트리' 의 성질을 잘 공부하신다면 넘 쉽게 이해 하실겁니다.
알고 보면 별거 아닙니다.....
아참 또 틀렸당 '분할과 병합' + '2진 트리'  요겁니다.
죄송합니다.

이제 저의 질문을 드립니다.
제가 이렇게 B-Tree을 겨우 공부 했는데 보다 최적화되고 빠른 B-Tree을 공부하고 싶군요...
그니까 가장 최적화되고 빠르고 ..... 뭐 아뭍튼 가장 좋은 B-Tree알고리즘을 이제는 공부하고 싶군요...
누가 아시는분 좀 가르쳐 주세요...
책을 소개 해주시던지.... 직접 강의 해주시면 넘 감사 하겠고....아님 인터넷 주소라도....
크.....

그럼
양병규 [bkyang]   2006-10-18 16:22 X
TStringList에 Find메소드가 있는데 그걸 함 보시지요... ^^;
전 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;
김상면 [windyboy]   2006-10-18 18:16 X
그건 B-Tree가 아니고 이진 트리쟎아요...
이진 트리는 log(N,2)의 속도를 자랑하지만
B-Tree는 log(N,M)의 속도를 자랑하므로
현재 서칭 알고리즘중 초고봉이라고 하는거 아닌가요?

이진트리는 제가 좀 압니다.
제가 질문 드린것은 B-Tree입니다.
그럼
양병규 [bkyang]   2006-10-18 19:19 X
컥...그런가요? 전 B-Tree의 B가 바이너리의 약잔줄알고 B-Tree가 이진트리라고 생각했네여 ^^;
류종택 [ryujt]   2006-10-18 19:25 X
B는 아마도 제 기억에 밸랜스였지 싶습니다. ㅡ.ㅡ;
학교 다닐 때 보고는 오늘 첨 보네요 B-Tree
예전에 터보파스칼에는 B-Tree용 라이브러리도 있었던 적이...
(국내에서는 잘 사용하는 분이 없었던 거 같지만 서도)
남병철.레조 [lezo]   2006-10-18 22:44 X
B트리와 B+트리가 무슨 차이 인가요??
김상면 [windyboy]   2006-10-18 23:04 X
B-Tree는 검색의 속도를 높였지만 속도를 높이는 대신 삽입과 삭제시 과연산이 발생합니다. 이 과연산을 줄여 보고자 계선한 것인  B*Tree입니다.
B+Tree는 B-Tree가 모든 자료를 All 스캔시 오버헤드를 발생 시키는 문제를 해결한 것입니다. 즉 트리 순회 방법 중에서 in-order  pre-order  post-order가 있는것은 아실겁니다.
B+Tree는 이런 복잡한 절차없이 트리의 값을 순차 접근이 가능하게 만든겁니다.

아직 C++로 구현 하라면 하겠는데.. 설명이 힘들군요...
어째 설명하고도 뭔가 설명이 모자란다는 생각이 드는군요.
고수님께서 덧말을 붙여 주시기 바랍니다.
그럼
조성택, 클라인 [whtjdxor]   2006-10-19 09:26 X
B는 Balance의 약자 아닌가요??^^
B-Tree에서는 일명 multilevel indexing을 사용하는것으로 알고있습니다.
B-Tree가 기본적이며 B+, B-, B*는 그것의 단점을 개량한것으로 알고있구요..
뭘 개선했는지는 모르겠네요..
기존 이진트리의 문제점이 깊이가 너무깊어지고, 한쪽으로 기울림이 심해진다는 문제가 있쬬..그래서 AVL이란것으로 해결방법이 나오기도 했구요..
기존 이진트리는 루트를 정하고 아래로 트리를 만들어 가는 반면(Top-Bottom)
B-Tree는 아래에서 위로(Bottom-Top)으로 트리를 만들어 나가죠.
즉 노드가 꽉차면 분할하여 노드를 부모로 올리는 식으로 말이죠..에고..설명이
난해했네요..
남병철.레조 [lezo]   2006-10-19 09:47 X
  노드를 부모로 올린다라...
저도 6년전 B+트리를 구현하는 레포트를 받아서.. 남들은 소스 구해서 하는데 전 알고리즘이야 슈더코드만 있으면 할 수 있다는 자신감에 -_-;
덤볐다가 미완성한 기억이 있습니다.
밸런스 트리 관련으로 정리 되시면 한번 공유했으면 합니다. ^^
집에 알고리즘 관련 책들도 좀 있지만...
아무래도 실무에서 이런 스터디 하면서 작업하기는 여간해서 시간내기 쉽지 않네요.. ^^;
양병규 [bkyang]   2006-10-19 10:02 X
  헉..@@ 어렵다....
에보니.^0^m [mortalpain]   2006-10-19 10:07 X
음 버추얼 트리뷰나 퀀텀 트리뷰의 소스를 파보면 나올지도 모릅니다 쿠쿠 =ㅅ=;;
남병철.레조 [lezo]   2006-10-19 17:01 X
ㅎ;; 역시 하루 이틀 시간내서는 ㅠ.ㅠ..
아무튼 오랜만에 옛 기운을 느껴본것 같습니다. ㅎㅎ
B+Tree.. 당시에는 참 감을 잡기어려웠는데... 흑흑.. 노드 회전 규칙들을 좀 더 차근차근 구현했으면 좋았으련만.. 여자애들 가르쳐 준다고 딴데 신경썼었는지 -_-ㅋ
깊이가 좀 깊어지면 문제가 생겼던걸로 기억됩니다.
음... 요즘 책을 보기가;; 여간해서는 짬 내기 어려워 참... -_-;
kkckc [kkckc]   2006-10-19 17:01 X
분명히 배운거고..
숙제로도 했는데..

왜 하나도 기억이 안날까요 ㅡㅜ
김상면 [windyboy]   2006-10-19 18:17 X
열씸 님 WISS 소스나 C-ISAM는 어데서 구하지요!
함 보고 싶네요!
그럼
이경문 [gilgil]   2006-10-19 18:48 X
B Tree라...
예전에 학교 댕길 때 이놈 때문에 엄청 고생한 기억이 나네요. ^^
B Tree를 이용해서 검색하는 프로젝트였는데
그 후로 등 검색에 사용되는 많은 알고리즘들을 공부했었지만
역시나, 현업에서는 당장에 건드릴 일이 없다는 현실... 쩝~~

www.sf.net 에서 "B Tree"로 검색해 보세요.
많은 소스들이 돌아 다니네요.
김상면 [windyboy]   2006-10-19 21:12 X
감사합니다.

+ -

관련 글 리스트
12250 B-Tree 에 대한 질문... 김상면 5891 2006/10/18
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.