ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • TREE(Binary Tree, BST, B-Tree,B+Tree, AVL Tree,Red-Black Tree)
    ์ž๋ฃŒ๊ตฌ์กฐ 2025. 2. 14. 20:52

    ๐Ÿ“Œ 1. Tree๋ž€?

    • **Tree(ํŠธ๋ฆฌ)**๋Š” ๊ณ„์ธต์ (hierarchical) ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง„ ๋น„์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.
    • **๋ถ€๋ชจ-์ž์‹ ๊ด€๊ณ„(Parent-Child)**๋กœ ๋…ธ๋“œ๋“ค์ด ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค.
    • ๋ฃจํŠธ(Root)์—์„œ ์‹œ์ž‘ํ•ด ๋ฆฌํ”„(Leaf) ๋…ธ๋“œ๊นŒ์ง€ ์ด์–ด์ง€๋Š” ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

    ๐Ÿงฉ 2. Tree์˜ ๊ธฐ๋ณธ ์šฉ์–ด (Node ๊ตฌ์„ฑ ์š”์†Œ)

    Node(๋…ธ๋“œ) ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ธฐ๋ณธ ๋‹จ์œ„
    Root(๋ฃจํŠธ ๋…ธ๋“œ) ํŠธ๋ฆฌ์˜ ์‹œ์ž‘์  (๋ถ€๋ชจ๊ฐ€ ์—†์Œ)
    Leaf(๋ฆฌํ”„ ๋…ธ๋“œ) ์ž์‹์ด ์—†๋Š” ๋…ธ๋“œ
    Edge(๊ฐ„์„ ) ๋…ธ๋“œ ๊ฐ„์˜ ์—ฐ๊ฒฐ์„ 
    Depth(๊นŠ์ด) ๋ฃจํŠธ์—์„œ ํŠน์ • ๋…ธ๋“œ๊นŒ์ง€์˜ ๊ฑฐ๋ฆฌ
    Height(๋†’์ด) ํŠน์ • ๋…ธ๋“œ์—์„œ ๊ฐ€์žฅ ๊นŠ์€ ๋ฆฌํ”„๊นŒ์ง€์˜ ๊ฑฐ๋ฆฌ

     

    ๐Ÿ’ก Node์˜ ๊ตฌ์„ฑ ์š”์†Œ

    • ๋ฐ์ดํ„ฐ(Data): ๋…ธ๋“œ์— ์ €์žฅ๋˜๋Š” ๊ฐ’
    • ํฌ์ธํ„ฐ(Pointer): ์ž์‹ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ฐธ์กฐ ์ฃผ์†Œ
    • ์ž๋ฐ”์—์„œ๋Š” ํด๋ž˜์Šค ๊ฐ์ฒด๋กœ ํ‘œํ˜„:
    class TreeNode {
        int value;           // ๋ฐ์ดํ„ฐ
        TreeNode left;       // ์™ผ์ชฝ ์ž์‹ ๋…ธ๋“œ
        TreeNode right;      // ์˜ค๋ฅธ์ชฝ ์ž์‹ ๋…ธ๋“œ

        TreeNode(int value) {
            this.value = value;
            this.left = null;
            this.right = null;
        }
    }

     

    ๐ŸŒณ ํŠธ๋ฆฌ(Tree)์—์„œ ์ด์ง„ ํŠธ๋ฆฌ(Binary Tree), ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ(BST), ๊ทธ๋ฆฌ๊ณ  B-Tree๊ฐ€ ๋‚˜์˜จ ๋ฐฐ๊ฒฝ๊ณผ ๋ฐœ์ „ ๊ณผ์ •


    ๐Ÿ“Œ 1. ํŠธ๋ฆฌ(Tree)์—์„œ ์ด์ง„ ํŠธ๋ฆฌ(Binary Tree)๊ฐ€ ๋‚˜์˜จ ์ด์œ 

    ๋ฐฐ๊ฒฝ:

    • ์ผ๋ฐ˜์ ์ธ ํŠธ๋ฆฌ๋Š” ๋ถ€๋ชจ ๋…ธ๋“œ๊ฐ€ ์—ฌ๋Ÿฌ ์ž์‹ ๋…ธ๋“œ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ๋น„์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.
    • ํ•˜์ง€๋งŒ ์ž์‹ ์ˆ˜๋ฅผ ์ œํ•œํ•˜์ง€ ์•Š์œผ๋ฉด ๋ณต์žก๋„๊ฐ€ ์ฆ๊ฐ€ํ•˜๊ณ , ๊ฒ€์ƒ‰·์‚ฝ์ž…·์‚ญ์ œ ์„ฑ๋Šฅ์ด ์ €ํ•˜๋ฉ๋‹ˆ๋‹ค.

    ์ด์ง„ ํŠธ๋ฆฌ(Binary Tree)๋ž€?

    • ๊ฐ ๋…ธ๋“œ๊ฐ€ ์ตœ๋Œ€ ๋‘ ๊ฐœ์˜ ์ž์‹(์™ผ์ชฝ/์˜ค๋ฅธ์ชฝ)์„ ๊ฐ€์ง€๋Š” ํŠธ๋ฆฌ์ž…๋‹ˆ๋‹ค.
    • ๊ฐ„๋‹จํ•œ ๊ตฌ์กฐ ๋•๋ถ„์— ์žฌ๊ท€์  ํƒ์ƒ‰ ๋ฐ ๊ตฌํ˜„์ด ์šฉ์ดํ•ฉ๋‹ˆ๋‹ค.

    ๐Ÿ“Š ์ด์ง„ ํŠธ๋ฆฌ๊ฐ€ ๋‚˜์˜จ ์ด์œ :

    • ๋ฉ”๋ชจ๋ฆฌ ์ ˆ์•ฝ: ํฌ์ธํ„ฐ๊ฐ€ 2๊ฐœ๋กœ ๊ณ ์ •๋˜์–ด ๊ด€๋ฆฌ๊ฐ€ ์‰ฝ๋‹ค.
    • ๋น ๋ฅธ ํƒ์ƒ‰: O(log n)์˜ ํƒ์ƒ‰ ํšจ์œจ์„ฑ (์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ์ผ ๊ฒฝ์šฐ).
    • ์žฌ๊ท€์  ํ‘œํ˜„: ์ฝ”๋“œ ๊ตฌํ˜„์ด ๊ฐ„๋‹จํ•ด์ง.

    ๐Ÿ“ 2. ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ(BST: Binary Search Tree)๊ฐ€ ๋‚˜์˜จ ์ด์œ 

    ๋ฐฐ๊ฒฝ:

    • ์ผ๋ฐ˜ ์ด์ง„ ํŠธ๋ฆฌ๋Š” ์ž์‹ ๋…ธ๋“œ์˜ ๋ฐฐ์น˜์— **๊ทœ์น™์ด ์—†์–ด ํƒ์ƒ‰ ์‹œ O(n)**์˜ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์Œ.
    • ์ •๋ ฌ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋น ๋ฅด๊ฒŒ ํƒ์ƒ‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ๊ฐ€ ํ•„์š”ํ•ด์ง.

    ๐Ÿ’ก ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ(BST)๋ž€?

    • ์ด์ง„ ํŠธ๋ฆฌ์˜ ๊ทœ์น™ + ํƒ์ƒ‰ ๊ทœ์น™์„ ์ถ”๊ฐ€ํ•œ ํŠธ๋ฆฌ.

    ๐ŸŒณ ์ด์ง„ ํŠธ๋ฆฌ(Binary Tree)์™€ ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ(BST)์˜ ์ฐจ์ด์ ์€ ๊ทœ์น™์— ์žˆ๋‹ค!

    ๐Ÿ“Œ ๊ฒฐ๋ก ๋ถ€ํ„ฐ:

    • ์ด์ง„ ํŠธ๋ฆฌ(Binary Tree): ํ˜•ํƒœ(๊ตฌ์กฐ)๋งŒ ์ •์˜๋จ → **“๋…ธ๋“œ๋‹น ์ตœ๋Œ€ 2๊ฐœ์˜ ์ž์‹”**๋งŒ ๊ทœ์น™.
    • ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ(BST): ๋ฐ์ดํ„ฐ ์ •๋ ฌ ๊ทœ์น™์ด ์ถ”๊ฐ€๋จ → “์™ผ์ชฝ < ๋ถ€๋ชจ < ์˜ค๋ฅธ์ชฝ” + ์žฌ๊ท€์  ๊ทœ์น™.

    ๐Ÿงฉ ํ•ต์‹ฌ ์ฐจ์ด: "๋ชจ๋“  ์„œ๋ธŒํŠธ๋ฆฌ๊ฐ€ BST ๊ทœ์น™์„ ๋”ฐ๋ผ์•ผ ํ•œ๋‹ค"

     

    ๐Ÿ“ 1. ์ด์ง„ ํŠธ๋ฆฌ(Binary Tree)์˜ ๊ทœ์น™

    • ๋…ธ๋“œ๋‹น ์ตœ๋Œ€ ๋‘ ๊ฐœ์˜ ์ž์‹(left, right)๋งŒ ๊ฐ€์ง€๋Š” ํ˜•ํƒœ์  ๊ตฌ์กฐ.
    • ๊ฐ’์˜ ํฌ๊ธฐ์— ๋Œ€ํ•œ ๊ทœ์น™์€ ์—†์Œ.
    • ์™ผ์ชฝ ์ž์‹์ด ๋ถ€๋ชจ๋ณด๋‹ค ํด ์ˆ˜๋„, ์˜ค๋ฅธ์ชฝ ์ž์‹์ด ๋ถ€๋ชจ๋ณด๋‹ค ์ž‘์„ ์ˆ˜๋„ ์žˆ์Œ.
    • ์ •๋ ฌ์ด๋‚˜ ํƒ์ƒ‰ ํšจ์œจ์ด ๋ณด์žฅ๋˜์ง€ ์•Š์Œ.

    ์˜ˆ์ œ: ์ด์ง„ ํŠธ๋ฆฌ (BST ์•„๋‹˜)

           10
          /  \
        20    5   ← ๊ทœ์น™ ๊นจ์ง (์™ผ์ชฝ ์ž์‹์ด ๋ถ€๋ชจ๋ณด๋‹ค ํผ)

     

    ๐Ÿ“ 2. ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ(BST)์˜ ๊ทœ์น™

    • ์ด์ง„ ํŠธ๋ฆฌ์˜ ๋ชจ๋“  ์ž์†(์„œ๋ธŒํŠธ๋ฆฌ)๊นŒ์ง€ ํƒ์ƒ‰ ๊ทœ์น™์„ ๊ฐ•์ œํ•จ.
    • ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ ๋ฐ˜๋“œ์‹œ:
      • ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์˜ ๊ฐ’์€ ๋ถ€๋ชจ๋ณด๋‹ค ์ž‘์Œ
      • ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์˜ ๊ฐ’์€ ๋ถ€๋ชจ๋ณด๋‹ค ํผ
    • ์ด ๊ทœ์น™์ด ์„œ๋ธŒํŠธ๋ฆฌ๊นŒ์ง€ ์žฌ๊ท€์ ์œผ๋กœ ์ ์šฉ๋˜์–ด์•ผ ํ•จ.

    ์˜ˆ์ œ: ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ(BST)

           10
          /  \
         5    20
        / \   / \
       3   7 15 25  ← ๋ชจ๋“  ์„œ๋ธŒํŠธ๋ฆฌ๊ฐ€ ๊ทœ์น™์„ ์ง€ํ‚ด

     

     

    ๐Ÿ“Š 3. ์ด์ง„ ํŠธ๋ฆฌ์™€ ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ์˜ ์ฐจ์ด์  ์ •๋ฆฌ

    ๊ตฌ๋ถ„ ์ด์ง„ ํŠธ๋ฆฌ (Binary Tree) ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ (BST)
    ๊ตฌ์กฐ ๊ทœ์น™ ๋…ธ๋“œ๋‹น ์ตœ๋Œ€ 2๊ฐœ์˜ ์ž์‹ ๋…ธ๋“œ๋‹น ์ตœ๋Œ€ 2๊ฐœ์˜ ์ž์‹
    ๊ฐ’ ๋ฐฐ์น˜ ๊ทœ์น™ ์—†์Œ ๋ชจ๋“  ์„œ๋ธŒํŠธ๋ฆฌ๊นŒ์ง€ ์™ผ์ชฝ < ๋ถ€๋ชจ < ์˜ค๋ฅธ์ชฝ
    ์„œ๋ธŒํŠธ๋ฆฌ ๊ทœ์น™ ์ ์šฉ โŒ ์ผ๋ถ€๋งŒ ์ง€์ผœ๋„ ๋จ โœ… ๋ชจ๋“  ๋…ธ๋“œ์™€ ์„œ๋ธŒํŠธ๋ฆฌ๊ฐ€ ๋™์ผ ๊ทœ์น™์„ ์ ์šฉ
    ํƒ์ƒ‰ ์†๋„ O(n) (๋ฌด์งˆ์„œํ•  ์ˆ˜ ์žˆ์Œ) O(log n) (์ •๋ ฌ๋œ ์ƒํƒœ ์œ ์ง€)
    ์‚ฝ์ž… ๋ฐ ์‚ญ์ œ ์†๋„ O(n) (๊ทœ์น™์ด ์—†์–ด ์žฌ๋ฐฐ์—ด ํ•„์š”) O(log n) (์ •๋ ฌ ์œ ์ง€ ๋•๋ถ„์— ๋น ๋ฆ„)

     

    ๐Ÿ“Œ 1. B-ํŠธ๋ฆฌ๊ฐ€ ๋‚˜์˜จ ๋ฐฐ๊ฒฝ: BST์˜ ํ•œ๊ณ„์ 

    โš ๏ธ BST์˜ ๋ฌธ์ œ์  (ํŠนํžˆ ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ์—์„œ๋Š”):

    1. ํŠธ๋ฆฌ์˜ ๊นŠ์ด๊ฐ€ ๊นŠ์–ด์งˆ ์ˆ˜ ์žˆ์Œ:
      • ํŠนํžˆ, ํŽธํ–ฅ๋œ(skewed) BST๋Š” ์„ฑ๋Šฅ์ด O(n)์œผ๋กœ ๋‚˜๋น ์ง.
    2. ๋””์Šคํฌ I/O ๋น„์šฉ:
      • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(DB)๋‚˜ ํŒŒ์ผ ์‹œ์Šคํ…œ์—์„œ๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ณด๋‹ค ๋””์Šคํฌ I/O ๋น„์šฉ์ด ํ›จ์”ฌ ํผ.
      • BST๋Š” ์ž์‹์ด 2๊ฐœ๋ผ ํŠธ๋ฆฌ๊ฐ€ ๊นŠ์–ด์ง€๋ฉด, ๋””์Šคํฌ ์ ‘๊ทผ ํšŸ์ˆ˜๊ฐ€ ๋งŽ์•„์ง.

    ๐Ÿ’ก ํ•ด๊ฒฐ์ฑ…:

    • ํ•œ ๋ฒˆ์— ๋” ๋งŽ์€ ํ‚ค๋ฅผ ๋‹ด๋Š” ๋…ธ๋“œ๋ฅผ ๋งŒ๋“ค๊ณ ,
    • ์ž์‹ ์ˆ˜๋„ ๋Š˜๋ ค ํŠธ๋ฆฌ ๋†’์ด๋ฅผ ๋‚ฎ์ถ”์–ด ๋””์Šคํฌ ์ ‘๊ทผ์„ ์ตœ์†Œํ™”ํ•˜์ž!

    ๐Ÿ“ 2. B-ํŠธ๋ฆฌ(B-Tree)๋ž€?

    ๐Ÿ’ก B-ํŠธ๋ฆฌ๋Š” M-Way(๋‹ค๋ถ„๊ธฐ) ๊ท ํ˜• ํŠธ๋ฆฌ:

    • ์ž์‹ ๋…ธ๋“œ ์ˆ˜(M): ๊ฐ ๋…ธ๋“œ๋Š” ์ตœ๋Œ€ M๊ฐœ์˜ ์ž์‹์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Œ.
    • ํ‚ค(Key) ์ˆ˜: ๊ฐ ๋…ธ๋“œ๋Š” ์ตœ๋Œ€ M-1๊ฐœ์˜ ํ‚ค๋ฅผ ๊ฐ€์ง.
    • ๋ชจ๋“  ๋ฆฌํ”„๋Š” ๊ฐ™์€ ๊นŠ์ด(๊ท ํ˜• ์œ ์ง€).
    • ๋””์Šคํฌ I/O๋ฅผ ์ตœ์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์„ค๊ณ„๋จ.
    • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฐ ํŒŒ์ผ ์‹œ์Šคํ…œ์˜ ํ‘œ์ค€ ์ธ๋ฑ์Šค ๊ตฌ์กฐ.

    โš™๏ธ B-ํŠธ๋ฆฌ์˜ ๊ทœ์น™:

    1. ๋ชจ๋“  ํ‚ค๋Š” ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ.
    2. ๊ฐ ๋…ธ๋“œ๋Š” (M-1)๊ฐœ์˜ ํ‚ค์™€ M๊ฐœ์˜ ์ž์‹ ํฌ์ธํ„ฐ๋ฅผ ๊ฐ€์ง.
    3. ๋ชจ๋“  ๋ฆฌํ”„ ๋…ธ๋“œ๋Š” ๊ฐ™์€ ๊นŠ์ด.
    4. ์ž์‹ ๋…ธ๋“œ๋Š” ๋ถ€๋ชจ ํ‚ค์˜ ๊ตฌ๊ฐ„์— ์†ํ•˜๋Š” ๊ฐ’๋งŒ ํฌํ•จ.
    5. ํ‚ค ๊ฐœ์ˆ˜๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์•„์ง€๋ฉด ๋ถ„ํ• (Split), ๋„ˆ๋ฌด ์ ์–ด์ง€๋ฉด ๋ณ‘ํ•ฉ(Merge)

    ๐Ÿ“Š 3. ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ(BST)์™€ B-ํŠธ๋ฆฌ์˜ ์ฃผ์š” ์ฐจ์ด์ 

    ๊ตฌ๋ถ„ ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ (BST) B-ํŠธ๋ฆฌ (B-Tree)
    ์ž์‹ ์ˆ˜ ์ตœ๋Œ€ 2๊ฐœ (left, right) ์ตœ๋Œ€ M๊ฐœ (M-Way Tree)
    ๋…ธ๋“œ๋‹น ํ‚ค ์ˆ˜ 1๊ฐœ (์ด์ง„) ์ตœ๋Œ€ M-1๊ฐœ
    ํŠธ๋ฆฌ ๋†’์ด ํŽธํ–ฅ๋˜๋ฉด ๋†’์ด๊ฐ€ ์ปค์ง (O(n)) ์ž์‹ ์ˆ˜๊ฐ€ ๋งŽ์•„ ๋†’์ด๊ฐ€ ๋‚ฎ์Œ (O(log n))
    ๋””์Šคํฌ I/O ๊นŠ์ด๊ฐ€ ๊นŠ์–ด ๋””์Šคํฌ ์ ‘๊ทผ์ด ์žฆ์Œ ํ•œ ๋ฒˆ์— ๋งŽ์€ ํ‚ค๋ฅผ ์ฝ์–ด I/O ์ตœ์†Œํ™”
    ๊ท ํ˜• ์œ ์ง€ ํŽธํ–ฅ๋˜๋ฉด ์„ฑ๋Šฅ ์ €ํ•˜ (๊ท ํ˜• ํŠธ๋ฆฌ ํ•„์š”) ์ž๋™์œผ๋กœ ๊ท ํ˜• ์œ ์ง€ (๋ชจ๋“  ๋ฆฌํ”„ ๋™์ผ ๊นŠ์ด)
    ์šฉ๋„ ๋ฉ”๋ชจ๋ฆฌ ๋‚ด ํƒ์ƒ‰์šฉ (์˜ˆ: TreeMap) ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ธ๋ฑ์Šค, ํŒŒ์ผ์‹œ์Šคํ…œ

     

     

    ๐Ÿ“ˆ 4. B-ํŠธ๋ฆฌ์™€ BST์˜ ์‹œ๊ฐ์  ๋น„๊ต (๊ทธ๋ฆผ ํฌํ•จ)

    ๐Ÿ“ (1) ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ (BST) ์˜ˆ์ œ:

    BST๋Š” ์ž์‹์ด 2๊ฐœ๋ฟ์ด๋ผ, ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์•„์ง€๋ฉด ํŠธ๋ฆฌ๊ฐ€ ๋งค์šฐ ๊นŠ์–ด์งˆ ์ˆ˜ ์žˆ์Œ.

           30
          /  \
        20    50
       /     /  \
      10    40   60

     

     

    ๐Ÿ“ (2) B-ํŠธ๋ฆฌ ์˜ˆ์ œ (M=4):

    B-ํŠธ๋ฆฌ๋Š” ํ•˜๋‚˜์˜ ๋…ธ๋“œ์— ์—ฌ๋Ÿฌ ํ‚ค๋ฅผ ๋‹ด์•„ ํŠธ๋ฆฌ์˜ ๋†’์ด๋ฅผ ํฌ๊ฒŒ ์ค„์ž„.

             [30 | 50] 
            /     |     \
      [10 | 20] [40]   [60 | 70 | 80]
    • ํ•œ ๋ฒˆ์˜ ๋””์Šคํฌ ์ ‘๊ทผ์œผ๋กœ ์—ฌ๋Ÿฌ ํ‚ค๋ฅผ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ์Œ.
    • ํŠธ๋ฆฌ ๋†’์ด๊ฐ€ ๋‚ฎ์•„์ ธ ํƒ์ƒ‰ ์†๋„๊ฐ€ ๋นจ๋ผ์ง.

    ๐Ÿš€ 5. B-ํŠธ๋ฆฌ๊ฐ€ BST๋ณด๋‹ค ๋” ๋‚˜์€ ์ด์œ  (ํŠนํžˆ DB์—์„œ):

    • ๐Ÿ“‰ ํŠธ๋ฆฌ์˜ ๋†’์ด๊ฐ€ ๋‚ฎ์•„์ง:
      • ๋†’์ด๊ฐ€ O(log n)๋กœ ๋งค์šฐ ๋‚ฎ์Œ, ๋ฐ์ดํ„ฐ๊ฐ€ ์ˆ˜๋ฐฑ๋งŒ ๊ฑด์ด์–ด๋„ ํšจ์œจ์ .
    • ๐Ÿ’พ ๋””์Šคํฌ I/O ๊ฐ์†Œ:
      • ๋…ธ๋“œ 1๊ฐœ = ๋””์Šคํฌ ๋ธ”๋ก 1๊ฐœ
      • ํ•œ ๋ฒˆ์— ์—ฌ๋Ÿฌ ํ‚ค๋ฅผ ์ฝ์–ด I/O ๋น„์šฉ ์ตœ์†Œํ™”
    • ๐Ÿ”„ ์ž๋™ ๊ท ํ˜• ์œ ์ง€:
      • ์‚ฝ์ž…/์‚ญ์ œ ์‹œ ๋…ธ๋“œ ์ž๋™ ๋ถ„ํ•  ๋ฐ ๋ณ‘ํ•ฉ์œผ๋กœ ํ•ญ์ƒ ๊ท ํ˜•(Balanced) ์œ ์ง€.
    • ๐Ÿ“‚ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ธ๋ฑ์Šค ์ตœ์ ํ™”:
      • MySQL(InnoDB), PostgreSQL, Oracle์€ ๋ชจ๋‘ B+Tree ๊ธฐ๋ฐ˜ ์ธ๋ฑ์Šค ์‚ฌ์šฉ.

    ๐Ÿ’ก 6. ์š”์•ฝ: B-ํŠธ๋ฆฌ๊ฐ€ BST๋ฅผ ๊ฐœ์„ ํ•œ ์ด์œ 

    ๐Ÿšฉ BST์˜ ๋‹จ์  ๐Ÿš€ B-ํŠธ๋ฆฌ์—์„œ ํ•ด๊ฒฐํ•œ ์ 
    ํŽธํ–ฅ๋˜๋ฉด ๋†’์ด๊ฐ€ ๊นŠ์–ด์ ธ ๋А๋ฆผ ๋‹ค์ค‘ ์ž์‹(M-Way)์œผ๋กœ ํŠธ๋ฆฌ ๋†’์ด๋ฅผ ๋‚ฎ์ถค (O(log n))
    ์ž์‹ ์ˆ˜๊ฐ€ 2๊ฐœ๋ผ ๋””์Šคํฌ I/O ์ฆ๊ฐ€ ํ•œ ๋ฒˆ์— ์—ฌ๋Ÿฌ ํ‚ค์™€ ์ž์‹์„ ์ €์žฅํ•ด I/O ์ตœ์†Œํ™”
    ๊ท ํ˜•์„ ์œ ์ง€ํ•˜๋ ค๋ฉด AVL/Red-Black ํ•„์š” ์‚ฝ์ž…/์‚ญ์ œ ์‹œ ์ž๋™์œผ๋กœ ๊ท ํ˜• ์œ ์ง€
    ๋ฉ”๋ชจ๋ฆฌ ๋‚ด ํƒ์ƒ‰์— ์ ํ•ฉ ๋””์Šคํฌ ๊ธฐ๋ฐ˜ ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์— ์ตœ์ ํ™”

     

    • BST๋Š” ๋ฉ”๋ชจ๋ฆฌ ๋‚ด ํƒ์ƒ‰์šฉ์œผ๋กœ ์ข‹์ง€๋งŒ, **๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ(DB)**์—๋Š” ๋น„ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค.
    • B-ํŠธ๋ฆฌ๋Š” ํŠธ๋ฆฌ ๋†’์ด๋ฅผ ๋‚ฎ์ถ”๊ณ , I/O ๋น„์šฉ์„ ์ค„์—ฌ ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ตœ์ ํ™”๋œ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

    ๐ŸŒณ B-Tree ๋…ธ๋“œ vs B+Tree ๋…ธ๋“œ ์ฐจ์ด์  ๋ฐ ๊ฐœ์„ ์ 


    ๐Ÿ“Œ 1. B-Tree์™€ B+Tree ๋…ธ๋“œ ๊ตฌ์กฐ ์ฐจ์ด

    ๐Ÿ“Š (1) B-Tree ๋…ธ๋“œ ๊ตฌ์กฐ

    • ํ•œ ๋…ธ๋“œ์— ํ‚ค(key)์™€ ๋ฐ์ดํ„ฐ(data) ๋ชจ๋‘ ์ €์žฅ.
    • ๋ฆฌํ”„ ๋…ธ๋“œ์™€ ๋‚ด๋ถ€ ๋…ธ๋“œ ๋ชจ๋‘ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง.
    • ํƒ์ƒ‰ ์‹œ ๋ฆฌํ”„์— ๋„๋‹ฌํ•˜์ง€ ์•Š์•„๋„ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์Œ.

    ---------------------------------------------------------------------------------------------------

     

    • ๋ชจ๋“  ๋…ธ๋“œ์— ํ‚ค์™€ ๋ฐ์ดํ„ฐ๊ฐ€ ํ•จ๊ป˜ ์ €์žฅ๋จ.
    • ๋ฒ”์œ„ ํƒ์ƒ‰ ์‹œ ๋ฆฌํ”„ ๋…ธ๋“œ๋ฟ ์•„๋‹ˆ๋ผ ์—ฌ๋Ÿฌ ๋…ธ๋“œ๋ฅผ ํƒ์ƒ‰ํ•ด์•ผ ํ•จ.

     

               [30]  
             /   \  
       [10, 20]  [40, 50, 60]  

     

     

    • ํƒ์ƒ‰ ์˜ˆ์‹œ (ํ‚ค: 50):
      1. ๋ฃจํŠธ(30) ๋น„๊ต → ์˜ค๋ฅธ์ชฝ ์ž์‹ ์ด๋™
      2. ์ž์‹ ๋…ธ๋“œ์—์„œ [40, 50, 60] ์ค‘ 50 ํƒ์ƒ‰
    • ๋ฒ”์œ„ ๊ฒ€์ƒ‰: ๋ฃจํŠธ๋ถ€ํ„ฐ ํƒ์ƒ‰ํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์†๋„๊ฐ€ ๋А๋ฆผ.

     

     

    ๐Ÿ“Š (2) B+Tree ๋…ธ๋“œ ๊ตฌ์กฐ (B-Tree ๊ฐœ์„ ํŒ)

    • ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋Š” ๋ฆฌํ”„ ๋…ธ๋“œ์—๋งŒ ์ €์žฅ.
    • ๋‚ด๋ถ€ ๋…ธ๋“œ(์ธ๋ฑ์Šค ๋…ธ๋“œ)์—๋Š” ํ‚ค(key)๋งŒ ์ €์žฅ.
    • ๋ฆฌํ”„ ๋…ธ๋“œ๋Š” ์–‘์˜†์œผ๋กœ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ(Linked List)๋˜์–ด ์žˆ์Œ.
    • ๋ฒ”์œ„ ๊ฒ€์ƒ‰ ๋ฐ ์ˆœ์ฐจ ํƒ์ƒ‰(RANGE QUERY)์ด ๋น ๋ฆ„.
             [30 | 50]  
            /         \  
       [10, 20]     [40, 50, 60]  
           ↔            ↔

     

     

    • ํƒ์ƒ‰ ์˜ˆ์‹œ (ํ‚ค: 50):
      1. ๋ฃจํŠธ(30, 50) ๋น„๊ต → ์˜ค๋ฅธ์ชฝ ์ž์‹ ์ด๋™
      2. ๋ฆฌํ”„ ๋…ธ๋“œ [40, 50, 60]์—์„œ ๋ฐ”๋กœ ๋ฐ์ดํ„ฐ ํƒ์ƒ‰
    • ๋ฒ”์œ„ ๊ฒ€์ƒ‰: ๋ฆฌํ”„ ๋…ธ๋“œ๋ฅผ Linked List๋กœ ๋”ฐ๋ผ๊ฐ€์„œ ๋น ๋ฅด๊ฒŒ ๊ฒ€์ƒ‰.

     

     

    ๐Ÿ’ก 2. B+Tree์˜ ์ฃผ์š” ๊ฐœ์„ ์  ๋ฐ ์žฅ์ 

    ๐Ÿ“Œ (1) ๋””์Šคํฌ I/O ๊ฐ์†Œ (๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ ์ตœ์ ํ™”)

    • ๋‚ด๋ถ€ ๋…ธ๋“œ์— ๋ฐ์ดํ„ฐ ์—†์Œ → ํ•œ ๋…ธ๋“œ์— ๋” ๋งŽ์€ ํ‚ค(key) ์ €์žฅ
      ํŠธ๋ฆฌ ๋†’์ด ๊ฐ์†Œ → ๋””์Šคํฌ I/O ์ตœ์†Œํ™”.
    • ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ(์ˆ˜๋ฐฑ GB ~ ์ˆ˜ TB)์—์„œ ํšจ์œจ์ .

    ๐Ÿ“Œ (2) ๋น ๋ฅธ ๋ฒ”์œ„ ๊ฒ€์ƒ‰ (Range Query)

    • ๋ฆฌํ”„ ๋…ธ๋“œ๊ฐ€ Linked List๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์Œ.
      WHERE BETWEEN ์ฟผ๋ฆฌ ๋“ฑ ์ˆœ์ฐจ ํƒ์ƒ‰์ด ๋งค์šฐ ๋น ๋ฆ„.
    • B-Tree๋Š” ๋ฒ”์œ„ ํƒ์ƒ‰ ์‹œ ๋ฆฌํ”„ ๋…ธ๋“œ๋ฅผ ๋ชจ๋‘ ํƒ์ƒ‰ํ•ด์•ผ ํ•จ.

    ๐Ÿ“Œ (3) ์ผ๊ด€๋œ ํŠธ๋ฆฌ ๊ตฌ์กฐ (Insert/Delete ์‹œ ๊ตฌ์กฐ ์•ˆ์ •์„ฑ)

    • ๋ฐ์ดํ„ฐ๋Š” ํ•ญ์ƒ ๋ฆฌํ”„ ๋…ธ๋“œ์—๋งŒ ์ €์žฅ
      ์‚ฝ์ž…/์‚ญ์ œ ์‹œ ๋‚ด๋ถ€ ๋…ธ๋“œ ๊ตฌ์กฐ ์˜ํ–ฅ ์ ์Œ
      B-Tree๋ณด๋‹ค ๊ตฌ์กฐ ์žฌ์กฐ์ •์ด ๋น ๋ฅด๊ณ  ๊ฐ„๋‹จํ•จ.

    ๐Ÿ“Œ (4) ํšจ์œจ์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ์บ์‹ฑ (DBMS ์„ฑ๋Šฅ ํ–ฅ์ƒ)

    • ๋‚ด๋ถ€ ๋…ธ๋“œ์— ๋ฐ์ดํ„ฐ๊ฐ€ ์—†๊ณ  ํ‚ค๋งŒ ์žˆ์Œ → ๋” ์ž‘์€ ๋…ธ๋“œ ํฌ๊ธฐ → ๋ฉ”๋ชจ๋ฆฌ ์บ์‹ฑ ํšจ์œจ์ .
    • ํŠธ๋ฆฌ ๊นŠ์ด ์–•์•„์ง → ํƒ์ƒ‰ ์‹œ ์บ์‹ฑ ํšจ์œจ์„ฑ ์ฆ๊ฐ€.

    ๐Ÿ› ๏ธ 3. ์™œ B+Tree๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉ๋ ๊นŒ?

     

    ๐Ÿšฉ B-Tree ๋‹จ์  ๐Ÿš€ B+Tree์˜ ํ•ด๊ฒฐ ๋ฐฉ์‹
    ๋””์Šคํฌ I/O ๋งŽ์Œ ๋‚ด๋ถ€ ๋…ธ๋“œ์— ๋ฐ์ดํ„ฐ ์ œ๊ฑฐ → ํ•œ ๋…ธ๋“œ์— ๋งŽ์€ ํ‚ค ์ €์žฅ → ํŠธ๋ฆฌ ๋†’์ด ๊ฐ์†Œ
    ๋ฒ”์œ„ ํƒ์ƒ‰ ๋А๋ฆผ ๋ฆฌํ”„ ๋…ธ๋“œ๋ฅผ Linked List๋กœ ์—ฐ๊ฒฐ → ๋น ๋ฅธ ์ˆœ์ฐจ ํƒ์ƒ‰
    ์‚ฝ์ž…/์‚ญ์ œ ์‹œ ์žฌ์กฐ์ • ๋ณต์žก ๋ฐ์ดํ„ฐ๋Š” ๋ฆฌํ”„์—๋งŒ ์ €์žฅ → ๋‚ด๋ถ€ ๋…ธ๋“œ ์˜ํ–ฅ ์ตœ์†Œํ™”
    ๋ฉ”๋ชจ๋ฆฌ ์บ์‹ฑ ํšจ์œจ ๋‚ฎ์Œ ๋‚ด๋ถ€ ๋…ธ๋“œ๋Š” ํ‚ค๋งŒ ์ €์žฅ → ์ž‘์€ ํฌ๊ธฐ → ์บ์‹ฑ ํšจ์œจ ํ–ฅ์ƒ

     

    ๐ŸŒณ AVL Tree ๊ฐœ๋…๊ณผ ๋™์ž‘ ์›๋ฆฌ: BST์˜ ํŽธํ–ฅ ๋ฌธ์ œ ํ•ด๊ฒฐ


    ๐Ÿ“Œ 1. AVL Tree๋ž€?

    **AVL Tree(Adelson-Velsky and Landis Tree)**๋Š” **์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ(BST)**์—์„œ ๋ฐœ์ƒํ•˜๋Š” ํŽธํ–ฅ(Skew) ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด **์ž๊ธฐ ๊ท ํ˜•(Self-Balancing)**์„ ์œ ์ง€ํ•˜๋Š” ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ์ž…๋‹ˆ๋‹ค.

     

    ๐Ÿงฉ 2. ์™œ AVL Tree๊ฐ€ ํ•„์š”ํ•œ๊ฐ€? (BST์˜ ํŽธํ–ฅ ๋ฌธ์ œ)

    ๐Ÿšฉ BST์˜ ๋ฌธ์ œ: ํŽธํ–ฅ(Skewed) ํŠธ๋ฆฌ

     

    ์ผ๋ฐ˜์ ์ธ **์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ(BST)**๋Š” ์‚ฝ์ž… ์ˆœ์„œ์— ๋”ฐ๋ผ ํ•œ์ชฝ์œผ๋กœ ์ ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ **ํŽธํ–ฅ ํŠธ๋ฆฌ(Skewed Tree)**๋ผ๊ณ  ํ•˜๋ฉฐ, ์ด ๊ฒฝ์šฐ **ํƒ์ƒ‰ ์†๋„๊ฐ€ O(N)**๊นŒ์ง€ ๋А๋ ค์ง‘๋‹ˆ๋‹ค.

     

    ๐Ÿ“Š ์˜ˆ์ œ: BST์˜ ํŽธํ–ฅ ๋ฌธ์ œ

    ์ž…๋ ฅ ์ˆœ์„œ: 10 → 20 → 30 → 40 → 50

    BST (ํŽธํ–ฅ ํŠธ๋ฆฌ):
        10
          \
           20
             \
              30
                \
                 40
                   \
                    50

     

    ํƒ์ƒ‰ ๋ณต์žก๋„: O(N) (์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์™€ ๋™์ผํ•œ ์„ฑ๋Šฅ ์ €ํ•˜)

     

    ๐Ÿ’ก 3. AVL Tree๋Š” ์–ด๋–ป๊ฒŒ ํŽธํ–ฅ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ• ๊นŒ?

     

    ๐Ÿ“Œ (1) ๊ท ํ˜• ์กฐ๊ฑด (Balance Factor)

    • ๊ฐ ๋…ธ๋“œ์˜ Balance Factor(BF):
       
      BF = (์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ ๋†’์ด) - (์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ ๋†’์ด)
       
    • AVL Tree์˜ ์กฐ๊ฑด: ๋ชจ๋“  ๋…ธ๋“œ์˜ BF๋Š” -1, 0, +1๋งŒ ๊ฐ€๋Šฅํ•ด์•ผ ํ•จ.
      ⇒ ๋งŒ์•ฝ ์ด ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๋ฉด **"ํšŒ์ „(Rotation)"**์„ ํ†ตํ•ด ๊ท ํ˜•์„ ๋งž์ถค.

    ๐Ÿ“Š [์˜ˆ์ œ] LL (Left-Left) ํšŒ์ „ ์˜ˆ์ œ

    ์‚ฝ์ž… ์ˆœ์„œ: 10 → 20 → 30

    1๏ธโƒฃ BST (ํŽธํ–ฅ ๋ฐœ์ƒ):


        10
          \
           20
             \
              30
    (Balance Factor๊ฐ€ +2 → LL Case)

    2๏ธโƒฃ LL ํšŒ์ „ (Single Right Rotation):

          20
         /  \
       10   30

    โœ… ๊ท ํ˜• ํšŒ๋ณต (๋ชจ๋“  ๋…ธ๋“œ BF: -1, 0, +1)
    โœ… ํƒ์ƒ‰ ๋ณต์žก๋„: O(log N) ์œ ์ง€

     

    ๐Ÿ“Š [์˜ˆ์ œ] RR (Right-Right) ํšŒ์ „ ์˜ˆ์ œ

    ์‚ฝ์ž… ์ˆœ์„œ: 30 → 20 → 10

     

    1๏ธโƒฃ BST (ํŽธํ–ฅ ๋ฐœ์ƒ):

           30
          /
        20
       /
      10
    (Balance Factor๊ฐ€ -2 → RR Case)

    2๏ธโƒฃ RR ํšŒ์ „ (Single Left Rotation):

          20
         /  \
       10   30

    โœ… ๊ท ํ˜• ํšŒ๋ณต (๋ชจ๋“  ๋…ธ๋“œ BF: -1, 0, +1)
    โœ… ํƒ์ƒ‰ ๋ณต์žก๋„: O(log N) ์œ ์ง€

     

    ๐Ÿ’ก 4. AVL Tree์˜ ์žฅ์ ๊ณผ ํŠน์ง•

    ๐Ÿš€ ํŠน์ง• ๐Ÿ“ ์„ค๋ช…
    ๊ท ํ˜• ์œ ์ง€ (Self-Balancing) ๋ชจ๋“  ๋…ธ๋“œ์˜ ๋†’์ด ์ฐจ์ด(BF)๊ฐ€ -1, 0, +1๋กœ ์œ ์ง€
    ๋น ๋ฅธ ํƒ์ƒ‰ (O(log N)) ๊ท ํ˜• ์œ ์ง€ ๋•๋ถ„์— ํƒ์ƒ‰, ์‚ฝ์ž…, ์‚ญ์ œ ๋ชจ๋‘ O(log N)
    ํšŒ์ „(Rotation)์œผ๋กœ ๋ณต๊ตฌ ๊ท ํ˜•์ด ๊นจ์ง€๋ฉด ํšŒ์ „์„ ํ†ตํ•ด ์ฆ‰์‹œ ๋ณต๊ตฌ
    BST ๋Œ€๋น„ ์„ฑ๋Šฅ ์•ˆ์ •์„ฑ ํ™•๋ณด BST์˜ ์ตœ์•… O(N) ์ƒํ™ฉ์„ ๋ฐฉ์ง€

     

    • BST์˜ ํŽธํ–ฅ ๋ฌธ์ œ(Skew Problem)๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋‚˜์˜จ ์ž๊ธฐ ๊ท ํ˜• ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ
    • **Balance Factor (BF)**์™€ **ํšŒ์ „(Rotation)**์„ ํ†ตํ•ด ํ•ญ์ƒ O(log N) ์œ ์ง€
    • ์ฝ๊ธฐ(read)๊ฐ€ ๋งŽ์€ ์‹œ์Šคํ…œ์— ์ ํ•ฉ (e.g. ๋ฉ”๋ชจ๋ฆฌ ์บ์‹ฑ, ์ธ๋ฉ”๋ชจ๋ฆฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋“ฑ)
    • Red-Black Tree๋Š” ์“ฐ๊ธฐ(write)๊ฐ€ ๋งŽ์„ ๋•Œ ๋” ์œ ๋ฆฌํ•จ

    ๐ŸŸฅโšซ Red-Black Tree: ๋“ฑ์žฅ ๋ฐฐ๊ฒฝ, AVL Tree์™€์˜ ์ฐจ์ด์  ๋ฐ ๊ฐœ์„ ์ 


    ๐Ÿ“Œ 1. Red-Black Tree๋ž€?

     

    Red-Black Tree๋Š” ์ž๊ธฐ ๊ท ํ˜• ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ(Self-Balancing Binary Search Tree) ์ค‘ ํ•˜๋‚˜๋กœ, AVL Tree์˜ ๋‹จ์ (๋†’์€ ํšŒ์ „ ๋น„์šฉ)์„ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์กŒ์Šต๋‹ˆ๋‹ค.

     

    ๐Ÿ’ก ๋“ฑ์žฅ ๋ฐฐ๊ฒฝ:

    • AVL Tree๋Š” ์‚ฝ์ž…/์‚ญ์ œ ์‹œ ๊ท ํ˜•์„ ์œ ์ง€ํ•˜๋ ค๊ณ  **ํšŒ์ „(Rotation)**์„ ์ž์ฃผ ์ˆ˜ํ–‰ํ•˜์—ฌ ์‚ฝ์ž…/์‚ญ์ œ ์„ฑ๋Šฅ์ด ๋‚ฎ์•„์ง.
    • Red-Black Tree๋Š” ํšŒ์ „ ๋น„์šฉ์„ ์ค„์ด๊ณ  ์‚ฝ์ž…/์‚ญ์ œ ์‹œ ๊ท ํ˜•์„ ๋” ํšจ์œจ์ ์œผ๋กœ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด 1978๋…„ Bayer์™€ Guibas๊ฐ€ ๊ณ ์•ˆ.
    • ํ˜„์žฌ ์ž๋ฐ”์˜ TreeMap, TreeSet, C++์˜ std::map, std::set, Linux ์ปค๋„ ํŒŒ์ผ ์‹œ์Šคํ…œ ๋“ฑ์— ์‚ฌ์šฉ๋จ.

    ๐Ÿงฉ 2. Red-Black Tree์˜ ๊ทœ์น™ (์ƒ‰๊น” ๊ทœ์น™์œผ๋กœ ๊ท ํ˜• ์œ ์ง€)

    Red-Black Tree๋Š” ๊ฐ ๋…ธ๋“œ์— Red(๋นจ๊ฐ„์ƒ‰) ๋˜๋Š” Black(๊ฒ€์€์ƒ‰) ์†์„ฑ์„ ๋ถ€์—ฌํ•ด ๊ท ํ˜•์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

     

    โœ… Red-Black Tree ๊ทœ์น™(5๊ฐ€์ง€)

    1. ๊ฐ ๋…ธ๋“œ๋Š” ๋นจ๊ฐ„์ƒ‰(Red) ๋˜๋Š” ๊ฒ€์€์ƒ‰(Black) ์ค‘ ํ•˜๋‚˜์ด๋‹ค.
    2. ๋ฃจํŠธ ๋…ธ๋“œ๋Š” ํ•ญ์ƒ ๊ฒ€์€์ƒ‰์ด๋‹ค.
    3. ๋ชจ๋“  ๋ฆฌํ”„ ๋…ธ๋“œ(NIL)๋Š” ๊ฒ€์€์ƒ‰์ด๋‹ค.
    4. ๋นจ๊ฐ„์ƒ‰ ๋…ธ๋“œ๋Š” ๋นจ๊ฐ„์ƒ‰ ์ž์‹์„ ๊ฐ€์งˆ ์ˆ˜ ์—†๋‹ค. (Red๋Š” Red์™€ ์—ฐ์†๋  ์ˆ˜ ์—†์Œ, Red ์œ„์—๋Š” ๋ฐ˜๋“œ์‹œ Black)
    5. ๋ชจ๋“  ๊ฒฝ๋กœ์—์„œ ๋ฆฌํ”„(NIL) ๋…ธ๋“œ๊นŒ์ง€์˜ ๊ฒ€์€์ƒ‰ ๋…ธ๋“œ ์ˆ˜๋Š” ๊ฐ™์•„์•ผ ํ•œ๋‹ค. (Black-height ๋™์ผ)

    ๐Ÿ“Š Black-height๋ž€?

    • ๋ฃจํŠธ์—์„œ ๋ฆฌํ”„๊นŒ์ง€ ๊ฐ€๋Š” ๊ฒฝ๋กœ์—์„œ ๋งŒ๋‚˜๋Š” ๊ฒ€์€์ƒ‰ ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜.
    • Red-Black Tree๋Š” Black-height๊ฐ€ ๋ชจ๋“  ๊ฒฝ๋กœ์—์„œ ๊ฐ™๊ฒŒ ์œ ์ง€๋จ์œผ๋กœ์จ ๊ท ํ˜•์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

    ๐Ÿ’ก 3. AVL Tree์™€ Red-Black Tree์˜ ์ฐจ์ด์ ๊ณผ ๊ฐœ์„ ์ 

    ๊ตฌ๋ถ„ AVL Tree Red-Black Tree
    ๊ท ํ˜• ์กฐ๊ฑด ๋ชจ๋“  ๋…ธ๋“œ์˜ Balance Factor(BF): -1, 0, +1 ์œ ์ง€ Black-height ๋™์ผ (๊ท ํ˜• ์™„ํ™”)
    ํšŒ์ „ ๋นˆ๋„ ์‚ฝ์ž…/์‚ญ์ œ ์‹œ ํšŒ์ „์ด ์ž์ฃผ ๋ฐœ์ƒ ์‚ฝ์ž…/์‚ญ์ œ ์‹œ ํšŒ์ „์ด ๋œ ๋ฐœ์ƒ (๋น ๋ฆ„)
    ํƒ์ƒ‰ ์„ฑ๋Šฅ ํƒ์ƒ‰ ์†๋„ ๋น ๋ฆ„ (O(log N)) (๋†’์ด ๋” ๋‚ฎ์Œ) ํƒ์ƒ‰ ์†๋„ **O(log N)**์œผ๋กœ ๊ฑฐ์˜ ๋™์ผ
    ์‚ฝ์ž…/์‚ญ์ œ ์„ฑ๋Šฅ ์‚ฝ์ž…/์‚ญ์ œ ๋А๋ฆผ (ํšŒ์ „ ๋งŽ์Œ) ์‚ฝ์ž…/์‚ญ์ œ ๋น ๋ฆ„ (ํšŒ์ „ ์ ์Œ)
    ์‚ฌ์šฉ ์‚ฌ๋ก€ ์ฝ๊ธฐ(read)๊ฐ€ ๋งŽ์€ ์‹œ์Šคํ…œ ์“ฐ๊ธฐ(write)๊ฐ€ ๋งŽ์€ ์‹œ์Šคํ…œ (DB, TreeMap, TreeSet)

     

    ๐Ÿงฉ 4. Red-Black Tree ์˜ˆ์ œ์™€ ํšŒ์ „ ๊ณผ์ •

    ๐Ÿ“Œ [์˜ˆ์ œ] Red-Black Tree ์‚ฝ์ž… ๋ฐ ํšŒ์ „ ๊ณผ์ •

    ์‚ฝ์ž… ์ˆœ์„œ: 20 → 15 → 30 → 10 → 18 → 25 → 40 → 16

     

    1๏ธโƒฃ ์ดˆ๊ธฐ ์‚ฝ์ž…:

        20(B)
       /    \
      15(R)  30(R)

     

    2๏ธโƒฃ 18 ์‚ฝ์ž… (Red) → ๊ทœ์น™ ์œ„๋ฐ˜ (์—ฐ์†๋œ Red):

        20(B)
       /    \
      15(R)  30(R)
        \
        18(R)  ← Red-Red Conflict ๋ฐœ์ƒ

     

    ๋ฌธ์ œ ๋ฐœ์ƒ: Red-Red Conflict

    • Red-Red Conflict๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด **15์™€ 18์ด ๋นจ๊ฐ„์ƒ‰(Red)**์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. Red-Black Tree ๊ทœ์น™์— ๋”ฐ๋ฅด๋ฉด, ์—ฐ์†๋œ ๋นจ๊ฐ„์ƒ‰ ๋…ธ๋“œ๋Š” ํ—ˆ์šฉ๋˜์ง€ ์•Š์Œ.

    ์ด ์ƒํƒœ์—์„œ Red-Black Tree์˜ ๊ท ํ˜•์„ ๋งž์ถ”๊ธฐ ์œ„ํ•ด ํšŒ์ „๊ณผ ์ƒ‰์ƒ ๋ณ€๊ฒฝ์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

     

     

     

    3๏ธโƒฃ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•: ์ƒ‰์ƒ ๋ณ€๊ฒฝ ๋ฐ ํšŒ์ „(LR Case):

    • ์ƒ‰์ƒ ๊ต์ฒด: 15 → Black, 20 → Red
    • Left Rotation ํ›„ Right Rotation(LR ํšŒ์ „)
        18(B)
       /    \
      15(R)  20(R)
               \
               30(R)

     

     

    ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ์ ˆ์ฐจ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

    1. ํšŒ์ „ ๋ฐ ์ƒ‰์ƒ ๋ณ€๊ฒฝ:

    • 15๋Š” ๋นจ๊ฐ„์ƒ‰์ด๊ณ , 20์€ ๊ฒ€์€์ƒ‰์ด๋ฏ€๋กœ ํšŒ์ „ ๋ฐ ์ƒ‰์ƒ ๋ณ€๊ฒฝ์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
    • 15์™€ 20์˜ ์ƒ‰์ƒ์€ ๋ฐ”๋€Œ๊ณ , ํŠธ๋ฆฌ ๊ตฌ์กฐ๋Š” Left Rotation์„ ํ†ตํ•ด ๊ท ํ˜•์„ ๋งž์ถฅ๋‹ˆ๋‹ค.

    2. ํšŒ์ „ ๊ณผ์ • ์„ค๋ช…:

    • Left Rotation: 20์ด **์ž์‹ ๋…ธ๋“œ(15)**๋ณด๋‹ค ํฌ๋ฏ€๋กœ, 20์„ ์™ผ์ชฝ์œผ๋กœ ํšŒ์ „์‹œ์ผœ 18์ด ์ƒˆ๋กœ์šด Root๊ฐ€ ๋˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
    • ์ƒ‰์ƒ ๋ณ€๊ฒฝ: 18์€ ๊ฒ€์€์ƒ‰์œผ๋กœ ๋ฐ”๋€Œ๊ณ , 15์™€ 20์€ ๋นจ๊ฐ„์ƒ‰์œผ๋กœ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค.
    • ์ด๋ ‡๊ฒŒ ํšŒ์ „ ๋ฐ ์ƒ‰์ƒ ๋ณ€๊ฒฝ์ด ์ด๋ฃจ์–ด์ง์œผ๋กœ์จ ํŠธ๋ฆฌ์˜ ๊ท ํ˜•์„ ๋งž์ถ”๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
        18(B)
       /    \
      15(R)  20(R)
               \
               30(R)

     

    3. ์™œ 3 depth์—์„œ 2 depth๋กœ ๋ฐ”๋€Œ์—ˆ๋Š”๊ฐ€?

    • ์ตœ์ดˆ ํŠธ๋ฆฌ์—์„œ Depth๊ฐ€ 3์ด์—ˆ์ง€๋งŒ, ํšŒ์ „ ํ›„์—๋Š” ํŠธ๋ฆฌ๊ฐ€ 2 depth๋กœ ์ค„์–ด๋“  ์ด์œ ๋Š” Root๊ฐ€ 18๋กœ ๋ณ€๊ฒฝ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ํšŒ์ „ ํ›„ 18์ด ๋ฃจํŠธ ๋…ธ๋“œ๊ฐ€ ๋˜๋ฉฐ, 15์™€ 20์€ 1๋‹จ๊ณ„ ์•„๋ž˜์— ์œ„์น˜ํ•˜๊ฒŒ ๋˜์–ด ์ „์ฒด ํŠธ๋ฆฌ์˜ ๋†’์ด๊ฐ€ ์ค„์–ด๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

    4. ์™œ 20์ด Root์—์„œ 18์ด Root๋กœ ๋ฐ”๋€Œ์—ˆ๋Š”๊ฐ€?

    • 20์ด Root์˜€์ง€๋งŒ, ์‚ฝ์ž… ๊ณผ์ •์—์„œ ๋ฐœ์ƒํ•œ Red-Red Conflict๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ํšŒ์ „์„ ํ–ˆ๊ณ , ์ด ํšŒ์ „ ๊ฒฐ๊ณผ 18์ด ์ƒˆ๋กœ์šด Root๋กœ ์˜ฌ๋ผ๊ฐ”์Šต๋‹ˆ๋‹ค.
    • Left Rotation ๊ณผ์ •์—์„œ 20์ด 18์˜ ์ž์‹ ๋…ธ๋“œ๊ฐ€ ๋˜์—ˆ๊ณ , ๊ทธ์— ๋”ฐ๋ผ 18์ด Root๋กœ ์Šน๊ฒฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

    5. 30์€ ์–ด๋””๋กœ ๊ฐ”๋Š”๊ฐ€?

    • 30์€ ์—ฌ์ „ํžˆ ํŠธ๋ฆฌ์— ๋‚จ์•„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋งŒ, 30์€ 18์˜ ์˜ค๋ฅธ์ชฝ ์ž์‹์œผ๋กœ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์€ ์ฑ„ ๊ทธ๋Œ€๋กœ ์œ„์น˜ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, 30์€ ํšŒ์ „์˜ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š์œผ๋ฏ€๋กœ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๊ณ  ๊ทธ๋Œ€๋กœ ํŠธ๋ฆฌ์˜ ์šฐ์ธก์— ๋‚จ์•„ ์žˆ์Šต๋‹ˆ๋‹ค.

    ๐Ÿ“Š [์˜ˆ์ œ] Red-Black Tree์˜ Black-height ์œ ์ง€ ์›๋ฆฌ

    ๋ชจ๋“  ๋ฆฌํ”„(NIL) ๋…ธ๋“œ๊นŒ์ง€์˜ ๊ฒ€์€์ƒ‰ ๋…ธ๋“œ ์ˆ˜๊ฐ€ ๋™์ผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

            20(B)
           /    \
        15(R)   30(R)
        /  \    /   \
      10(B) 18(B) 25(B) 40(B)

    ๋ชจ๋“  ๋ฆฌํ”„๊นŒ์ง€ Black-height = 2 (์ผ์ •ํ•จ)

     

    ๐Ÿš€ Red-Black Tree์˜ ์žฅ์ ๊ณผ ์‚ฌ์šฉ ์‚ฌ๋ก€

    โœ… ์žฅ์ :

    • ์“ฐ๊ธฐ(์‚ฝ์ž…/์‚ญ์ œ)๊ฐ€ ๋งŽ์€ ๊ฒฝ์šฐ ์„ฑ๋Šฅ์ด ๋›ฐ์–ด๋‚จ:
      ํšŒ์ „(Rotation)์ด AVL Tree๋ณด๋‹ค ์ ๊ฒŒ ๋ฐœ์ƒ → ์“ฐ๊ธฐ(write) ์„ฑ๋Šฅ ํ–ฅ์ƒ
    • ํƒ์ƒ‰ ์„ฑ๋Šฅ ์œ ์ง€:
      ์ตœ์•…์˜ ๊ฒฝ์šฐ์—๋„ **O(log N)**์„ ๋ณด์žฅ

    ๐Ÿ“Œ ์‚ฌ์šฉ ์‚ฌ๋ก€:

    • Java์˜ TreeMap, TreeSet: Red-Black Tree ๊ธฐ๋ฐ˜
    • C++ STL์˜ map, set, multimap, multiset: Red-Black Tree ์‚ฌ์šฉ
    • Linux ์ปค๋„์˜ Completely Fair Scheduler(CFS)
    • Database ์‹œ์Šคํ…œ์˜ ์ธ๋ฑ์Šค(B-Tree์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ๋จ)

    ๐Ÿ’ก 6. ์š”์•ฝ: AVL Tree vs. Red-Black Tree

    • AVL Tree:
      • ํƒ์ƒ‰ ์„ฑ๋Šฅ ์ตœ์ ํ™” (O(log N))
      • ์‚ฝ์ž…/์‚ญ์ œ ์„ฑ๋Šฅ ์ €ํ•˜ (ํšŒ์ „ ๋งŽ์Œ)
      • ์ฝ๊ธฐ(read)๊ฐ€ ๋งŽ์€ ํ™˜๊ฒฝ์— ์ ํ•ฉ
    • Red-Black Tree:
      • ๊ท ํ˜• ์กฐ๊ฑด ์™„ํ™” → ์‚ฝ์ž…/์‚ญ์ œ ์„ฑ๋Šฅ ํ–ฅ์ƒ
      • ํƒ์ƒ‰ ์„ฑ๋Šฅ๋„ O(log N) ์œ ์ง€ (๊ฑฐ์˜ ๋™์ผ)
      • ์“ฐ๊ธฐ(write)๊ฐ€ ๋งŽ์€ ํ™˜๊ฒฝ์— ์ ํ•ฉ (DB, TreeMap, TreeSet)

    '์ž๋ฃŒ๊ตฌ์กฐ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

    LinkedList  (0) 2025.02.17
    ๋ฑ(Deque)  (0) 2025.02.17
    Jump Table์ด๋ž€?(Branch Prediction & Speculative Execution)-Java (If, switch)  (1) 2025.02.15
Designed by Tistory.