Premaster Course Algorithms 1 Chapter 3: Elementary Data Structures

Similar documents
Chapter 5 Data Structures Algorithm Theory WS 2017/18 Fabian Kuhn

Insert Sorted List Insert as the Last element (the First element?) Delete Chaining. 2 Slide courtesy of Dr. Sang-Eon Park

Data Structures and Algorithms " Search Trees!!

Advanced Implementations of Tables: Balanced Search Trees and Hashing

Solution suggestions for examination of Logic, Algorithms and Data Structures,

Fundamental Algorithms

Priority queues implemented via heaps

INF2220: algorithms and data structures Series 1

8 Priority Queues. 8 Priority Queues. Prim s Minimum Spanning Tree Algorithm. Dijkstra s Shortest Path Algorithm

1 Hashing. 1.1 Perfect Hashing

16. Binary Search Trees. [Ottman/Widmayer, Kap. 5.1, Cormen et al, Kap ]

16. Binary Search Trees. [Ottman/Widmayer, Kap. 5.1, Cormen et al, Kap ]

Data Structures and and Algorithm Xiaoqing Zheng

CS 240 Data Structures and Data Management. Module 4: Dictionaries

Dictionary: an abstract data type

Amortized analysis. Amortized analysis

A Lecture on Hashing. Aram-Alexandre Pooladian, Alexander Iannantuono March 22, Hashing. Direct Addressing. Operations - Simple

B- TREE. Michael Tsai 2017/06/06

CSE548, AMS542: Analysis of Algorithms, Fall 2017 Date: Oct 26. Homework #2. ( Due: Nov 8 )

Queues. Principles of Computer Science II. Basic features of Queues

Part III. Data Structures. Abstract Data Type. Dynamic Set Operations. Dynamic Set Operations

Problem. Problem Given a dictionary and a word. Which page (if any) contains the given word? 3 / 26

7 Dictionary. 7.1 Binary Search Trees. Binary Search Trees: Searching. 7.1 Binary Search Trees

Search Trees. Chapter 10. CSE 2011 Prof. J. Elder Last Updated: :52 AM

Assignment 5: Solutions

Dictionary: an abstract data type

Ordered Dictionary & Binary Search Tree

Analysis of Algorithms. Outline 1 Introduction Basic Definitions Ordered Trees. Fibonacci Heaps. Andres Mendez-Vazquez. October 29, Notes.

7 Dictionary. EADS c Ernst Mayr, Harald Räcke 109

Advanced Data Structures

7 Dictionary. Ernst Mayr, Harald Räcke 126

Fibonacci (Min-)Heap. (I draw dashed lines in place of of circular lists.) 1 / 17

Part IA Algorithms Notes

Hash tables. Hash tables

So far we have implemented the search for a key by carefully choosing split-elements.

Chapter 5 Arrays and Strings 5.1 Arrays as abstract data types 5.2 Contiguous representations of arrays 5.3 Sparse arrays 5.4 Representations of

/463 Algorithms - Fall 2013 Solution to Assignment 4

Each internal node v with d(v) children stores d 1 keys. k i 1 < key in i-th sub-tree k i, where we use k 0 = and k d =.

Heaps and Priority Queues

Search Trees. EECS 2011 Prof. J. Elder Last Updated: 24 March 2015

25. Minimum Spanning Trees

25. Minimum Spanning Trees

Lecture 6 September 21, 2016

Advanced Data Structures

Hash tables. Hash tables

Amortized Analysis (chap. 17)

5 Spatial Access Methods

7 Dictionary. Harald Räcke 125

searching algorithms

Splay Trees. CMSC 420: Lecture 8

Data Structures 1 NTIN066

CS361 Homework #3 Solutions

Collision. Kuan-Yu Chen ( 陳冠宇 ) TR-212, NTUST

Dynamic Ordered Sets with Exponential Search Trees

Data Structures 1 NTIN066

CS Data Structures and Algorithm Analysis

