SlideShare uma empresa Scribd logo
1 de 54
Baixar para ler offline
Balanced Trees



                                                               ‣ 2-3-4 trees
                                                               ‣ red-black trees
                                                               ‣ B-trees



References:
  Algorithms in Java, Chapter 13                                Except as otherwise noted, the content of this presentation
  http://www.cs.princeton.edu/algs4                             is licensed under the Creative Commons Attribution 2.5 License.




Algorithms in Java, 4th Edition   · Robert Sedgewick and Kevin Wayne · Copyright © 2008            ·       May 2, 2008 10:49:44 AM
Symbol table review


Symbol table. Key-value pair abstraction.
•   Insert a value with specified key.
•   Search for value given key.
•   Delete value with given key.


Randomized BST.
•   Probabilistic guarantee of ~ c lg N time per operation.
•   Need subtree count in each node.
•   Need random numbers for each insertion and deletion.



This lecture. 2-3-4 trees, left-leaning red-black trees, B-trees.


                           introduced to the world in
                              COS 226, Fall 2007
                    (sorry, no handouts currently available)



                                                                    2
‣ 2-3-4 trees
‣ red-black trees
‣ B-trees




                    3
2-3-4 tree


Allow 1, 2, or 3 keys per node.
•   2-node: one key, two children.
•   3-node: two keys, three children.
•   4-node: three keys, four children.


Maintain perfect balance. Every path from root to leaf has same length.



                                                                 K R
                                          smaller than K                      larger than R



                                                       between
                                                       K and R

                                         C E                     M O                W



                            A        D      F G J          L     N     Q     S V        Y Z


                          2-node            4-node                         3-node             4
Search in a 2-3-4 tree


Search.
•   Compare search key against keys in node.
•   Find interval containing search key.
•   Follow associated link (recursively).



Ex. Search for L.


                                                                 K R


                                                    between
                                                    K and R

                                         C E                     M O             W
                                               smaller than M



                              A      D      F G J        L       N     Q   S V       Y Z


                                                       found L                             5
Insertion in a 2-3-4 tree


Search.
•   Compare search key against keys in node.
•   Find interval containing search key.
•   Follow associated link (recursively).



Ex. Search for B.


                                                                   K R
                                              smaller than K




                        smaller than C       C E                   M O             W



                               A         D     F G J           L   N     Q   S V       Y Z


                                B not found                                                  6
Insertion in a 2-3-4 tree


Insert.
•   Search to bottom for key.




Ex. Insert B.


                                                                   K R
                                              smaller than K




                      smaller than C       C E                     M O             W



                             A         D       F G J           L   N     Q   S V       Y Z


                                B not found                                                  7
Insertion in a 2-3-4 tree


Insert.
•   Search to bottom for key.
•   2-node at bottom: convert to 3-node.




Ex. Insert B.


                                                                 K R
                                            smaller than K




                      smaller than C       C E                   M O             W



                            A B        D     F G J           L   N     Q   S V       Y Z


                            B fits here                                                    8
Insertion in a 2-3-4 tree


Insert.
•   Search to bottom for key.
•   2-node at bottom: convert to 3-node.




Ex. Insert X.


                                                    K R
                                                              larger than R




                                                                               larger
                                                                              than W
                                      C E           M O             W



                            A     D     F G J   L   N     Q   S V        Y Z


                                                                   X not found          9
Insertion in a 2-3-4 tree


Insert.
•   Search to bottom for key.
•   2-node at bottom: convert to 3-node.
•   3-node at bottom: convert to 4-node.



Ex. Insert X.


                                                    K R
                                                              larger than R




                                                                               larger
                                                                              than W
                                      C E           M O             W



                            A     D     F G J   L   N     Q   S V       X Y Z


                                                                     X fits here        10
Insertion in a 2-3-4 tree


Insert.
•   Search to bottom for key.
•   2-node at bottom: convert to 3-node.
•   3-node at bottom: convert to 4-node.



Ex. Insert H.


                                                                K R
                                       smaller than K




                                      C E                       M O             W
                                            larger than E



                            A     D     F G J               L   N     Q   S V       Y Z


                                             H not found                                  11
Insertion in a 2-3-4 tree


Insert.
•   Search to bottom for key.
•   2-node at bottom: convert to 3-node.
•   3-node at bottom: convert to 4-node.
•   4-node at bottom: no room for new key!


Ex. Insert H.


                                                                K R
                                       smaller than K




                                      C E                       M O             W
                                            larger than E



                            A     D     F G J               L   N     Q   S V       Y Z


                                              no room for H                               12
Splitting a 4-node in a 2-3-4 tree


Idea. Split the 4-node to make room.
                                                                        move middle
                                                                        key to parent
                    C E                            C E G
                                                                        split remainder
                                                                       into two 2-nodes


                                               A   D   F       J
           A    D     F G J


                      H does not fit here                  H does fit here !




                                                                   C E G


                                                       A           D       F      H J




Problem. Doesn’t work if parent is a 4-node.
                                                                                          13
Splitting 4-nodes in a 2-3-4 tree


Strategy. Split 4-nodes on the way down the tree.
Invariant. Current node is not a 4-node.


                a                                             ac

                    bcd                                       b     d




              ab                                              abd

                    cde
                                                              c     e


                          transformations to split a 4-node




Consequences.
•   4-node below a 4-node case never happens.
•   Insertion at bottom node is easy since it's not a 4-node.
                                                                        14
Splitting a 4-node below a 2-node in a 2-3-4 tree


A local transformation that works anywhere in the tree.




       D                                              D Q



            K Q W                                            K               W
A-C                                           A-C




      E-J        L-P   R-V      X-Z                 E-J          L-P   R-V       X-Z




       could be huge                                      unchanged



                                                                                       15
Splitting a 4-node below a 3-node in a 2-3-4 tree


      A local transformation that works anywhere in the tree.




            DH                                            D H Q



                     K Q W                                           K               W
A-C       E-G                                    A-C      E-G




            I-J           L-P   R-V   X-Z                   I-J          L-P   R-V       X-Z




                could be huge                                     unchanged



                                                                                               16
Growth of a 2-3-4 tree


           insert A                                   insert C

                          A                                      E

                                                          A C        R S
               insert S

                       A S
                                                      insert D

               insert E
                                                                 E
                    A E S
                                                      A C D          R S

           insert R
                                    split 4-node to
                                            E         insert I
                          E
                                        A       S
                                                                 E
tree grows         A          R S   and then insert
up one level
                                                      A C D          I R S



                                                                             17
Growth of a 2-3-4 tree (cont)



                                               split 4-node to
                                                    E R
           E             insert N

                                                    I       S
A C D           I R S                          and then insert




                              E R

                      A C D         I N    S
                                                                            insert X         split 4-node to

          insert B                                      C E R                                        E

                                                                                                 C       R
                                          A B           D           I N     S                and then insert
    split 4-node to
          C E R

      A     D                                                           E
    and then insert                                             C               R
                                                                                                             tree grows
                                                                                                             up one level
                                                    A B             D       I N        S X

                                                                                                                       18
