SunFly의 코딩 및 정보 블로그

B-tree 탐색(searching or Retrieval) 알고리즘 본문

알고리즘

B-tree 탐색(searching or Retrieval) 알고리즘

SunFly 2021. 10. 11. 14:32

m-원 탐색 트리와 알고리즘은 동일하다.

(이진 탐색을 사용한다.)

 

※ Searhing 알고리즘

  • (1) Pointer curr를 Tree의 Root노드에 지정한다.
  • (2) curr 노드에서 왼쪽부터 오른쪽으로 record를 스캔한다. => if curr==NULL, retrun with fail(만약 curr노드가 NULL이면 실패한다.)
  • (3) i=0;
  • (3-1) if (i >= fill_cnt) { curr = P[i]; goto 2; } // 더이상 비교하지 않고 마지막 포인터를 사용한다.
  • (3-2)
  • (Case1) rec.key < skey : i = i++; go to (3-1) //다음 record를 스캔한다.
  • (Case2) rec.key == skey : return with success //탐색 성공
  • (Case3) rec.key > skey : curr = P[i]; goto 2; //go down to a child

ex) key값 45를 탐색한다고 하자.


★code

 

// retrieval.c

#include "functions.h"

void retrieval(nodeptr curr, char CompName[])
{
nodeptr temp_ptr = NULL;

int level = 1;

int i = 0;

do {
for (i = 0; i < curr->fill_cnt; i++) {
if (strcmp(CompName, curr->rec[i].name) < 0) {
break;
} // if (CompName)
else if (strcmp(CompName, curr->rec[i].name) == 0) {
printf("\t%s 레코드는\n", CompName);
printf("\t레벨%d에 위치하며 이 노드의 %d번째 레코드에 존재합니다.\n", level, i+1);
return;
} // else if (CompName)

} // for (i)

temp_ptr = curr->ptr[i];

if (temp_ptr) { curr = temp_ptr; level++; }

} while (temp_ptr);

printf("%s 레코드가 존재하지 않습니다.\n", CompName);
}