Optimal Color Range Reporting in One Dimension

CS 4407 Algorithms Lecture: Shortest Path Algorithms

Advanced Data Structures

Finger Search in the Implicit Model

Design and Analysis of Algorithms

Tutorial 4. Dynamic Set: Amortized Analysis

Single Source Shortest Paths

COMP 250 Fall Midterm examination

Quiz 1 Solutions. Problem 2. Asymptotics & Recurrences [20 points] (3 parts)

Skip List. CS 561, Lecture 11. Skip List. Skip List

Lecture VI AMORTIZATION

5 Spatial Access Methods

The null-pointers in a binary search tree are replaced by pointers to special null-vertices, that do not carry any object-data

Problem. Maintain the above set so as to support certain

Quiz 1 Solutions. (a) f 1 (n) = 8 n, f 2 (n) = , f 3 (n) = ( 3) lg n. f 2 (n), f 1 (n), f 3 (n) Solution: (b)

Solutions. Problem 1: Suppose a polynomial in n of degree d has the form

Motivation. Dictionaries. Direct Addressing. CSE 680 Prof. Roger Crawfis

data structures and algorithms lecture 2

Inge Li Gørtz. Thank you to Kevin Wayne for inspiration to slides

Introduction to Hashtables

Problem Set 4 Solutions

Heaps Induction. Heaps. Heaps. Tirgul 6

AVL Trees. Manolis Koubarakis. Data Structures and Programming Techniques

8: Splay Trees. Move-to-Front Heuristic. Splaying. Splay(12) CSE326 Spring April 16, Search for Pebbles: Move found item to front of list

Computing Static Single Assignment (SSA) Form

Slides for CIS 675. Huffman Encoding, 1. Huffman Encoding, 2. Huffman Encoding, 3. Encoding 1. DPV Chapter 5, Part 2. Encoding 2

Fibonacci Heaps These lecture slides are adapted from CLRS, Chapter 20.

CMPS 6610 Fall 2018 Shortest Paths Carola Wenk

ENS Lyon Camp. Day 2. Basic group. Cartesian Tree. 26 October

Lecture 4 Thursday Sep 11, 2014

Searching. Constant time access. Hash function. Use an array? Better hash function? Hash function 4/18/2013. Chapter 9

1 Probability Review. CS 124 Section #8 Hashing, Skip Lists 3/20/17. Expectation (weighted average): the expectation of a random quantity X is:

1 Maintaining a Dictionary

Sorting Algorithms. We have already seen: Selection-sort Insertion-sort Heap-sort. We will see: Bubble-sort Merge-sort Quick-sort

Data Structure. Mohsen Arab. January 13, Yazd University. Mohsen Arab (Yazd University ) Data Structure January 13, / 86

Lecture 5: Splay Trees

Lecture 5: Loop Invariants and Insertion-sort

Review Of Topics. Review: Induction

Binary Search Trees. Motivation

Data Structures and Algorithm. Xiaoqing Zheng

CS213d Data Structures and Algorithms

4.8 Huffman Codes. These lecture slides are supplied by Mathijs de Weerd

Graphs and Trees Binary Search Trees AVL-Trees (a,b)-trees Splay-Trees. Search Trees. Tobias Lieber. April 14, 2008

CS 473: Algorithms. Ruta Mehta. Spring University of Illinois, Urbana-Champaign. Ruta (UIUC) CS473 1 Spring / 32

Transcription:

Premaster Course Algorithms 1 Chapter 3: Elementary Data Structures Christian Scheideler SS 2018 23.04.2018 Chapter 3 1

Overview Basic data structures Search structures (successor searching) Dictionaries (exact searching) 23.04.2018 Chapter 3 2

Stacks and Queues Stack: implements the LIFO (last-in-first-out) rule, i.e., the youngest element will be removed first Queue: implements the FIFO (first-in-first-out) rule, i.e., the oldest element will be removed first 23.04.2018 Chapter 3 3