Balance in a 2-3-4 tree


Key property. All paths from root to leaf have same length.




Tree height.
•   Worst case:
•   Best case:




                                                              19
Balance in a 2-3-4 tree


Key property. All paths from root to leaf have same length.




Tree height.
•   Worst case:    lg N.                [all 2-nodes]
•   Best case:     log4 N = 1/2 lg N.   [all 4-nodes]
•   Between 10 and 20 for a million nodes.
•   Between 15 and 30 for a billion nodes.


Guaranteed logarithmic performance for search and insert.


                                                              20
2-3-4 tree: implementation?


Direct implementation is complicated, because:
•   Maintaining multiple node types is cumbersome.
•   Need multiple compares to move down tree.
•   Large number of cases for splitting.


            private void insert(Key key, Value val)
            {
               if (root.is4Node()) root.split4Node();
               Node x = root;
               while (x.getChild(key) != null)
               {
                  x = x.getChild(key))
                  if (x.is4Node()) x.split4Node();
               }
               if      (x.is2Node()) x.make3Node(key, val);
               else if (x.is3Node()) x.make4Node(key, val);
            }

                               fantasy code




Bottom line. Could do it, but there's a better way.
                                                              21
ST implementations: summary


                         guarantee                average case
                                                                        ordered      operations
 implementation
                                                                       iteration?     on keys
                   search      insert       search hit       insert

 unordered array     N            N            N/2               N        no         equals()


  unordered list     N            N            N/2               N        no         equals()


  ordered array     lg N          N            lg N              N/2      yes       compareTo()


   ordered list      N            N            N/2               N/2      yes       compareTo()


      BST            N            N         1.38 lg N      1.38 lg N      yes       compareTo()


 randomized BST    3 lg N      3 lg N       1.38 lg N      1.38 lg N      yes       compareTo()


   2-3-4 tree      c lg N       c lg N        c lg N         c lg N       yes       compareTo()




                                         constants depend upon
                                            implementation


                                                                                                  22
‣ 2-3-4 trees
‣ red-black trees
‣ B-trees




                    23
Left-leaning red-black trees (Guibas-Sedgewick, 1979 and Sedgewick, 2007)


1. Represent 2–3–4 tree as a BST.
2. Use "internal" left-leaning links as "glue" for 3– and 4–nodes.

   2-node                    3-node                                4-node




Key property. 1–1 correspondence between 2–3–4 and LLRB.

                                                                             black links connect
                                                                             2-, 3-, and 4-nodes

                  CE                                     E

                                                 C                      J

        AB    D        FGJ                   B       D              G

                                         A                     F             red links "glue" nodes
                                                                            within a 2-, 3-, or 4-node


                                                             4-node
                                                                                                         24
Left-leaning red-black trees (Guibas-Sedgewick, 1979 and Sedgewick, 2007)


1. Represent 2–3–4 tree as a BST.
2. Use "internal" left-leaning links as "glue" for 3– and 4–nodes.

     2-node                     3-node                  4-node




Disallowed.                                                          right-leaning red




•   Right-leaning red link.




•   Three red links in a row.


                                                                                     25
Search implementation for red-black trees


Observation. Search is the same as for elementary BST (ignore color).

                       but runs faster because of better balance




    public Val get(Key key)
    {                                                                              E
       Node x = root;
       while (x != null)                                                   C                   J
       {
                                                                       B       D           G
          int cmp = key.compareTo(x.key);
          if      (cmp < 0) x = x.left;
                                                                   A                   F
          else if (cmp > 0) x = x.right;
          else if (cmp == 0) return x.val;
       }
       return null;
    }




Remark. Many other ops (e.g., iteration, kth largest, ceiling) are also the same.
                                                                                                   26
Insertion in a LLRB tree: overview


Basic strategy. Maintain 1-1 correspondence with 2-3-4 trees.


•   Inserting a node at the bottom.

                                                                         c
                                      b
           ab                                 [stay tuned]       b               abc
                              a
                                                             a



•   Splitting a 4-node.


                              a                                          c
     a                                                                                 ac
                                          d                  a               d
                                              [stay tuned]
         bcd                      c                                                     b   d
                                                                     b
                          b




Potential concern. Lots of cases to consider.
                                                                                                27
Review: rotation in a BST


Two fundamental operations to rearrange nodes in a BST.
•   Maintain symmetric order.
•   Local transformations (change just 3 pointers).


       h
                 u                                               h
                                                                         v


                                   h = rotL(u)
                      v
                                                           u


       A                           h = rotR(v)                            C



             B            C                                A         B




    private Node rotL(Node h)                         private Node rotR(Node h)
    { /* as before */ }                               { /* as before */ }


                                                                                  28
Insertion in a LLRB tree: adding a node to the bottom


Invariant. Node at bottom is a 2-node or a 3-node.


Case 1. Node at bottom is a 2-node.




                                           b
           b          b                                     ab
                                       a
                                           OK




                                               rotate
           a          a               a         left        b
                                                                 ab
                                           b            a
Insertion in a LLRB tree: adding a node to the bottom


Invariant. Node at bottom is a 2-node or a 3-node.


Case 2. Node at bottom is 3-node.


                                                          c
                            c
            bc                                    b           abc
                        b
                                          a
                                                  OK



                                                      c                   c
                            c
            ac                                a                   b           abc
                        a
                                                      b       a
                                      rotate
                                       left



                                                  rotate              c
                            b             b        left
            ab                                                    b           abc
                        a             a           c
                                                              a
Insertion in a LLRB tree: adding a node to the bottom


Key observation. Same code for all cases!
•   Add new node at bottom as usual, with red link to glue it to node above.
•   Rotate left if node leans right.




                                   rotate
                                    left
                             or


                       OK




                                            rotate
                            or    or         left




                  OK    rotate
                         left
Insertion in a LLRB tree: splitting 4-nodes


Case 1. Parent of 4-node is a 2-node.


                                       d
        d                                                                 d                        d
                               c                                                                               bd
     abc                                                          b                        b
                           b                                                                               a
                                                              a                        a                       c
                                                                      c                        c
                                       rotate       flip to
                       a
                                        right       black




                                                                              rotate
                           a
    a                                                         a                left                c
                                   d                                                                           ac
                                                                      c                    a           d
    bcd
                               c                                                                                   b   d
                                                                  b       d                    b
             flip to                       rotate
             black         b
                                            right




                                                                                                                           32
Insertion in a LLRB tree: splitting 4-nodes


Case 2. Parent of 4-node is a 3-node.
                                                              e
                                                                                                   e
                                                          d
             de                                                                                d                               bde
                                                      c
        abc                                                                            b
                                                  b                                                                        a   c
                                                                                   a       c
                                              a           rotate
                        flip to                            right
                        black


                                              e                                                                    e
                                                                                   e
                             a                                                         rotate
       ae                                                          a                    left                   c                     ace
                                      d
                                                                           c                           a           d
       bcd                                                                                                                           b   d
                                  c
                                                                       b       d                           b
                             b                rotate
                  flip to
                  black                        right


                                                                                   rotate
                                  b                                                 left                           d
                                                                       b
  ab                                                                                                                                 abd
                             a            e                                                                            e
                                                                   a           d                           b
    cde
                                      d                                                                a       c                         c   e
                                                                           c       e
                                  c               rotate
                   flip to
                   black                           right
                                                                                                                                                 33
