Tree
ÃÑ ÆäÀÌÁö ¼ö : 3224

Àüü ÇÔ¼ö/¿ë¾î»çÀü
Facebook Joinc ±×·ì   Joinc QA »çÀÌÆ®



joinc´Â Firefox¿Í chrome¿¡¼­ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼­´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.

Replace original file
Rename if it already exist

Contents

1 Tree¿¡ ´ëÇÑ Á¤ÀÇ
1.1 ¿ë¾î Á¤¸®
1.2 ±¸¼º
2 Binary Tree
2.1 Ž»ö
3 Binary Search Tree
3.1 Search
3.2 Insert
3.3 Delete
4 AVL Æ®¸®
4.1 AVLÀÇ height´Â Ç×»ó O(logn)À» À¯ÁöÇÑ´Ù.
4.2 Rotate
4.3 ȸÀü(Rotate)
4.4 Insertion

1 Tree¿¡ ´ëÇÑ Á¤ÀÇ

tree1.png
  • tree´Â 0°³ ÀÌ»óÀÇ nodeÀÇ ÁýÇÕÀÌ´Ù.
  • ³ëµåÀÇ ¼ö°¡ 0°³À̸é, tree´Â ºñ¾îÀÖ´Ù(empty)¶ó°í ÇÑ´Ù.
  • ³ëµåÀÇ ¼ö°¡ 1°³ ÀÌ»óÀ̸é, ÃÖ»óÀ§(root)³ëµå°¡ Á¸ÀçÇÑ´Ù. ³ª¸ÓÁö ³ëµå´Â subtree¶ó ÇÑ´Ù.
  • subtreeÀÇ ·çÆ®´Â Àüü Æ®¸®ÀÇ ·çÆ®¿Í edge·Î ¿¬°áµÈ´Ù.

´ÙÀ½Àº ÀϹÝÀûÀÎ treeÀÇ ¿¹ÀÌ´Ù.

tree2.png

1.1 ¿ë¾î Á¤¸®

  • T1, T2, ..., T3´Â rootÀÎ rÀÇ ÀÚ½Ä(child)¶ó°í ÇÑ´Ù. rÀº T1, T2,..ÀÇ ºÎ¸ð(parent)°¡ µÈ´Ù. T1, T2´Â ¼­·ÎÀÇ sibling ¶ó°í ÇÑ´Ù.
  • node°¡ °¡Áö´Â ÀÚ½ÄÀÇ ¼ö¸¦ ´Ü°è(degree)¶ó°í ÇÑ´Ù.
  • degree°¡ 0ÀÎ node¸¦ ÀÙ(leaf)¶ó°í ÇÑ´Ù.
  • n1, n2, ..., nkÀÎ ÀÏ·ÃÀÇ ³ëµåµéÀÌ ÀÖ°í, ni°¡ ni+1ÀÇ ºÎ¸ð³ëµåÀϰæ¿ì À̰ÍÀ» path¶ó°í ÇÑ´Ù.
  • n1À¸·Î ºÎÅÍ n2±îÁöÀÇ path°¡ Á¸ÀçÇϸé n1À» ancestor, n2¸¦ decendentÀ̶ó°í ÇÑ´Ù.
  • °¡Àå ±ä pathÀÇ ±æÀ̸¦ Æ®¸®ÀÇ ³ôÀÌ(height)¶ó°í ÇÑ´Ù.

1.2 ±¸¼º

°¡Àå °£´ÜÇϸ鼭µµ ÀϹÝÀûÀÎ ±¸¼ºÀº ¸ðµç node°¡ child¿Í next sibling¸¦ °¡¸®Å°´Â 2°³ÀÇ Æ÷ÀÎÅ͸¦ °¡Áö´Â ±¸¼ºÀÌ´Ù.

2 Binary Tree

¸ðµç ³ëµå°¡ 2°³ ÀÌÇÏÀÇ ÀÚ½ÄÀ» °¡Áú ¶§, À̸¦ Binary(2Áø) tree¶ó°í ÇÑ´Ù. 2ÁøÆ®¸®´Â ±¸¼ºÀÇ °£´ÜÇÔÀ¸·Î ÀڷᱸÁ¶¿¡¼­ °¡Àå ³Î¸® »ç¿ëµÇ¾îÁø´Ù. ´ÙÀ½°ú °°Àº 2Áø Æ®¸®ÀÇ ÀÀ¿ëÀÌ ÀÖ´Ù.
  • binary search tree: ¸ðµç ³ëµå¿¡¼­ left child < parent < light child¸¦ ¸¸Á·ÇÏ´Â Æ®¸®¸¦ ¸»ÇÑ´Ù. °¡Àå ³Î¸® »ç¿ëµÇ´Â ÀÀ¿ëÀÌ´Ù.
  • expansion tree : ÄÄÆÄÀÏ·¯°¡ Ç¥ÇöÀ» ÇØ¼®Çϱâ À§Çؼ­ »ý¼ºÇÏ´Â tree´Ù. ´ÙÀ½Àº ÀϹݼö½ÄÀ» ÇØ¼®Çϱâ À§Çؼ­ »ý¼ºµÈ expansion treeÀÇ ¿¹ÀÌ´Ù.

tree3.png

2.1 Ž»ö