Stack Stack operations: Push(S,x): insert element x into stack S Pop(S): remove youngest element from stack Empty(S): checks if stack is empty Simplest implementation: Array S[1..N] (#elements in S never more than N) S.top: number of elements currently in S[1..N] 23.04.2018 Chapter 3 4

Stack Example: Implementation: Push(S,x): 1. S.top:=S.top+1 2. S[S.top]:=x 15 6 2 9 S.top=4 Pop(S): 1. if Empty(S) then error underflow 2. else 3. S.top:=S.top-1 4. return S[S.top+1] Empty(S): 1. if S.top=0 then 2. return true 3. else 4. return false 23.04.2018 Chapter 3 5

Stack Starting point: 15 6 2 9 S.top=4 After Push(S,17), Push(S,3): 15 6 2 9 17 3 S.top=6 After Pop(S): 15 6 2 9 17 3 S.top=5 23.04.2018 Chapter 3 6

Queue Queue operations: Enqueue(Q,x): insert element x into queue Q Dequeue(Q): remove oldest element from queue Empty(Q): checks if queue is empty Simplest implementation: Array Q[1..N] (#elements in Q at most N) Q.head: starting point in Q[1..N] Q.tail: end point (next free position) in Q[1..N] Initially, Q.head=Q.tail=1 23.04.2018 Chapter 3 7

Queue Example: 15 6 9 8 4 Implementation: Empty(Q): 1. if Q.head=Q.tail then 2. return true 3. else 4. return false Enqueue(Q,x): 1. Q[Q.tail]:=x 2. if Q.tail=Q.length then 3. Q.tail:=1 4. else Q.tail:=Q.tail+1 Q.head=7 Q.tail=12 Dequeue(Q): 1. if Empty(Q) then error underflow 2. x:=q[q.head] 3. if Q.head=Q.length then 4. Q.head:=1 5. else Q.head:=Q.head+1 6. return x 23.04.2018 Chapter 3 8

Queue Example: 3 5 15 6 9 8 4 17 Q.tail=3 Q.head=7 After Dequeue: 3 5 15 6 9 8 4 17 Q.tail=3 Q.head=8 23.04.2018 Chapter 3 9

Linked Lists List operations: List-Insert(L,x): insert element x into list List-Delete(L,x): remove element x from list List-Search(L,k): search for key k in list Implementation as doubly linked list: L.head: refers to first element of list L x: element of list, which contains x.prev, X.key, and x.next x.prev: refers to predecessor of x (NIL: no predecessor) x.next: refers to successor of x (NIL: no successor) x.key: stores key of x L.head / 9 16 4 1 / prev=nil prev key next 23.04.2018 Chapter 3 10

Linked Lists Abstract view: linked list L.head / 9 16 4 1 / Internal representation: linear addressable memory Contents: 1523 1523 2846 NIL 1280 L.head 16 / 9 Addresses: 867 1280 1523 23.04.2018 Chapter 3 11

Linked Lists List-Search(L,k): 1. x:=l.head 2. while x NIL and x.key k do 3. x:=x.next 4. return x Example: List-Search(L,1) L.head / 9 16 4 1 / prev=nil prev key next 23.04.2018 Chapter 3 12

Linked Lists List-Insert(L,x): 1. x.next:=l.head 2. if L.head NIL then 3. L.head.prev:=x 4. L.head:=x 5. x.prev:=nil x: pointer that points to address of element that needs to be inserted x 5 L.head nil 7 4 nil 23.04.2018 Chapter 3 13

Linked Lists List-Insert(L,x): 1. x.next:=l.head 2. if L.head NIL then 3. L.head.prev:=x 4. L.head:=x 5. x.prev:=nil x 5 L.head nil 7 4 nil 23.04.2018 Chapter 3 14

Linked Lists List-Insert(L,x): 1. x.next:=l.head 2. if L.head NIL then 3. L.head.prev:=x 4. L.head:=x 5. x.prev:=nil x 5 L.head 7 4 nil 23.04.2018 Chapter 3 15

Linked Lists List-Insert(L,x): 1. x.next:=l.head 2. if L.head NIL then 3. L.head.prev:=x 4. L.head:=x 5. x.prev:=nil x L.head 5 7 4 nil 23.04.2018 Chapter 3 16

Linked Lists List-Insert(L,x): 1. x.next:=l.head 2. if L.head NIL then 3. L.head.prev:=x 4. L.head:=x 5. x.prev:=nil x L.head nil 5 7 4 nil 23.04.2018 Chapter 3 17

Linked Lists List-Delete(L,x): 1. if x.prev NIL then 2. x.prev.next:=x.next 3. else L.head:=x.next 4. if x.next NIL then 5. x.next.prev:=x.prev L.head nil 5 x 7 4 nil 23.04.2018 Chapter 3 18

Linked Lists List-Delete(L,x): 1. if x.prev NIL then 2. x.prev.next:=x.next 3. else L.head:=x.next 4. if x.next NIL then 5. x.next.prev:=x.prev L.head nil 5 x 7 4 nil 23.04.2018 Chapter 3 19

Linked Lists List-Delete(L,x): 1. if x.prev NIL then 2. x.prev.next:=x.next 3. else L.head:=x.next 4. if x.next NIL then 5. x.next.prev:=x.prev x L.head nil 5 7 4 nil 23.04.2018 Chapter 3 20

Overview Basic data structures Search structures (successor searching) Dictionaries (exact searching) 23.04.2018 Chapter 3 21

Search Structure 4 8 11 20 3 18 23.04.2018 Chapter 3 22

Search Structure insert(15) 4 8 11 20 15 3 18 23.04.2018 Chapter 3 23

Search Structure delete(20) 4 8 11 20 15 3 18 23.04.2018 Chapter 3 24

Search Structure search(7) gives 8 (closest successor) 4 8 11 15 3 18 23.04.2018 Chapter 3 25

Search Structure S: set of elements Every element e identified by key(e). Operations: S.insert(e: Element): S:=S {e} S.delete(k: Key): S:=S\{e}, where e is the element with key(e)=k S.search(k: Key): outputs e S with minimal key(e) so that key(e) k 23.04.2018 Chapter 3 26

Static Search Structure 1. Store elements in sorted array. search(12) 1 3 5 10 14 19 28 31 58 60 82 85 89 94 98 search: via binary search (in O(log n) time) 23.04.2018 Chapter 3 27

Binary Search Input: number x and sorted array A[1],,A[n] Algorithm BinarySearch: l:=1; r:=n while l < r do m:=(r+l) div 2 if A[m] = x then return m if A[m] < x then l:=m+1 else r:=m return l 23.04.2018 Chapter 3 28

Dynamic Search Structure insert und delete Operations: Sorted array difficult to update! 15 1 3 5 10 14 19 28 31 58 60 82 85 Worst case: Θ(n) time 23.04.2018 Chapter 3 29

Search Structure 2. Sorted List (with an -Element) 1 3 19 Problem: insert, delete and search take Θ(n) time in the worst case Observation: If search could be implemented efficiently, then also all other operations 23.04.2018 Chapter 3 30

Search Structure Idee: add navigation structure that allows search to run efficiently navigation structure 1 3 19 23.04.2018 Chapter 3 31

Binary Search Tree (ideal) search(12) 10 3 19 1 5 14 28 1 3 5 10 14 19 28 23.04.2018 Chapter 3 32

Binary Search Tree Search tree invariant: k For all keys k in T 1 and k in T 2 : k k < k T 1 T 2 23.04.2018 Chapter 3 33

Binary Search Tree Formally: for every tree node v let key(v) be the key stored at v d(v) the number of children of v Search tree invariant: (as above) Degree invariant: All tree nodes have exactly two children (as long as the number of elements in the list is >1) Key invariant: For every element e in the list there is exactly one tree node v with key(v)=key(e). 23.04.2018 Chapter 3 34

Binary Search Tree Search tree invariant: (as before) Degree invariant: All tree nodes have exactly two children (as long as the number of elements is >1) Key invariant: For every element e in the list there is exactly one tree node v with key(v)=key(e). From the search tree and key invariants it follows that for every left subtree T of a node v, the rightmost list element e under T satisfies key(v)=key(e). 23.04.2018 Chapter 3 35 T v 1 e

search(x) Operation k For all keys k in T 1 and k in T 2 : k k < k T 1 T 2 Search strategy: Start at the root, v, of the search tree while v is a tree node: if x key(v) then let v be the left child of v, otherwise let v be the right child of v Output (list node) v 23.04.2018 Chapter 3 36

search(x) Operation k For all keys k in T 1 and k in T 2 : k k < k T 1 T 2 v Correctness of search strategy: For every left subtree T of a node v, the rightmost list element e under T satisfies key(v)=key(e). So whenever search(x) enters T, there is an element e in the list below T with key(e) x. 23.04.2018 Chapter 3 37 T 1 e

Search(9) 10 3 19 1 5 14 28 1 3 5 10 14 19 28 23.04.2018 Chapter 3 38

Insert and Delete Operations Strategy: insert(e): First, execute search(key(e)) to obtain a list element e. If key(e)=key(e ), replace e by e, otherwise insert e between e and its predecessor in the list and add a new search tree leaf for e and e with key key(e). delete(k): First, execute search(k) to obtain a list element e. If key(e)=k, then delete e from the list and the parent v of e from the search tree, and set in the tree node w with key(w)=k: key(w):=key(v). 23.04.2018 Chapter 3 39

Insert(5) 10 1 14 28 1 10 14 28 23.04.2018 Chapter 3 40

Insert(5) 10 1 14 5 28 1 5 10 14 28 23.04.2018 Chapter 3 41

Insert(12) 10 1 14 5 28 1 5 10 14 28 23.04.2018 Chapter 3 42

Insert(12) 10 1 14 5 12 28 1 5 10 12 14 28 23.04.2018 Chapter 3 43

Delete(1) 10 1 14 5 12 28 1 5 10 12 14 28 23.04.2018 Chapter 3 44

Delete(1) 10 14 5 12 28 5 10 12 14 28 23.04.2018 Chapter 3 45

Delete(14) 10 14 5 12 28 5 10 12 14 28 23.04.2018 Chapter 3 46

Delete(14) 10 12 5 28 5 10 12 28 23.04.2018 Chapter 3 47

Binary Search Tree Problem: binary tree can degenerate! Example: numbers are inserted in sorted order 1 3 5 10 14 Search requires Θ(n) time in the worst case 19 28 1 3 5 10 14 19 28 23.04.2018 Chapter 3 48

Search Trees Problem: binary tree can degenerate! Solution: (a,b)-tree (guaranteed well balanced) 23.04.2018 Chapter 3 49

(a,b)-trees Problem: how to maintain a balanced search tree Idea: All nodes v (except for the root) have degree d(v) with a d(v) b, where a 2 and b 2a-1 (otherwise this cannot be enforced) All leaves have the same depth (a,b)-trees, which are a general form of B- trees (see Chapter 18). 23.04.2018 Chapter 3 50

(a,b)-trees Formally: for a tree node v let d(v) be the number of children of v t(v) be the depth of v (root has depth 0) Form Invariant: For all leaves v,w: t(v)=t(w) Degree Invariant: For all inner nodes v except for root: d(v) [a,b], for root r: d(r) [2,b] (as long as #elements >1) 23.04.2018 Chapter 3 51

(a,b)-trees Lemma 3.10: An (a,b)-tree with n elements has depth at most 1+ log a (n+1)/2 Proof: The root has degree 2 and every other inner node has degree a. At depth t there are at least 2a t-1 nodes n+1 2a t-1 t 1+ log a (n+1)/2 23.04.2018 Chapter 3 52

(a,b)-trees (a,b)-tree-rule: s 1, s 2,,s d-1.... For all keys k in T i and k in T i+1 : k s i < k T 1 T 2 T d Then search operation easy to implement. 23.04.2018 Chapter 3 53

Search(9) 10 19 1 3 5 14 28 1 3 5 10 14 19 28 23.04.2018 Chapter 3 54

Insert(e) Operation Strategy: First search(key(e)) until some e found in the list. If key(e )>key(e), insert e in front of e, otherwise replace e by e.... e... 23.04.2018 Chapter 3 55

Insert(e) Operation Strategy: First search(key(e)) until some e found in the list. If key(e )>key(e), insert e in front of e, otherwise replace e by e.... e e... 23.04.2018 Chapter 3 56

Insert(e) Operation Add key(e) and pointer to e in tree node v above e. If we still have d(v) [a,b] afterwards, then we are done. v x z v x y z... x y z...... x y z... e e e e 23.04.2018 Chapter 3 57

Insert(e) Operation If d(v)>b, then cut v into two nodes. (Example: a=2, b=4) w b z b u z v x u u y split x u y e e e e x u u y z x u u y z 23.04.2018 Chapter 3 58

Insert(e) Operation If after splitting v, d(w)>b, then cut w into two nodes (and so on, until all nodes have degree b or we reached the root) r s r b s w a b u z split a u z 23.04.2018 Chapter 3 59

Insert(e) Operation If for the root v of T, d(v)>b, then cut v into two nodes and create a new root node. b v a b c d split a c d 23.04.2018 Chapter 3 60

Insert(8) a=2, b=4 10 19 1 3 5 14 28 1 3 5 10 14 19 28 23.04.2018 Chapter 3 61

Insert(8) a=2, b=4 10 19 1 3 5 8 14 28 1 3 5 8 10 14 19 28 23.04.2018 Chapter 3 62

Insert(8) a=2, b=4 3 10 19 1 5 8 14 28 1 3 5 8 10 14 19 28 23.04.2018 Chapter 3 63

Insert(6) a=2, b=4 3 10 19 1 5 8 14 28 1 3 5 8 10 14 19 28 23.04.2018 Chapter 3 64

Insert(6) a=2, b=4 3 10 19 1 5 6 8 14... 1 3 5 6 8 10 14 19 23.04.2018 Chapter 3 65

Insert(7) a=2, b=4 3 10 19 1 5 6 8 14... 1 3 5 6 8 10 14 19 23.04.2018 Chapter 3 66

Insert(7) a=2, b=4 3 10 19 1 5 6 7 8 14... 1 3 5 6 7 8 10 14 19 23.04.2018 Chapter 3 67

Insert(7) a=2, b=4 3 6 10 19 1 5 7 8 14... 1 3 5 6 7 8 10 14 19 23.04.2018 Chapter 3 68

Insert(7) a=2, b=4 6 3 10 19 1 5 7 8 14... 1 3 5 6 7 8 10 14 19 23.04.2018 Chapter 3 69

Insert Operation Form Invariant: For all leaves v,w: t(v)=t(w) Satisfied by Insert! Degree Invariant: For all inner nodes v except for the root: d(v) [a,b], for root r: d(r) [2,b] 1) Insert splits nodes of degree b+1 into nodes of degree (b+1)/2 and (b+1)/2. If b 2a-1, then both values are at least a. 2) If root has reached degree b+1, then a new root of degree 2 is created. 23.04.2018 Chapter 3 70

Delete(k) Operation Strategy: First search(k) until some element e is reached in the list. If key(e)=k, remove e from the list, otherwise we are done.... e e e... 23.04.2018 Chapter 3 71

Delete(k) Operation Strategy: First search(k) until some element e is reached in the list. If key(e)=k, remove e from the list, otherwise we are done.... e e... 23.04.2018 Chapter 3 72

Delete(k) Operation Remove pointer to e and key k from the leaf node v above e. (e rightmost child: perform key exchange like in binary tree!) If afterwards we still have d(v) a, we are done. v x k y v x y... x k y...... x y... e 23.04.2018 Chapter 3 73

Delete(k) Operation Remove pointer to e and key k from the leaf node v above e. (e rightmost child: perform key exchange like in binary tree!) If afterwards we still have d(v) a, we are done. v x y k v x y... x y k...... x y... e 23.04.2018 Chapter 3 74

Delete(k) Operation If d(v)<a and the preceding or succeeding sibling of v has degree >a, steal an edge from that sibling. (Example: a=2, b=4) u k t u y t v y r s k r s x y r s t x y r s t 23.04.2018 Chapter 3 75

Delete(k) Operation If d(v)<a and the preceeding and succeeding siblings of v have degree a, merge v with one of these. (Example: a=3, b=5) u y t u t v x r s merge x y r s x y r s t x y r s t 23.04.2018 Chapter 3 76

Delete(k) Operation Peform changes upwards until all inner nodes (except for the root) have degree a. If root has degree <2: remove root. x y z x y z 23.04.2018 Chapter 3 77

Delete(10) a=2, b=4 10 19 1 3 5 14 28 1 3 5 10 14 19 28 23.04.2018 Chapter 3 78

Delete(10) a=2, b=4 5 19 1 3 14 28 1 3 5 14 19 28 23.04.2018 Chapter 3 79

Delete(14) a=2, b=4 5 19 1 3 14 28 1 3 5 14 19 28 23.04.2018 Chapter 3 80

Delete(14) a=2, b=4 5 19 1 3 28 1 3 5 19 28 23.04.2018 Chapter 3 81

Delete(14) a=2, b=4 3 19 1 5 28 1 3 5 19 28 23.04.2018 Chapter 3 82

Delete(3) a=2, b=4 3 19 1 5 28 1 3 5 19 28 23.04.2018 Chapter 3 83

Delete(3) a=2, b=4 3 19 1 5 28 1 5 19 28 23.04.2018 Chapter 3 84

Delete(3) a=2, b=4 1 19 5 28 1 5 19 28 23.04.2018 Chapter 3 85

Delete(3) a=2, b=4 19 1 5 28 1 5 19 28 23.04.2018 Chapter 3 86

Delete(1) a=2, b=4 19 1 5 28 1 5 19 28 23.04.2018 Chapter 3 87

Delete(1) a=2, b=4 19 5 28 5 19 28 23.04.2018 Chapter 3 88

Delete(19) a=2, b=4 19 5 28 5 19 28 23.04.2018 Chapter 3 89

Delete(19) a=2, b=4 5 28 5 28 23.04.2018 Chapter 3 90

Delete(19) a=2, b=4 5 28 5 28 23.04.2018 Chapter 3 91

Delete(19) a=2, b=4 5 28 5 28 23.04.2018 Chapter 3 92

Delete Operation Form Invariant: For all leaves v,w: t(v)=t(w) Satisfied by Delete! Degree Invariant: For all inner nodes v except for the root: d(v) [a,b], for root r: d(r) [2,b] 1) Delete merges node of degree a-1 with node of degree a. Since b 2a-1, the resulting node has degree at most b. 2) Delete moves edge from a node of degree >a to a node of degree a-1. Also OK. 3) Root deleted: children have been merged, degree of the remaining child is a (and also b), so also OK. 23.04.2018 Chapter 3 93