Insertion in a LLRB tree: splitting 4-nodes


Key observation. Same code for all cases!
•   Rotate right to balance the 4-node.
•   Flip colors to pass red link up one level.
•   Rotate left if necessary to make link lean left.




                                                    if necessary,
                                                      rotate left           d
         red or        b                    b
         black                 e                    d               b           e

                           d                    c       e               c
             flip to               rotate
             black     c            right




                                                                                    34
Insertion in a LLRB: strategy revisited


Basic strategy. Maintain 1-1 correspondence with 2-3-4 trees.


Search as usual.
•
                                                                        a
    If key not found, insert a new node at the bottom.              a


•
                                                                                b
    Might leave right-leaning link.


Split 4-nodes on the way down the tree.
•
                                                                    c
    Right-rotate and flip color.                                                b
                                                                b
•   Might leave right-leaning link.                         a
                                                                        a               c




New trick: enforce left-leaning condition on the way up the tree.
•   Left-rotate any right-leaning link on search path.
•   Easy with recursion (do it after recursive calls).          a                   b

•   No other right-leaning links in tree.                           b       a




                                                                                            35
Red-black tree implementation: Java skeleton


  public class RedBlackBST <Key extends Comparable<Key>, Value>
  {
      private static final boolean RED   = true;
      private static final boolean BLACK = false;
      private Node root;

       private class Node
       {
           private Node left, right;    // left and right subtrees
           private boolean color;       // color of parent link
           private Key key;             // key
           private Value val;           // value
           public Node(Key key, Value   val, boolean color)
           {                                                           E
               this.key   = key;                               C                   J
               this.val   = val;
               this.color = color;                         B       D           G
           }
       }                                               A                   F


      private boolean isRed(Node x)
      {
         if (x == null) return false;
         return (x.color == RED);
      }
  }

                                                                                       36
Red-black tree implementation: basic operations


1. Split a 4-node.

                                                            could be
                                                          right or left
    private Node splitFourNode(Node h)
    {
       x = rotR(h);                                   c       right                       fix color of
       x.left.color = BLACK;                                 rotate
                                                                              b            left node
                                                                                                             b
       return x;                                  b
    }                                                                     a           c                  c       a
                                              a




2. Enforce left-leaning condition.

                                                    could be
    private Node leanLeft(Node h)                 red or black
    {
       x = rotL(h);                                            left                           flip
       x.color = x.left.color;                                rotate              b          colors
                                                  a                                                          b
       x.left.color = RED;
       return x;                                      b                       a                          a
    }


                                                                                                                     37
Insertion in a LLRB tree: Java implementation


Remark. Only a few extra lines of code to standard BST insert.


private Node insert(Node h, Key key, Value val)
{
   if (h == null)
                                                                 insert at bottom
      return new Node(key, val, RED);

    if (isRed(h.left) && isRed(h.left.left))                     split 4-nodes on
       h = splitFourNode(h);                                     the way down


    int cmp   = key.compareTo(h.key);                            standard insert
    if        (cmp < 0) h.left = insert(h.left, key, val);
    else if   (cmp > 0) h.right = insert(h.right, key, val);
    else if   (cmp == 0) h.val = val;

    if (isRed(h.right))                                          fix right-leaning
       h = leanLeft(h);                                          reds on the way up


    return h;
}


                                                                                      38
Insertion in a LLRB tree: visualization




                             511 insertions in ascending order




                                                                 39
Insertion in a LLRB tree: visualization




                           511 insertions in descending order




                                                                40
Insertion in a LLRB tree: visualization




                              50 random insertions




                                                     41
Insertion in a LLRB tree: visualization




                              500 random insertions




                                                      42
Typical random LLRB trees




                            average node depth




                            average node depth




                                                 43
Balance in left-leaning red-black trees


Proposition A. Every path from root to leaf has same number of black links.
Proposition B. Never three red links in-a-row.
Proposition C. Height of tree is less than 3 lg N + 2 in the worst case.




Property D. Height of tree is ~ lg N in typical applications.
Property E. Nearly all 4-nodes are on the bottom in the typical applications.



                                                                                44
Why left-leaning trees?


old code (that students had to learn in the past)              new code (that you have to learn)
private Node insert(Node x, Key key, Value val, boolean sw)   private Node insert(Node h, Key key, Value val)
{                                                             {
   if (x == null)                                                int cmp = key.compareTo(h.key);
      return new Node(key, value, RED);                          if (h == null)
   int cmp = key.compareTo(x.key);                                  return new Node(key, val, RED);
                                                                 if (isRed(h.left) && isRed(h.left.left))
    if (isRed(x.left) && isRed(x.right))                         {
    {                                                               h = rotR(h);
       x.color = RED;                                               h.left.color = BLACK;
       x.left.color = BLACK;                                     }
       x.right.color = BLACK;                                    if (cmp < 0)
    }                                                               h.left = insert(h.left, key, val);
    if (cmp < 0)                                                 else if (cmp > 0)
    {                                                               h.right = insert(h.right, key, val);
      x.left = insert(x.left, key, val, false);                  else
      if (isRed(x) && isRed(x.left) && sw)                          x.val = val;
         x = rotR(x);                                            if (isRed(h.right))
      if (isRed(x.left) && isRed(x.left.left))                   {
       {                                                            h = rotL(h);
          x = rotR(x);                                              h.color = h.left.color;
          x.color = BLACK; x.right.color = RED;                     h.left.color = RED;
       }                                                         }
    }                                                            return h;
    else if (cmp > 0)                                         }
    {
       x.right = insert(x.right, key, val, true);
       if (isRed(h) && isRed(x.right) && !sw)
          x = rotL(x);                                                         straightforward
       if (isRed(h.right) && isRed(h.right.right))                        (if you’ve paid attention)
       {
          x = rotL(x);
          x.color = BLACK; x.left.color = RED;
       }
    }
    else x.val = val;
                                                              extremely tricky
    return x;
}
                                                                                                                45
Why left-leaning trees?


Simplified code.
•   Left-leaning restriction reduces number of cases.
•   Recursion gives two (easy) chances to fix each node.             new

•   Short inner loop.


Same ideas simplify implementation of other operations.                   2008

•   Delete min/max.                                                        1978

•   Arbitrary delete.


Improves widely-used algorithms.
•   AVL trees, 2-3 trees, 2-3-4 trees.                                     1972


•   Red-black trees.



Bottom line. Left-leaning red-black trees are the simplest to implement
and fastest in practice.
                                                                                  46
ST implementations: summary


                           guarantee                         average case
                                                                                         ordered      operations
implementation
                                                                                        iteration?     on keys
                  search    insert     delete   search hit      insert       delete


unordered array     N         N          N        N/2             N           N/2          no         equals()


