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

자유게시판
세상 살아가는 이야기들을 나누는 사랑방입니다.
[21256] RBTree의핵심
김상면 [windyboy] 5212 읽음    2012-04-03 07:23
요즘 떠오르는시사가...
메모리 DB입니다.

메모리 DB엔진 중하나가....
RBTree입니다.

요놈 참 사람 속 석입니다.
선생은 쉽다고 하는데...
고수라도 3일은 연구해야 이해가 가능하고...
저같이 아이큐가 45인 사람은 3달은 메진해야 이해가 갑니다.
이해가 가더라도 1년은 공부해야 아항 그렇구나 하는 느낌이 옵니다.

이해가 가고 나면 정말허탈합니다.
회전이니 뭐니  상승 하강이니 뭐니 해도...
모든 문제가 한가지로 일축됩니다.

나의 왼쪽이나 오른쪽 자식중 하나가 2개이상의 노드를 더가지고 있으면
하나를 빼앗아서 모자라는 쪽에 줘 버리면 된다는 겁니다.

무조건 줘 버리면 트리의 균형이 깨지므로
많은쪽에 하나를 빼앗아서 부모인 나의 자리에 두고 대신 부모인 내가 모자라는 쪽의 자식으로 가버리는겁니다.
요 트릭때문에 그렇게 어려운것이었습니다.
요게 핵심이더군요...

등가표현이니 회전이니 뭐 그런거 다필요없읍니다.
많은쪽의 하나를 모자라는쪽에 주되 트리의 균형이 중요하므로 부모가 개입한다는거....
정말이지 별로 어럽지도 않게 사람의 머리만 아프게 햇습니다.

그럼 많이들 연구하시길....
이거 만들어서 팔면 몇억씩 받을수 있으려나?
그럼
깔쌈보이 [handsome]   2012-04-03 08:58 X
아시는 분은 아시고, 모르시는 분은 모르실 알음알음으로 유명한 제품들...
디스크샷,VirtualFDD,ezBackTO... 모두 한국사람이 만든 매니악한 시스템 프로그램들이죠...

이 프로그램들의 핵심코어에는 BTree가 있습니다. 당연히 RBTree와 같은 BTree를 원류로 하는 것들도 한자리 하고 있겠죠?
저도 요즘 땀흘리며 공부중인데... 20년전 드난시 했던 BTree가 이렇게 절실하게 필요할 줄이야... ㅠ.ㅠ
남병철.레조 [lezo]   2012-04-03 09:59 X
좋아요~1
이경문 [gilgil]   2012-04-03 13:44 X
BTree와 RBTree는 쓰임새가 다르지 않나요? BTree는 File System 혹은 Database에서 검색을 빠르게 하기 위해 한방이 여러 갈래로 갈 수 있도록 하는 자료 구조이고, Reb Black Tree는 AVL Tree와 마찬가지로 Skew하게 갈 수 잇는 Tree 구조를 Balanced Tree로 만들기 위한 방법으로 알고 있는데...
깔쌈보이 [handsome]   2012-04-03 15:03 X
이경문님, 그런건가요? ^^;
저도 아직은 BTree만 공부하고 있고,RBTree까지는 진도를 못 나가봤네요...
저보고 공부하라고 다그치는 분이 계셔서 공부하고 있다능... --;
RBTree도 BTree를 잘 모른다고 항께,쥐어박히면서 이런 알고리즘이 있다는 것도 들었었네요 ^^

그럼 경문님께서 말씀하신 형태의 알고리즘을 저 프로그램의 어떤 부분에서 응용되었는지 더 궁금해지는군요... ㅋ
죽도록 공부해야 하는게 이 바닥인가 봅니다. ㅠ.ㅠ
빌더(TWx) [builder]   2012-04-03 17:18 X
RBTree라고 해서 BTree와 크게 다를 건 없죠. 다만 RBTree의 경우 노드 체인이 밸런스를 유지하는 구조이기 때문에, 트리의 모든 경로가 다른 경로의 두배 이상 길어지지 않아서 트리탐색 시간을 O(log n)으로 보장 받을 수 있다는 정도만 다를 뿐이죠. 리누스 커널의 경우를 예로 들면... 스케쥴러에서 RBTree를 사용하는데. 프로세스 요구가 높은 항목들을 RBTree의 왼쪽에 두고서, 맨 왼쪽 노드를 다음에 실행할 노드로 선택하면 프로세스들 간에 전체적인 실행 밸런스가 자연스럽게 유지되는 효과를 얻을 수 있기 때문에 RBTree를 이용하기도 하고요. 노드 체인이 밸런스를 유지하는 구조라는 게 다를 뿐, BTree와 크게 다를 게 없습니다. RBTree도 일반적인 자료구조 중에 하나일 뿐입니다.
이경문 [gilgil]   2012-04-03 23:22 X
음... 용어의 정리가 필요할 거 같은데요,

일반적으로 전산학에서 BTree라고 하면 Binary Tree를 뜻하지는 않습니다. Binary Tree는 Retrieve를 할 때 이분법적으로 나아 가지만 BTree에서는 n분법(사용자가 정하는 대로)으로 분기하며 검색을 하는 큰 차이점이 있습니다. 또한 BTree는 뭉태기(block) 단위의 검색에 효율적으로 사용되어 질 수 있는 기법이기 때문에 DB 검색(Primay or Secondary Key)에 주로 사용되어 지는 기법이죠. BTree는 이를 응용한 B+Tree, B*Tree 등이 있는데 대부분 Database 와 관련된 곳에서 사용이 되는 기법입니다.

반면에 RBTree(red block tree)는 bancing binary tree를 유지하기 위한 방법 중의 하나이구요.

http://en.wikipedia.org/wiki/B-tree 에서 자세히 나와 있으니 참고하시면 좋을 것 같습니다. ^^
빌더(TWx) [builder]   2012-04-03 23:45 X
Balanced Tree 구조에 대한 상대적인 개념으로 BTree를 일반화 해서 얘기한 거고요. 컴퓨터공학을 전공한 사람인데 트리구조를 모르겠습니까. 글 올리신 분이 RBTree에 대해서 너무 과장하고 있는 부분이 보여서 이해하기 쉽게 풀어서 적었던 겁니다. ^^

신성기 [barmi]   2012-04-06 13:29 X
RBTree와 B-Tree에 관한 얘기군요.
RBTree는 B-Tree의 특수한 케이스라고 할 수 있습니다.
즉, B-Tree중에서 order가 4인 Tree, 보통 2-3-4 Tree라고 합니다.
이 2-3-4 Tree가 RBTree와 동일한 Tree입니다.
이것을 잘 보여주는 예제가 다음 링크에 있습니다.
http://people.ksp.sk/~kuko/bak/
RB-Tree의 탭에서 2-3-4모드를 체크해 보시면 어떻게 동일한 지를 보여줍니다.

아무래도 눈으로 보는 것이 가장 이해하기가 쉽겠지요.

참고하시기 바랍니다.

+ -

관련 글 리스트
21256 RBTree의핵심 김상면 5212 2012/04/03
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.