Application: External (a,b)-tree (a,b)-trees well suited for large amounts of data Internal memory (RAM) size M block size B External memory (harddisk) 23.04.2018 Chapter 3 94

Overview Basic data structures Search structures (successor searching) Dictionaries (exact searching) 23.04.2018 Chapter 3 95

Dictionary 4 8 11 20 3 18 23.04.2018 Chapter 3 96

Dictionary insert(15) 4 8 11 20 15 3 18 23.04.2018 Chapter 3 97

Dictionary delete(20) 4 8 11 20 15 3 18 23.04.2018 Chapter 3 98

Dictionary lookup(8) outputs 8 4 8 11 15 3 18 23.04.2018 Chapter 3 99

lookup(7) outputs Dictionary 4 8 11 15 3 18 23.04.2018 Chapter 3 100

Dictionary Data Structure S: set of elements in data structure Every element e identified by key(e). Operations: S.insert(e: Element): S:=S {e} S.delete(k: Key): S:=S\{e}, where e is the element with key(e)=k S.lookup(k: Key): If there is an e S with key(e)=k, output e, otherwise output 23.04.2018 Chapter 3 101

Hashing 1 3 5 10 14 19 time- and space-efficient hash function h:u T 14 5 3 19 1 10 hash table T 23.04.2018 Chapter 3 102