unordered list      N         N          N        N/2             N           N/2          no         equals()


 ordered array     lg N       N          N        lg N           N/2          N/2          yes       compareTo()


  ordered list      N         N          N        N/2            N/2          N/2          yes       compareTo()


     BST            N         N          N      1.38 lg N     1.38 lg N        ?           yes       compareTo()


randomized BST    3 lg N    3 lg N     3 lg N   1.38 lg N     1.38 lg N     1.38 lg N      yes       compareTo()


  2-3-4 tree      c lg N    c lg N     c lg N     c lg N        c lg N       c lg N        yes       compareTo()


red-black tree    3 lg N    3 lg N     3 lg N     lg N           lg N         lg N         yes       compareTo()




                                                 exact value of coefficient unknown
                                                      but extremely close to 1
                                                                                                                   47
‣ 2-3-4 trees
‣ red-black trees
‣ B-trees




                    48
B-trees (Bayer-McCreight, 1972)


B-tree. Generalizes 2-3-4 trees by allowing up to M links per node.


Main application: file systems.
•   Reading a page into memory from disk is expensive.
•   Accessing info on a page in memory is free.
•   Goal: minimize # page accesses.
•   Node size M = page size.


Space-time tradeoff.
•   M large ⇒ only a few levels in tree.
•   M small ⇒ less wasted space.
•   Typical M = 1000, N < 1 trillion.

                                                  3 or 4 in practice (!)



Bottom line. Number of page accesses is logMN per op in worst case.


                                                                           49
B-Tree Example




                                     no room
                                     for 773




                 no room
                 for 275




                           no room
                           for 737




    M=5

                                               50
B-Tree Example (cont)




                  no room
                  for 526




    M=5

                            51
Balanced trees in the wild


Red-black trees are widely used as system symbol tables.
•   Java: java.util.TreeMap, java.util.TreeSet.
•   C++ STL: map, multimap, multiset.
•   Linux kernel: completely fair scheduler, linux/rbtree.h.


B-tree variants. B+ tree, B*tree, B# tree, …


B-trees (and variants) are widely used for file systems and databases.
•   Windows: HPFS.
•   Mac: HFS, HFS+.
•   Linux: ReiserFS, XFS, Ext3FS, JFS.
•   Databases: ORACLE, DB2, INGRES, SQL, PostgreSQL.




                                                                         52
Red-black trees in the wild




                              Common sense. Sixth sense.
                              Together they're the
                              FBI's newest team.




                                                           53
Red-black trees in the wild




                              54

Mais conteúdo relacionado

Destaque

Lecture# 7 midi file format
Lecture#  7 midi file formatLecture#  7 midi file format
Lecture# 7 midi file formatMr SMAK
 
B trees in Data Structure
B trees in Data StructureB trees in Data Structure
B trees in Data StructureAnuj Modi
 
Image Processing
Image ProcessingImage Processing
Image Processingtijeel
 
Trees (data structure)
Trees (data structure)Trees (data structure)
Trees (data structure)Trupti Agrawal
 
The MIDI Protocol - Musical Instrument Digital Interface
The MIDI Protocol - Musical Instrument Digital InterfaceThe MIDI Protocol - Musical Instrument Digital Interface
The MIDI Protocol - Musical Instrument Digital InterfaceBhaumik Bhatt
 
Chapter 2 multimedia authoring and tools
Chapter 2 multimedia authoring and toolsChapter 2 multimedia authoring and tools
Chapter 2 multimedia authoring and toolsABDUmomo
 
Lec 17 heap data structure
Lec 17 heap data structureLec 17 heap data structure
Lec 17 heap data structureSajid Marwat
 
multimedia technologies Introduction
multimedia technologies Introductionmultimedia technologies Introduction
multimedia technologies IntroductionMohammed Fareed
 
Image processing
Image processingImage processing
Image processingVarun Raj
 
Speech recognition
Speech recognitionSpeech recognition
Speech recognitionCharu Joshi
 
17. Trees and Graphs
17. Trees and Graphs17. Trees and Graphs
17. Trees and GraphsIntro C# Book
 
Trees data structure
Trees data structureTrees data structure
Trees data structureSumit Gupta
 
Digital Image Processing
Digital Image ProcessingDigital Image Processing
Digital Image ProcessingSahil Biswas
 

Destaque (18)

Multimedia Object - Image
Multimedia Object - ImageMultimedia Object - Image
Multimedia Object - Image
 
Lecture# 7 midi file format
Lecture#  7 midi file formatLecture#  7 midi file format
Lecture# 7 midi file format
 
B trees in Data Structure
B trees in Data StructureB trees in Data Structure
B trees in Data Structure
 
Red Black Trees
Red Black TreesRed Black Trees
Red Black Trees
 
Image Processing
Image ProcessingImage Processing
Image Processing
 
Trees (data structure)
Trees (data structure)Trees (data structure)
Trees (data structure)
 
The MIDI Protocol - Musical Instrument Digital Interface
The MIDI Protocol - Musical Instrument Digital InterfaceThe MIDI Protocol - Musical Instrument Digital Interface
The MIDI Protocol - Musical Instrument Digital Interface
 
Chapter 2 multimedia authoring and tools
Chapter 2 multimedia authoring and toolsChapter 2 multimedia authoring and tools
Chapter 2 multimedia authoring and tools
 
Lec 17 heap data structure
Lec 17 heap data structureLec 17 heap data structure
Lec 17 heap data structure
 
multimedia technologies Introduction
multimedia technologies Introductionmultimedia technologies Introduction
multimedia technologies Introduction
 
Image processing
Image processingImage processing
Image processing
 
Speech recognition
Speech recognitionSpeech recognition
Speech recognition
 
17. Trees and Graphs
17. Trees and Graphs17. Trees and Graphs
17. Trees and Graphs
 
Multimedia chapter 4
Multimedia chapter 4Multimedia chapter 4
Multimedia chapter 4
 
Trees data structure
Trees data structureTrees data structure
Trees data structure
 
Image processing ppt
Image processing pptImage processing ppt
Image processing ppt
 
Multimedia
MultimediaMultimedia
Multimedia
 
Digital Image Processing
Digital Image ProcessingDigital Image Processing
Digital Image Processing
 

Mais de Sri Prasanna

Mais de Sri Prasanna (20)

Qr codes para tech radar
Qr codes para tech radarQr codes para tech radar
Qr codes para tech radar
 
Qr codes para tech radar 2
Qr codes para tech radar 2Qr codes para tech radar 2
Qr codes para tech radar 2
 
Test
TestTest
Test
 
Test
TestTest
Test
 
assds
assdsassds
assds
 
assds
assdsassds
assds
 
asdsa
asdsaasdsa
asdsa
 
dsd
dsddsd
dsd
 
About stacks
About stacksAbout stacks
About stacks
 
About Stacks
About  StacksAbout  Stacks
About Stacks
 
About Stacks
About  StacksAbout  Stacks
About Stacks
 
About Stacks
About  StacksAbout  Stacks
About Stacks
 
About Stacks
About  StacksAbout  Stacks
About Stacks
 