µ¥ÀÌÅ͸¦ °¡Á®¿À±â À§Çؼ­´Â Æ®¸®¸¦ Ž»öÇØ¾ß¸¸ ÇÑ´Ù. Ž»öÀÇ À§Ä¡¿Í ¼ø¼­¿¡ µû¶ó¼­ ´Ù¾çÇÑ Å½»ö¹æ¹ýÀÌ Á¸ÀçÇÑ´Ù.
  • ±íÀÌ ¿ì¼± Ž»ö(preorder) : left child->parent->right child ¼øÀ¸·Î ¹æ¹®ÇÑ´Ù. À§ÀÇ binary treeÀÇ °æ¿ì ++a*bc*+*defg °¡ µÈ´Ù.
  • ³ÐÀÌ ¿ì¼± Ž»ö (postorder) : left child->right child->parent child ¼øÀ¸·Î ¹æ¹®ÇÑ´Ù. stack machineÀ» À§ÇÑ compiler¿¡¼­ code »ý¼ºÀ» À§Çؼ­ »ç¿ëÇÑ´Ù.
  • inorder: parent->left child->right child ¼øÀ¸·Î ¹æ¹®ÇÑ´Ù. ÀϹÝÀûÀ¸·Î ¼ö½ÄÀ» Ç¥ÇöÇϱâ À§Çؼ­ ¸¹ÀÌ »ç¿ëÇÑ´Ù. À§ÀÇ ÀÌÁø Æ®¸®ÀÇ °æ¿ì b*c+a+d*e+f*g °¡µÈ´Ù.

3 Binary Search Tree

¸ðµç ³ëµå¿¡¼­ left child < parent < right child¸¦ ¸¸Á·ÇÏ´Â ÀÌÁø Æ®¸®¸¦ ¸»ÇÑ´Ù. ÀÌ·¸°Ô ±¸¼ºµÈ Æ®¸®¿¡¼­ ƯÁ¤ °ªÀ» ã°íÀÚ ÇÒ°æ¿ì ¾Æ·¡ÀÇ ÇÔ¼ö·Î Ç¥ÇöÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.

3.1 Search

search(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¿¡ ÀÇÇØ¼­ Á¿ìµÈ´Ù.

tree4.png

tree5.png

linear treeÀÏ °æ¿ì ÃÖ¾ÇÀÌ µÇ¸ç O(n)½Ã°£ÀÌ ¼Ò¸ðµÈ´Ù. ¿ÏÀü ÀÌÁø Æ®¸®ÀÎ °æ¿ì ÃÖ»óÀÌ µÇ¸é O(longn)ÀÌ ¼Ò¸ðµÈ´Ù.

Æò±Õ¼Ò¸ð½Ã°£Àº n°³ÀÇ ÀÚ·á¿¡ ´ëÇØ¼­ n!°³ÀÇ °¡³¶Èç insertion order¿¡ ´ëÇØ¼­ °í·Á¸¦ ÇØ¾ß ÇÑ´Ù.
  1. Internal Path Length D(n)À» tree¿¡ ÀÖ´Â ¸ðµç ³ëµåµéÀÇ ±íÀÌÀÇ ÇÕÀ¸·Î Á¤ÀÇÇÑ´Ù. D(0)=D(1)=0 ÀÌ´Ù.
  2. D(i)¿Í D(n-i-1)À» left¿Í right subtreeÀÇ Internal Path Length¶ó°í Çϸé, D(n) = D(i)+D(n-i-1)+(n-1)ÀÌ´Ù.
  3. D(i)¿Í D(n-i-1)ÀÇ Æò±Õ°ªÀÌ´Ù. ±×·¯¹Ç·Î ¾Æ·¡ÀÇ °ø½ÄÀÌ ¼º¸³ÇÑ´Ù.
tree6.png
  1. ÀÌÁ¦ D(n)<4nlognÀ» ½±°Ô Á¤ÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.

±×·¯¹Ç·Î D(n) = O(nlogn), average depth = O(logn) ÀÌ´Ù.

Áõ¸íÀ» º¸´Ù ½±°Ô Á¤¸®ÇØ º¸¾Ò´Ù.
  1. ÀÚ½Ä treeÀÇ Å©±â°¡ BestÀÎ °æ¿ì n/2¿Í n/2·Î ³ª´©¾îÁö°í worstÀÎ °æ¿ì 0°ú n-1·Î ³ª´©¾îÁüÁø´Ù.
  2. ±×·¯¹Ç·Î Æò±ÕÀûÀ¸·Î n/4¿Í 3n/4·Î ³ª´©¾îÁø´Ù°í °¡Á¤ÇÒ ¼ö ÀÖ´Ù.
  3. ÀÌÁß °¡Àå ±íÀº °Í(height°¡ °¡ÁõÅ«)Àº 3n/4ÀÎ ¼­ºêÆ®¸®À̹ǷÎ
  4. H(1) = 0, H(n)=1+H(3n/4) ÀÌ´Ù.
  5. ÇØ¼­ H(n) = 2.4logn = O(long)À» À¯µµÇÒ ¼ö ÀÖ´Ù.

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; 
    } 
} 
 
À§ÀÇ °úÁ¤À» ±×¸²À¸·Î ³ªÅ¸³»º¸¾Ò´Ù.

tree7.png

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)À» À¯ÁöÇÑ´Ù.

  1. N(h)¸¦ ³ôÀ̰¡ hÀÎ AVL¿¡ Á¸ÀçÇÒ ¼ö ÀÖ´Â ÃÖ¼Ò ³ëµåÀÇ °¹¼ö¶ó°í Á¤ÀÇÇϸé
  2. N(0) = 1, N(1) = 2 ÀÌ´Ù.
  3. N(h) = N(h-1)+N(h-2)+1 À̹ǷΠ¾Æ·¡ÀÇ °ø½ÄÀÌ ¼º¸³µÈ´Ù.
    tree8.png
  4. ±×·¯¹Ç·Î h=log_1.618^n=O(logn) ÀÌ µÈ´Ù.

4.2 Rotate

4.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À» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.