Hashing 1 3 5 10 14 19 Task of the hash function: Good spreading of elements across T 14 5 3 19 1 10 hash table T 23.04.2018 Chapter 3 103

Hashing 1 3 5 10 14 19 No collisions of elements in T: insert, delete, lookup in O(1) time 14 5 3 19 1 10 hash table T 23.04.2018 Chapter 3 104

Hashing (no collisions) Procedure insert(e: Element) T[h(key(e))] := e Procedure delete(k: Key) if key(t[h(k)])=k then T[h(k)] := Function lookup(k: Key): Element { } return T[h(k)] 23.04.2018 Chapter 3 105

Hashing Problem: handling collisions Solutions: Closed addressing: append elements in hash table entry to a list Open addressing: linear, quadratic probing Two hash tables: Cuckoo hashing 23.04.2018 Chapter 3 106

Open Addressing Linear probing: new 1 3 5 10 14 19 Store new element x in the first free slot starting with T[i], where i=h(x.key) 14 5 3 19 1 10 23.04.2018 Chapter 3 107

Cuckoo Hashing 1 5 14 Goal: store element in one of its two positions hash function h 1 hash function h 2 1 14 5 hash table T 1 hash table T 2 23.04.2018 Chapter 3 108

Cuckoo Hashing T 1, T 2 : Array [0..m-1] of Element Procedure lookup(k: Key): Element { } if key(t 1 [h 1 (k)])=k then return T 1 [h 1 (k)] if key(t 2 [h 2 (k)])=k then return T 2 [h 2 (k)] return Procedure delete(k: Key) if key(t 1 [h 1 (k)])=k then T 1 [h 1 (k)]:= if key(t 2 [h 2 (k)])=k then T 2 [h 2 (k)]:= 23.04.2018 Chapter 3 109