About Stacks
About  StacksAbout  Stacks
About Stacks
 
About Stacks
About StacksAbout Stacks
About Stacks
 
About Stacks
About StacksAbout Stacks
About Stacks
 
Network and distributed systems
Network and distributed systemsNetwork and distributed systems
Network and distributed systems
 
Introduction & Parellelization on large scale clusters
Introduction & Parellelization on large scale clustersIntroduction & Parellelization on large scale clusters
Introduction & Parellelization on large scale clusters
 
Mapreduce: Theory and implementation
Mapreduce: Theory and implementationMapreduce: Theory and implementation
Mapreduce: Theory and implementation
 
Other distributed systems
Other distributed systemsOther distributed systems
Other distributed systems
 

Último

Vishram Singh - Textbook of Anatomy Upper Limb and Thorax.. Volume 1 (1).pdf
Vishram Singh - Textbook of Anatomy  Upper Limb and Thorax.. Volume 1 (1).pdfVishram Singh - Textbook of Anatomy  Upper Limb and Thorax.. Volume 1 (1).pdf
Vishram Singh - Textbook of Anatomy Upper Limb and Thorax.. Volume 1 (1).pdfssuserdda66b
 
Introduction to Nonprofit Accounting: The Basics
Introduction to Nonprofit Accounting: The BasicsIntroduction to Nonprofit Accounting: The Basics
Introduction to Nonprofit Accounting: The BasicsTechSoup
 
Unit-V; Pricing (Pharma Marketing Management).pptx
Unit-V; Pricing (Pharma Marketing Management).pptxUnit-V; Pricing (Pharma Marketing Management).pptx
Unit-V; Pricing (Pharma Marketing Management).pptxVishalSingh1417
 
1029-Danh muc Sach Giao Khoa khoi 6.pdf
1029-Danh muc Sach Giao Khoa khoi  6.pdf1029-Danh muc Sach Giao Khoa khoi  6.pdf
1029-Danh muc Sach Giao Khoa khoi 6.pdfQucHHunhnh
 
How to Give a Domain for a Field in Odoo 17
How to Give a Domain for a Field in Odoo 17How to Give a Domain for a Field in Odoo 17
How to Give a Domain for a Field in Odoo 17Celine George
 
Making communications land - Are they received and understood as intended? we...
Making communications land - Are they received and understood as intended? we...Making communications land - Are they received and understood as intended? we...
Making communications land - Are they received and understood as intended? we...Association for Project Management
 
Sociology 101 Demonstration of Learning Exhibit
Sociology 101 Demonstration of Learning ExhibitSociology 101 Demonstration of Learning Exhibit
Sociology 101 Demonstration of Learning Exhibitjbellavia9
 
On National Teacher Day, meet the 2024-25 Kenan Fellows
On National Teacher Day, meet the 2024-25 Kenan FellowsOn National Teacher Day, meet the 2024-25 Kenan Fellows
On National Teacher Day, meet the 2024-25 Kenan FellowsMebane Rash
 
Key note speaker Neum_Admir Softic_ENG.pdf
Key note speaker Neum_Admir Softic_ENG.pdfKey note speaker Neum_Admir Softic_ENG.pdf
Key note speaker Neum_Admir Softic_ENG.pdfAdmir Softic
 
Food safety_Challenges food safety laboratories_.pdf
Food safety_Challenges food safety laboratories_.pdfFood safety_Challenges food safety laboratories_.pdf
Food safety_Challenges food safety laboratories_.pdfSherif Taha
 
Understanding Accommodations and Modifications
Understanding  Accommodations and ModificationsUnderstanding  Accommodations and Modifications
Understanding Accommodations and ModificationsMJDuyan
 
Towards a code of practice for AI in AT.pptx
Towards a code of practice for AI in AT.pptxTowards a code of practice for AI in AT.pptx
Towards a code of practice for AI in AT.pptxJisc
 
Spellings Wk 3 English CAPS CARES Please Practise
Spellings Wk 3 English CAPS CARES Please PractiseSpellings Wk 3 English CAPS CARES Please Practise
Spellings Wk 3 English CAPS CARES Please PractiseAnaAcapella
 
Python Notes for mca i year students osmania university.docx
Python Notes for mca i year students osmania university.docxPython Notes for mca i year students osmania university.docx
Python Notes for mca i year students osmania university.docxRamakrishna Reddy Bijjam
 
HMCS Max Bernays Pre-Deployment Brief (May 2024).pptx
HMCS Max Bernays Pre-Deployment Brief (May 2024).pptxHMCS Max Bernays Pre-Deployment Brief (May 2024).pptx
HMCS Max Bernays Pre-Deployment Brief (May 2024).pptxEsquimalt MFRC
 
Accessible Digital Futures project (20/03/2024)
Accessible Digital Futures project (20/03/2024)Accessible Digital Futures project (20/03/2024)
Accessible Digital Futures project (20/03/2024)Jisc
 
Kodo Millet PPT made by Ghanshyam bairwa college of Agriculture kumher bhara...
Kodo Millet  PPT made by Ghanshyam bairwa college of Agriculture kumher bhara...Kodo Millet  PPT made by Ghanshyam bairwa college of Agriculture kumher bhara...
Kodo Millet PPT made by Ghanshyam bairwa college of Agriculture kumher bhara...pradhanghanshyam7136
 
1029 - Danh muc Sach Giao Khoa 10 . pdf
1029 -  Danh muc Sach Giao Khoa 10 . pdf1029 -  Danh muc Sach Giao Khoa 10 . pdf
1029 - Danh muc Sach Giao Khoa 10 . pdfQucHHunhnh
 

Último (20)

Vishram Singh - Textbook of Anatomy Upper Limb and Thorax.. Volume 1 (1).pdf
Vishram Singh - Textbook of Anatomy  Upper Limb and Thorax.. Volume 1 (1).pdfVishram Singh - Textbook of Anatomy  Upper Limb and Thorax.. Volume 1 (1).pdf
Vishram Singh - Textbook of Anatomy Upper Limb and Thorax.. Volume 1 (1).pdf
 
Mehran University Newsletter Vol-X, Issue-I, 2024
Mehran University Newsletter Vol-X, Issue-I, 2024Mehran University Newsletter Vol-X, Issue-I, 2024
Mehran University Newsletter Vol-X, Issue-I, 2024
 
Introduction to Nonprofit Accounting: The Basics
Introduction to Nonprofit Accounting: The BasicsIntroduction to Nonprofit Accounting: The Basics
Introduction to Nonprofit Accounting: The Basics
 
Unit-V; Pricing (Pharma Marketing Management).pptx
Unit-V; Pricing (Pharma Marketing Management).pptxUnit-V; Pricing (Pharma Marketing Management).pptx
Unit-V; Pricing (Pharma Marketing Management).pptx
 
1029-Danh muc Sach Giao Khoa khoi 6.pdf
1029-Danh muc Sach Giao Khoa khoi  6.pdf1029-Danh muc Sach Giao Khoa khoi  6.pdf
1029-Danh muc Sach Giao Khoa khoi 6.pdf
 
