ÃÑ ÆäÀÌÁö ¼ö : 3224
![]()
|
Facebook Joinc ±×·ì
Joinc QA »çÀÌÆ®
![]()
Tweet
joinc´Â Firefox¿Í chrome¿¡¼ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù. 1 Tree¿¡ ´ëÇÑ Á¤ÀÇ![]()
![]() 1.1 ¿ë¾î Á¤¸®
1.2 ±¸¼º
°¡Àå °£´ÜÇϸ鼵µ ÀϹÝÀûÀÎ ±¸¼ºÀº ¸ðµç node°¡ child¿Í next sibling¸¦ °¡¸®Å°´Â 2°³ÀÇ Æ÷ÀÎÅ͸¦ °¡Áö´Â ±¸¼ºÀÌ´Ù. 2 Binary Tree
¸ðµç ³ëµå°¡ 2°³ ÀÌÇÏÀÇ ÀÚ½ÄÀ» °¡Áú ¶§, À̸¦ Binary(2Áø) tree¶ó°í ÇÑ´Ù. 2ÁøÆ®¸®´Â ±¸¼ºÀÇ °£´ÜÇÔÀ¸·Î ÀڷᱸÁ¶¿¡¼ °¡Àå ³Î¸® »ç¿ëµÇ¾îÁø´Ù. ´ÙÀ½°ú °°Àº 2Áø Æ®¸®ÀÇ ÀÀ¿ëÀÌ ÀÖ´Ù.
![]() 2.1 Ž»ö
µ¥ÀÌÅ͸¦ °¡Á®¿À±â À§Çؼ´Â Æ®¸®¸¦ Ž»öÇØ¾ß¸¸ ÇÑ´Ù. Ž»öÀÇ À§Ä¡¿Í ¼ø¼¿¡ µû¶ó¼ ´Ù¾çÇÑ Å½»ö¹æ¹ýÀÌ Á¸ÀçÇÑ´Ù.
3 Binary Search Tree
¸ðµç ³ëµå¿¡¼ left child < parent < right child¸¦ ¸¸Á·ÇÏ´Â ÀÌÁø Æ®¸®¸¦ ¸»ÇÑ´Ù. ÀÌ·¸°Ô ±¸¼ºµÈ Æ®¸®¿¡¼ ƯÁ¤ °ªÀ» ã°íÀÚ ÇÒ°æ¿ì ¾Æ·¡ÀÇ ÇÔ¼ö·Î Ç¥ÇöÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. 3.1 Searchsearch(x, T)
{
if (T==null)
return null;
else if(x<T.element)
return search(x,T.left);
else if (x>T.element)
return search(x,T.right);
else return T;
}
À§ÀÇ ÇÔ¼ö¿¡¼ ½ÇÇà½Ã°£Àº depth¿¡ ÀÇÇØ¼ Á¿ìµÈ´Ù. ![]()
linear treeÀÏ °æ¿ì ÃÖ¾ÇÀÌ µÇ¸ç O(n)½Ã°£ÀÌ ¼Ò¸ðµÈ´Ù. ¿ÏÀü ÀÌÁø Æ®¸®ÀÎ °æ¿ì ÃÖ»óÀÌ µÇ¸é O(longn)ÀÌ ¼Ò¸ðµÈ´Ù.
Æò±Õ¼Ò¸ð½Ã°£Àº n°³ÀÇ ÀÚ·á¿¡ ´ëÇØ¼ n!°³ÀÇ °¡³¶Èç insertion order¿¡ ´ëÇØ¼ °í·Á¸¦ ÇØ¾ß ÇÑ´Ù.
![]()
Áõ¸íÀ» º¸´Ù ½±°Ô Á¤¸®ÇØ º¸¾Ò´Ù.
3.2 Insert
´ÙÀ½°ú °°Àº ÇÁ·Î½ÃÁ®ÄÚµå·Î Á¤ÀÇÇÒ ¼ö ÀÖ´Ù. Insert(x,T)
{
if(T==null)
{
new T;
T.element = x;
T.left = t.right = null;
else if (x<T.element) T.left = insert(x,T.left);
else if (X>T.element) T.right = insert(x,T.right);
else "ÀÌ¹Ì Á¸Àç";
return T;
}
}
À§ÀÇ °úÁ¤À» ±×¸²À¸·Î ³ªÅ¸³»º¸¾Ò´Ù.![]() 3.3 Delete
´ÙÀ½°ú °°Àº ÇÁ·Î½ÃÁ®ÄÚµå·Î Á¤ÀÇÇÒ ¼ö ÀÖ´Ù. delete(x,T)
{
if(T == NULL) "Error";
if (x<T.element) T.left = delete(X,T.left);
else if (X>T.element) T.right = delete(X,T.left);
// 2 child
else if (T.left && T.right)
{
// find min
repl = T;
while(repl.eft != null) repl = repl.left;
T.element = repl.element;
T.right = delete(T.element, T.right);
}
// 1 child
else
{
tmp = T;
if (T.left == null) repl = T.right;
if (T.right == null) repl = T.left;
free (tmp);
return repl;
}
}
4 AVL Æ®¸®
Binary Æ®¸®ÀÇ ÃÖ´ë ´ÜÁ¡Àº ³ëµåÀÇ ±íÀ̰¡ ºÒ±ÕÇüÇØÁú ¼ö ÀÖ´Ù´Â Á¡ÀÌ´Ù. ÀÌ´Â ÃÖ¾ÇÀÇ °æ¿ì O(n)ÀÇ ½Ã°£ÀÌ ¼ÒºñµÉ ¼ö ÀÖÀ½À» ÀǹÌÇÑ´Ù. ±×·¡¼ Æ®¸®ÀÇ ±ÕÇüÀ» ¸ÂÃß°íÀÚÇÏ´Â ½Ãµµ¸¦ ÇϰԵǾúÀ¸¸ç, AVLÀº ÃÖÃÊ·Î °í¾ÈÇØ³½ ±ÕÇü(balance) Æ®¸®´Ù.
AVLÀº ¿ÞÂʰú ¿À¸¥ÂÊÀÇ subtreeÀÇ ³ôÀ̰¡ 1ÀÌ»ó Â÷À̳ªÁö ¾ÊÀ¸¸ç 1962³â Adelson,velskii, Landis¿¡ ÀÇÇØ¼ ¸¸µé¾î Á³´Ù.
AVLÀÇ ¾ÆÀ̵ð¾î´Â O(long)ÀÇ ¿¬»ê¸¸À¸·Î treeÀÇ ±ÕÇüÀ» ¸ÂÃߴµ¥ ÀÖ´Ù. 4.1 AVLÀÇ height´Â Ç×»ó O(logn)À» À¯ÁöÇÑ´Ù.
4.2 Rotate4.3 ȸÀü(Rotate)
AVL Æ®¸®ÀÇ ÇÙ½ÉÀº °á±¹ Æ®¸®ÀÇ ±ÕÇüÀ» ¸ÂÃß´Â °ÍÀ̶ó ÇÒ ¼ö ÀÖ´Ù. ÀϹÝÀûÀ¸·Î Æ®¸®ÀÇ ±ÕÇüÀº Æ®¸®¿¡ »õ·Î¿î node°¡ Ãß°¡µÉ ¶§ ¹ß»ýÀ» ÇÑ´Ù. ÀÌ·¯ÇÑ ±ÕÇüÀÇ ¹®Á¦¸¦ ÇØ°áÇϱâ À§Çؼ Rotate¸¦ ÀÌ¿ëÇÑ´Ù.
´ÙÀ½Àº Single rotationÀÇ ¿¹ÀÌ´Ù.
Upload new Attachment "tree9.png"
´ÙÀ½Àº double rotationÀÇ ¿¹ÀÌ´Ù.
Upload new Attachment "tree10.png"
´ÙÀ½Àº °¢°¢ÀÇ rotate¸¦ ÇÁ·Î½ÃÁ® ÄÚµåÈ ÇÑ °ÍÀÌ´Ù. single_rotate_left(n2)
{
n1 = n2.left
n2.left = n1.right;
n1.right = n2;
n2.height = max(n2.left.height, n2.right.height)+1;
n1.height = max(n1.left.height, n1.right.height)+1;
return n1;
}
docuble_rotate_left(n3)
{
n1 = n3.left
n3.left = single_roate_right(n3.right);
return single_roate_left(n3);
}
4.4 Insertion
»ðÀÔÀº ¹ÙÀ̳ʸ® Æ®¸®¿Í ±âº»ÀûÀ¸·Î °°´Ù. ±×·¯³ª »ðÀÔÀÌ ÀϾ °æ¿ì ±ÕÇüÀÌ ±úÁú¼ö °¡ Àִµ¥, À̰æ¿ì roate¸¦ ÇØ¾ß ÇÑ´Ù.
insert(x,T)
{
if(T == NULL) new T;
else if(x<T.element)
{
T.left = insert(x, T.left);
if((T.left.height - T.right.height) == 2)
{
if (x<t.left.element)
T=single_roate_left(T);
else
T=double_roate_left(T);
}
else
T.height = max(T.left.height, T.right.height)+1;
}
else if (x>T.element)
{
// À§ÄÚµå¿Í µ¿ÀÏ
}
else "Error";
return T;
}
|
|
|
|
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù. |
|