Cuckoo Hashing Procedure insert(e: Element) // key(e) already in hash table? if key(t 1 [h 1 (key(e))])=key(e) then T 1 [h 1 (key(e))] := e; return if key(t 2 [h 2 (key(e))])=key(e) then T 2 [h 2 (key(e))] := e; return // no, then insert it while true do e T 1 [h 1 (key(e))] // switch e with element in T 1 if e= then return e T 2 [h 2 (key(e))] // switch e with element in T 2 if e= then return Better: at most d log n often, where the constant d is sufficiently large. If more than d log n rounds are needed, then rehash all elements with new h 1, h 2 23.04.2018 Chapter 3 110

Cuckoo Hashing 1 5 10 14 1 5 14 23.04.2018 Chapter 3 111

Cuckoo Hashing 1 5 10 14 5 1 14 Infinite loop! 23.04.2018 Chapter 3 112

Cuckoo Hashing Runtime: lookup, delete: O(1) (worst case!) insert: O(number of replacements + possibly the time for a complete rehash) Runtime of insert operation: 2 cases 1. after t rounds, insert enters an infinite loop, which requires rehash 2. insert terminates after t rounds Nevertheless, expected runtime of insert: O(1) if m 2n, where m is the hash table size. 23.04.2018 Chapter 3 113

Next Lecture Topic: Dynamic programming and Greedy algorithms 23.04.2018 Chapter 3 114