How to Give a Domain for a Field in Odoo 17
How to Give a Domain for a Field in Odoo 17How to Give a Domain for a Field in Odoo 17
How to Give a Domain for a Field in Odoo 17
 
Making communications land - Are they received and understood as intended? we...
Making communications land - Are they received and understood as intended? we...Making communications land - Are they received and understood as intended? we...
Making communications land - Are they received and understood as intended? we...
 
Sociology 101 Demonstration of Learning Exhibit
Sociology 101 Demonstration of Learning ExhibitSociology 101 Demonstration of Learning Exhibit
Sociology 101 Demonstration of Learning Exhibit
 
On National Teacher Day, meet the 2024-25 Kenan Fellows
On National Teacher Day, meet the 2024-25 Kenan FellowsOn National Teacher Day, meet the 2024-25 Kenan Fellows
On National Teacher Day, meet the 2024-25 Kenan Fellows
 
Key note speaker Neum_Admir Softic_ENG.pdf
Key note speaker Neum_Admir Softic_ENG.pdfKey note speaker Neum_Admir Softic_ENG.pdf
Key note speaker Neum_Admir Softic_ENG.pdf
 
Food safety_Challenges food safety laboratories_.pdf
Food safety_Challenges food safety laboratories_.pdfFood safety_Challenges food safety laboratories_.pdf
Food safety_Challenges food safety laboratories_.pdf
 
Understanding Accommodations and Modifications
Understanding  Accommodations and ModificationsUnderstanding  Accommodations and Modifications
Understanding Accommodations and Modifications
 
Towards a code of practice for AI in AT.pptx
Towards a code of practice for AI in AT.pptxTowards a code of practice for AI in AT.pptx
Towards a code of practice for AI in AT.pptx
 
Spellings Wk 3 English CAPS CARES Please Practise
Spellings Wk 3 English CAPS CARES Please PractiseSpellings Wk 3 English CAPS CARES Please Practise
Spellings Wk 3 English CAPS CARES Please Practise
 
Python Notes for mca i year students osmania university.docx
Python Notes for mca i year students osmania university.docxPython Notes for mca i year students osmania university.docx
Python Notes for mca i year students osmania university.docx
 
HMCS Max Bernays Pre-Deployment Brief (May 2024).pptx
HMCS Max Bernays Pre-Deployment Brief (May 2024).pptxHMCS Max Bernays Pre-Deployment Brief (May 2024).pptx
HMCS Max Bernays Pre-Deployment Brief (May 2024).pptx
 
Accessible Digital Futures project (20/03/2024)
Accessible Digital Futures project (20/03/2024)Accessible Digital Futures project (20/03/2024)
Accessible Digital Futures project (20/03/2024)
 
Kodo Millet PPT made by Ghanshyam bairwa college of Agriculture kumher bhara...
Kodo Millet  PPT made by Ghanshyam bairwa college of Agriculture kumher bhara...Kodo Millet  PPT made by Ghanshyam bairwa college of Agriculture kumher bhara...
Kodo Millet PPT made by Ghanshyam bairwa college of Agriculture kumher bhara...
 
1029 - Danh muc Sach Giao Khoa 10 . pdf
1029 -  Danh muc Sach Giao Khoa 10 . pdf1029 -  Danh muc Sach Giao Khoa 10 . pdf
1029 - Danh muc Sach Giao Khoa 10 . pdf
 
Spatium Project Simulation student brief
Spatium Project Simulation student briefSpatium Project Simulation student brief
Spatium Project Simulation student brief
 

Balanced Trees

  • 1. Balanced Trees ‣ 2-3-4 trees ‣ red-black trees ‣ B-trees References: Algorithms in Java, Chapter 13 Except as otherwise noted, the content of this presentation http://www.cs.princeton.edu/algs4 is licensed under the Creative Commons Attribution 2.5 License. Algorithms in Java, 4th Edition · Robert Sedgewick and Kevin Wayne · Copyright © 2008 · May 2, 2008 10:49:44 AM
  • 2. Symbol table review Symbol table. Key-value pair abstraction. • Insert a value with specified key. • Search for value given key. • Delete value with given key. Randomized BST. • Probabilistic guarantee of ~ c lg N time per operation. • Need subtree count in each node. • Need random numbers for each insertion and deletion. This lecture. 2-3-4 trees, left-leaning red-black trees, B-trees. introduced to the world in COS 226, Fall 2007 (sorry, no handouts currently available) 2
  • 3. ‣ 2-3-4 trees ‣ red-black trees ‣ B-trees 3
  • 4. 2-3-4 tree Allow 1, 2, or 3 keys per node. • 2-node: one key, two children. • 3-node: two keys, three children. • 4-node: three keys, four children. Maintain perfect balance. Every path from root to leaf has same length. K R smaller than K larger than R between K and R C E M O W A D F G J L N Q S V Y Z 2-node 4-node 3-node 4
  • 5. Search in a 2-3-4 tree Search. • Compare search key against keys in node. • Find interval containing search key. • Follow associated link (recursively). Ex. Search for L. K R between K and R C E M O W smaller than M A D F G J L N Q S V Y Z found L 5
  • 6. Insertion in a 2-3-4 tree Search. • Compare search key against keys in node. • Find interval containing search key. • Follow associated link (recursively). Ex. Search for B. K R smaller than K smaller than C C E M O W A D F G J L N Q S V Y Z B not found 6
  • 7. Insertion in a 2-3-4 tree Insert. • Search to bottom for key. Ex. Insert B. K R smaller than K smaller than C C E M O W A D F G J L N Q S V Y Z B not found 7
  • 8. Insertion in a 2-3-4 tree Insert. • Search to bottom for key. • 2-node at bottom: convert to 3-node. Ex. Insert B. K R smaller than K smaller than C C E M O W A B D F G J L N Q S V Y Z B fits here 8
  • 9. Insertion in a 2-3-4 tree Insert. • Search to bottom for key. • 2-node at bottom: convert to 3-node. Ex. Insert X. K R larger than R larger than W C E M O W A D F G J L N Q S V Y Z X not found 9
  • 10. Insertion in a 2-3-4 tree Insert. • Search to bottom for key. • 2-node at bottom: convert to 3-node. • 3-node at bottom: convert to 4-node. Ex. Insert X. K R larger than R larger than W C E M O W A D F G J L N Q S V X Y Z X fits here 10
  • 11. Insertion in a 2-3-4 tree Insert. • Search to bottom for key. • 2-node at bottom: convert to 3-node. • 3-node at bottom: convert to 4-node. Ex. Insert H. K R smaller than K C E M O W larger than E A D F G J L N Q S V Y Z H not found 11
  • 12. Insertion in a 2-3-4 tree Insert. • Search to bottom for key. • 2-node at bottom: convert to 3-node. • 3-node at bottom: convert to 4-node. • 4-node at bottom: no room for new key! Ex. Insert H. K R smaller than K C E M O W larger than E A D F G J L N Q S V Y Z no room for H 12
  • 13. Splitting a 4-node in a 2-3-4 tree Idea. Split the 4-node to make room. move middle key to parent C E C E G split remainder into two 2-nodes A D F J A D F G J H does not fit here H does fit here ! C E G A D F H J Problem. Doesn’t work if parent is a 4-node. 13
  • 14. Splitting 4-nodes in a 2-3-4 tree Strategy. Split 4-nodes on the way down the tree. Invariant. Current node is not a 4-node. a ac bcd b d ab abd cde c e transformations to split a 4-node Consequences. • 4-node below a 4-node case never happens. • Insertion at bottom node is easy since it's not a 4-node. 14
  • 15. Splitting a 4-node below a 2-node in a 2-3-4 tree A local transformation that works anywhere in the tree. D D Q K Q W K W A-C A-C E-J L-P R-V X-Z E-J L-P R-V X-Z could be huge unchanged 15
  • 16. Splitting a 4-node below a 3-node in a 2-3-4 tree A local transformation that works anywhere in the tree. DH D H Q K Q W K W A-C E-G A-C E-G I-J L-P R-V X-Z I-J L-P R-V X-Z could be huge unchanged 16
  • 17. Growth of a 2-3-4 tree insert A insert C A E A C R S insert S A S insert D insert E E A E S A C D R S insert R split 4-node to E insert I E A S E tree grows A R S and then insert up one level A C D I R S 17
  • 18. Growth of a 2-3-4 tree (cont) split 4-node to E R E insert N I S A C D I R S and then insert E R A C D I N S insert X split 4-node to insert B C E R E C R A B D I N S and then insert split 4-node to C E R A D E and then insert C R tree grows up one level A B D I N S X 18
  • 19. Balance in a 2-3-4 tree Key property. All paths from root to leaf have same length. Tree height. • Worst case: • Best case: 19
  • 20. Balance in a 2-3-4 tree Key property. All paths from root to leaf have same length. Tree height. • Worst case: lg N. [all 2-nodes] • Best case: log4 N = 1/2 lg N. [all 4-nodes] • Between 10 and 20 for a million nodes. • Between 15 and 30 for a billion nodes. Guaranteed logarithmic performance for search and insert. 20
  • 21. 2-3-4 tree: implementation? Direct implementation is complicated, because: • Maintaining multiple node types is cumbersome. • Need multiple compares to move down tree. • Large number of cases for splitting. private void insert(Key key, Value val) { if (root.is4Node()) root.split4Node(); Node x = root; while (x.getChild(key) != null) { x = x.getChild(key)) if (x.is4Node()) x.split4Node(); } if (x.is2Node()) x.make3Node(key, val); else if (x.is3Node()) x.make4Node(key, val); } fantasy code Bottom line. Could do it, but there's a better way. 21
  • 22. ST implementations: summary guarantee average case ordered operations implementation iteration? on keys search insert search hit insert unordered array N N N/2 N no equals() unordered list N N N/2 N no equals() ordered array lg N N lg N N/2 yes compareTo() ordered list N N N/2 N/2 yes compareTo() BST N N 1.38 lg N 1.38 lg N yes compareTo() randomized BST 3 lg N 3 lg N 1.38 lg N 1.38 lg N yes compareTo() 2-3-4 tree c lg N c lg N c lg N c lg N yes compareTo() constants depend upon implementation 22
  • 23. ‣ 2-3-4 trees ‣ red-black trees ‣ B-trees 23
  • 24. Left-leaning red-black trees (Guibas-Sedgewick, 1979 and Sedgewick, 2007) 1. Represent 2–3–4 tree as a BST. 2. Use "internal" left-leaning links as "glue" for 3– and 4–nodes. 2-node 3-node 4-node Key property. 1–1 correspondence between 2–3–4 and LLRB. black links connect 2-, 3-, and 4-nodes CE E C J AB D FGJ B D G A F red links "glue" nodes within a 2-, 3-, or 4-node 4-node 24
  • 25. Left-leaning red-black trees (Guibas-Sedgewick, 1979 and Sedgewick, 2007) 1. Represent 2–3–4 tree as a BST. 2. Use "internal" left-leaning links as "glue" for 3– and 4–nodes. 2-node 3-node 4-node Disallowed. right-leaning red • Right-leaning red link. • Three red links in a row. 25
  • 26. Search implementation for red-black trees Observation. Search is the same as for elementary BST (ignore color). but runs faster because of better balance public Val get(Key key) { E Node x = root; while (x != null) C J { B D G int cmp = key.compareTo(x.key); if (cmp < 0) x = x.left; A F else if (cmp > 0) x = x.right; else if (cmp == 0) return x.val; } return null; } Remark. Many other ops (e.g., iteration, kth largest, ceiling) are also the same. 26
  • 27. Insertion in a LLRB tree: overview Basic strategy. Maintain 1-1 correspondence with 2-3-4 trees. • Inserting a node at the bottom. c b ab [stay tuned] b abc a a • Splitting a 4-node. a c a ac d a d [stay tuned] bcd c b d b b Potential concern. Lots of cases to consider. 27
  • 28. Review: rotation in a BST Two fundamental operations to rearrange nodes in a BST. • Maintain symmetric order. • Local transformations (change just 3 pointers). h u h v h = rotL(u) v u A h = rotR(v) C B C A B private Node rotL(Node h) private Node rotR(Node h) { /* as before */ } { /* as before */ } 28
  • 29. Insertion in a LLRB tree: adding a node to the bottom Invariant. Node at bottom is a 2-node or a 3-node. Case 1. Node at bottom is a 2-node. b b b ab a OK rotate a a a left b ab b a
  • 30. Insertion in a LLRB tree: adding a node to the bottom Invariant. Node at bottom is a 2-node or a 3-node. Case 2. Node at bottom is 3-node. c c bc b abc b a OK c c c ac a b abc a b a rotate left rotate c b b left ab b abc a a c a
  • 31. Insertion in a LLRB tree: adding a node to the bottom Key observation. Same code for all cases! • Add new node at bottom as usual, with red link to glue it to node above. • Rotate left if node leans right. rotate left or OK rotate or or left OK rotate left
  • 32. Insertion in a LLRB tree: splitting 4-nodes Case 1. Parent of 4-node is a 2-node. d d d d c bd abc b b b a a a c c c rotate flip to a right black rotate a a a left c d ac c a d bcd c b d b d b flip to rotate black b right 32
  • 33. Insertion in a LLRB tree: splitting 4-nodes Case 2. Parent of 4-node is a 3-node. e e d de d bde c abc b b a c a c a rotate flip to right black e e e a rotate ae a left c ace d c a d bcd b d c b d b b rotate flip to black right rotate b left d b ab abd a e e a d b cde d a c c e c e c rotate flip to black right 33
  • 34. Insertion in a LLRB tree: splitting 4-nodes Key observation. Same code for all cases! • Rotate right to balance the 4-node. • Flip colors to pass red link up one level. • Rotate left if necessary to make link lean left. if necessary, rotate left d red or b b black e d b e d c e c flip to rotate black c right 34
  • 35. Insertion in a LLRB: strategy revisited Basic strategy. Maintain 1-1 correspondence with 2-3-4 trees. Search as usual. • a If key not found, insert a new node at the bottom. a • b Might leave right-leaning link. Split 4-nodes on the way down the tree. • c Right-rotate and flip color. b b • Might leave right-leaning link. a a c New trick: enforce left-leaning condition on the way up the tree. • Left-rotate any right-leaning link on search path. • Easy with recursion (do it after recursive calls). a b • No other right-leaning links in tree. b a 35
  • 36. Red-black tree implementation: Java skeleton public class RedBlackBST <Key extends Comparable<Key>, Value> { private static final boolean RED = true; private static final boolean BLACK = false; private Node root; private class Node { private Node left, right; // left and right subtrees private boolean color; // color of parent link private Key key; // key private Value val; // value public Node(Key key, Value val, boolean color) { E this.key = key; C J this.val = val; this.color = color; B D G } } A F private boolean isRed(Node x) { if (x == null) return false; return (x.color == RED); } } 36
  • 37. Red-black tree implementation: basic operations 1. Split a 4-node. could be right or left private Node splitFourNode(Node h) { x = rotR(h); c right fix color of x.left.color = BLACK; rotate b left node b return x; b } a c c a a 2. Enforce left-leaning condition. could be private Node leanLeft(Node h) red or black { x = rotL(h); left flip x.color = x.left.color; rotate b colors a b x.left.color = RED; return x; b a a } 37
  • 38. Insertion in a LLRB tree: Java implementation Remark. Only a few extra lines of code to standard BST insert. private Node insert(Node h, Key key, Value val) { if (h == null) insert at bottom return new Node(key, val, RED); if (isRed(h.left) && isRed(h.left.left)) split 4-nodes on h = splitFourNode(h); the way down int cmp = key.compareTo(h.key); standard insert if (cmp < 0) h.left = insert(h.left, key, val); else if (cmp > 0) h.right = insert(h.right, key, val); else if (cmp == 0) h.val = val; if (isRed(h.right)) fix right-leaning h = leanLeft(h); reds on the way up return h; } 38
  • 39. Insertion in a LLRB tree: visualization 511 insertions in ascending order 39
  • 40. Insertion in a LLRB tree: visualization 511 insertions in descending order 40
  • 41. Insertion in a LLRB tree: visualization 50 random insertions 41
  • 42. Insertion in a LLRB tree: visualization 500 random insertions 42
  • 43. Typical random LLRB trees average node depth average node depth 43
  • 44. Balance in left-leaning red-black trees Proposition A. Every path from root to leaf has same number of black links. Proposition B. Never three red links in-a-row. Proposition C. Height of tree is less than 3 lg N + 2 in the worst case. Property D. Height of tree is ~ lg N in typical applications. Property E. Nearly all 4-nodes are on the bottom in the typical applications. 44
  • 45. Why left-leaning trees? old code (that students had to learn in the past) new code (that you have to learn) private Node insert(Node x, Key key, Value val, boolean sw) private Node insert(Node h, Key key, Value val) { { if (x == null) int cmp = key.compareTo(h.key); return new Node(key, value, RED); if (h == null) int cmp = key.compareTo(x.key); return new Node(key, val, RED); if (isRed(h.left) && isRed(h.left.left)) if (isRed(x.left) && isRed(x.right)) { { h = rotR(h); x.color = RED; h.left.color = BLACK; x.left.color = BLACK; } x.right.color = BLACK; if (cmp < 0) } h.left = insert(h.left, key, val); if (cmp < 0) else if (cmp > 0) { h.right = insert(h.right, key, val); x.left = insert(x.left, key, val, false); else if (isRed(x) && isRed(x.left) && sw) x.val = val; x = rotR(x); if (isRed(h.right)) if (isRed(x.left) && isRed(x.left.left)) { { h = rotL(h); x = rotR(x); h.color = h.left.color; x.color = BLACK; x.right.color = RED; h.left.color = RED; } } } return h; else if (cmp > 0) } { x.right = insert(x.right, key, val, true); if (isRed(h) && isRed(x.right) && !sw) x = rotL(x); straightforward if (isRed(h.right) && isRed(h.right.right)) (if you’ve paid attention) { x = rotL(x); x.color = BLACK; x.left.color = RED; } } else x.val = val; extremely tricky return x; } 45
  • 46. Why left-leaning trees? Simplified code. • Left-leaning restriction reduces number of cases. • Recursion gives two (easy) chances to fix each node. new • Short inner loop. Same ideas simplify implementation of other operations. 2008 • Delete min/max. 1978 • Arbitrary delete. Improves widely-used algorithms. • AVL trees, 2-3 trees, 2-3-4 trees. 1972 • Red-black trees. Bottom line. Left-leaning red-black trees are the simplest to implement and fastest in practice. 46
  • 47. ST implementations: summary guarantee average case ordered operations implementation iteration? on keys search insert delete search hit insert delete unordered array N N N N/2 N N/2 no equals() unordered list N N N N/2 N N/2 no equals() ordered array lg N N N lg N N/2 N/2 yes compareTo() ordered list N N N N/2 N/2 N/2 yes compareTo() BST N N N 1.38 lg N 1.38 lg N ? yes compareTo() randomized BST 3 lg N 3 lg N 3 lg N 1.38 lg N 1.38 lg N 1.38 lg N yes compareTo() 2-3-4 tree c lg N c lg N c lg N c lg N c lg N c lg N yes compareTo() red-black tree 3 lg N 3 lg N 3 lg N lg N lg N lg N yes compareTo() exact value of coefficient unknown but extremely close to 1 47
  • 48. ‣ 2-3-4 trees ‣ red-black trees ‣ B-trees 48
  • 49. B-trees (Bayer-McCreight, 1972) B-tree. Generalizes 2-3-4 trees by allowing up to M links per node. Main application: file systems. • Reading a page into memory from disk is expensive. • Accessing info on a page in memory is free. • Goal: minimize # page accesses. • Node size M = page size. Space-time tradeoff. • M large ⇒ only a few levels in tree. • M small ⇒ less wasted space. • Typical M = 1000, N < 1 trillion. 3 or 4 in practice (!) Bottom line. Number of page accesses is logMN per op in worst case. 49
  • 50. B-Tree Example no room for 773 no room for 275 no room for 737 M=5 50
  • 51. B-Tree Example (cont) no room for 526 M=5 51
  • 52. Balanced trees in the wild Red-black trees are widely used as system symbol tables. • Java: java.util.TreeMap, java.util.TreeSet. • C++ STL: map, multimap, multiset. • Linux kernel: completely fair scheduler, linux/rbtree.h. B-tree variants. B+ tree, B*tree, B# tree, … B-trees (and variants) are widely used for file systems and databases. • Windows: HPFS. • Mac: HFS, HFS+. • Linux: ReiserFS, XFS, Ext3FS, JFS. • Databases: ORACLE, DB2, INGRES, SQL, PostgreSQL. 52
  • 53. Red-black trees in the wild Common sense. Sixth sense. Together they're the FBI's newest team. 53
  • 54. Red-black trees in the wild 54