CMSC 341 Hashing. Based on slides from previous iterations of this course

Similar documents
CMSC 341 Lecture 16/17 Hashing, Parts 1 & 2

Preview. A hash function is a function that:

CMSC 341 Hashing (Continued) Based on slides from previous iterations of this course

Logistics. Homework 10 due tomorrow Review on Monday. Final on the following Friday at 3pm in CHEM 102. Come with questions

Hashing. October 19, CMPE 250 Hashing October 19, / 25

Hashing Techniques. Material based on slides by George Bebis

AAL 217: DATA STRUCTURES

Understand how to deal with collisions

5. Hashing. 5.1 General Idea. 5.2 Hash Function. 5.3 Separate Chaining. 5.4 Open Addressing. 5.5 Rehashing. 5.6 Extendible Hashing. 5.

HASH TABLES.

Algorithms with numbers (2) CISC4080, Computer Algorithms CIS, Fordham Univ.! Instructor: X. Zhang Spring 2017

Algorithms with numbers (2) CISC4080, Computer Algorithms CIS, Fordham Univ. Acknowledgement. Support for Dictionary

HashTable CISC5835, Computer Algorithms CIS, Fordham Univ. Instructor: X. Zhang Fall 2018

Lecture 16. Reading: Weiss Ch. 5 CSE 100, UCSD: LEC 16. Page 1 of 40

COSC160: Data Structures Hashing Structures. Jeremy Bolton, PhD Assistant Teaching Professor

Topic HashTable and Table ADT

Hash Tables Outline. Definition Hash functions Open hashing Closed hashing. Efficiency. collision resolution techniques. EECS 268 Programming II 1

Hash Tables. Hashing Probing Separate Chaining Hash Function

Introduction hashing: a technique used for storing and retrieving information as quickly as possible.

CS 241 Analysis of Algorithms

Hashing for searching

Tirgul 7. Hash Tables. In a hash table, we allocate an array of size m, which is much smaller than U (the set of keys).

Hash Table and Hashing

Hashing. Dr. Ronaldo Menezes Hugo Serrano. Ronaldo Menezes, Florida Tech

CSC263 Week 5. Larry Zhang.

Module 5: Hashing. CS Data Structures and Data Management. Reza Dorrigiv, Daniel Roche. School of Computer Science, University of Waterloo

Introducing Hashing. Chapter 21. Copyright 2012 by Pearson Education, Inc. All rights reserved

Hash Open Indexing. Data Structures and Algorithms CSE 373 SP 18 - KASEY CHAMPION 1

HASH TABLES. Hash Tables Page 1

CSE 332: Data Structures & Parallelism Lecture 10:Hashing. Ruth Anderson Autumn 2018

CPSC 259 admin notes

Hashing. Hashing Procedures

Hashing. 1. Introduction. 2. Direct-address tables. CmSc 250 Introduction to Algorithms

CS 310 Advanced Data Structures and Algorithms

Dictionary. Dictionary. stores key-value pairs. Find(k) Insert(k, v) Delete(k) List O(n) O(1) O(n) Sorted Array O(log n) O(n) O(n)

Acknowledgement HashTable CISC4080, Computer Algorithms CIS, Fordham Univ.

Fundamental Algorithms

Hash Tables. Hash functions Open addressing. November 24, 2017 Hassan Khosravi / Geoffrey Tien 1

CSCI 104 Hash Tables & Functions. Mark Redekopp David Kempe

Successful vs. Unsuccessful

HASH TABLES. Goal is to store elements k,v at index i = h k

CITS2200 Data Structures and Algorithms. Topic 15. Hash Tables

TABLES AND HASHING. Chapter 13

General Idea. Key could be an integer, a string, etc e.g. a name or Id that is a part of a large employee structure

Open Addressing: Linear Probing (cont.)

Hash Tables. Gunnar Gotshalks. Maps 1

1. [1 pt] What is the solution to the recurrence T(n) = 2T(n-1) + 1, T(1) = 1

Hash Tables and Hash Functions

CMSC 132: Object-Oriented Programming II. Hash Tables

Symbol Table. Symbol table is used widely in many applications. dictionary is a kind of symbol table data dictionary is database management

Introduction. hashing performs basic operations, such as insertion, better than other ADTs we ve seen so far

Hashing 1. Searching Lists

! A Hash Table is used to implement a set, ! The table uses a function that maps an. ! The function is called a hash function.

UNIT III BALANCED SEARCH TREES AND INDEXING

Fast Lookup: Hash tables

Comp 335 File Structures. Hashing

THINGS WE DID LAST TIME IN SECTION

Hash Tables. Hash functions Open addressing. March 07, 2018 Cinda Heeren / Geoffrey Tien 1

Part I Anton Gerdelan

Hashing. Yufei Tao. Department of Computer Science and Engineering Chinese University of Hong Kong

COMP171. Hashing.

Worst-case running time for RANDOMIZED-SELECT

CHAPTER 9 HASH TABLES, MAPS, AND SKIP LISTS

Hashing. Manolis Koubarakis. Data Structures and Programming Techniques

Introduction to Hashing

Data Structure Lecture#22: Searching 3 (Chapter 9) U Kang Seoul National University

Hash table basics. ate à. à à mod à 83

CS 350 : Data Structures Hash Tables

Data Structures - CSCI 102. CS102 Hash Tables. Prof. Tejada. Copyright Sheila Tejada

Hash[ string key ] ==> integer value

CS/COE 1501

Today: Finish up hashing Sorted Dictionary ADT: Binary search, divide-and-conquer Recursive function and recurrence relation

HO #13 Fall 2015 Gary Chan. Hashing (N:12)

CS 261 Data Structures

Chapter 20 Hash Tables

Hash table basics mod 83 ate. ate

Chapter 5 Hashing. Introduction. Hashing. Hashing Functions. hashing performs basic operations, such as insertion,

Cpt S 223. School of EECS, WSU

Algorithms in Systems Engineering ISE 172. Lecture 12. Dr. Ted Ralphs

Dynamic Dictionaries. Operations: create insert find remove max/ min write out in sorted order. Only defined for object classes that are Comparable

CSCI 104. Rafael Ferreira da Silva. Slides adapted from: Mark Redekopp and David Kempe

2 Fundamentals of data structures

Data Structures and Algorithms. Chapter 7. Hashing

CSE 332 Winter 2015: Midterm Exam (closed book, closed notes, no calculators)

Hash Tables. CS 311 Data Structures and Algorithms Lecture Slides. Wednesday, April 22, Glenn G. Chappell

Hash table basics mod 83 ate. ate. hashcode()

Hash Tables. CS 321 Spring 2015

CSE100. Advanced Data Structures. Lecture 21. (Based on Paul Kube course materials)

Hash table basics mod 83 ate. ate

CS1020 Data Structures and Algorithms I Lecture Note #15. Hashing. For efficient look-up in a table

Chapter 27 Hashing. Objectives

CSE373: Data Structures & Algorithms Lecture 17: Hash Collisions. Kevin Quinn Fall 2015

csci 210: Data Structures Maps and Hash Tables

BINARY HEAP cs2420 Introduction to Algorithms and Data Structures Spring 2015

9/24/ Hash functions

Data Structures And Algorithms

Unit #5: Hash Functions and the Pigeonhole Principle

Hash Tables. Johns Hopkins Department of Computer Science Course : Data Structures, Professor: Greg Hager

Lecture 6: Hashing Steven Skiena

Hash Table. A hash function h maps keys of a given type into integers in a fixed interval [0,m-1]

Transcription:

CMSC 341 Hashing Based on slides from previous iterations of this course

Hashing

Searching n Consider the problem of searching an array for a given value q If the array is not sorted, the search requires O(n) time n n If the value isn t there, we need to search all n elements If the value is there, we search n/2 elements on average q If the array is sorted, we can do a binary search n n A binary search requires O(log n) time About equally fast whether the element is found or not q It doesn t seem like we could do much better n n How about an O(1), that is, constant time search? We can do it if the array is organized in a particular way

The Basic Problem n We have lots of data to store. n We desire efficient O( 1 ) performance for insertion, deletion and searching. n Too much (wasted) memory is required if we use an array indexed by the data s key. n The solution is a hash table.

Introduction If we wanted to find one person out of the possible 322,071,600 in the US, how would we do it? With no additional information, we may have to search through all 322M people! From: http://factfinder.census.gov/faces/tableservices/jsf/pages/productview.xhtml?src=bkmk UMBC CMSC 341 Hashing

Introduction However, if we were to organize each of the people by the 50 states, we may greatly increase the speed to find them. UMBC CMSC 341 Hashing

Introduction Now, we know that the populations of the states are not evenly distributed When our n = 322,071,600 we would expect 322,071,600 / 50 = 6,441,432 in each state UMBC CMSC 341 Hashing

Introduction But, the important concept here is as long as we know which state to look in, we can greatly reduce the data set to look in! Hashes take advantage of organizing the data into buckets (or slots) to help make the functions more efficient UMBC CMSC 341 Hashing

Hash Tables A hash table is a data structure for storing key-value pairs Unlike a basic array, which uses index numbers for accessing elements, a hash table uses keys to look up table entries Two major components to a hash: Bucket array (or slot) Hash function UMBC CMSC 341 Hashing

Hash Table 0 1 2 m-1 n Basic Idea q The hash table is a bucket array of size m q The storage index for an item determined by a hash function h(k): U {0, 1,, m-1} n Desired Properties of h(k) q easy to compute q uniform distribution of keys over {0, 1,, m-1}

Bucket Array A bucket array for a hash table is an array A of size N, where each cell of A is thought of as a bucket Obviously, we can also implement this using an array of linked lists as well UMBC CMSC 341 Hashing

Hash Functions What if we had a magic function that, given a value to search for, would tell us exactly where in the array to look? If it s in that location, it s in the array If it s not in that location, it s not in the array This function would have no other purpose If we look at the function s inputs and outputs, they probably won t make sense This function is called a hash function because it makes hash of its inputs UMBC CMSC 341 Hashing

Hash Function The hash function is used to transform the key into the index (the hash) of an array element (the slot or bucket) where the corresponding value is to be sought A hash function takes in an item key as its parameter and returns an index location for that particular item UMBC CMSC 341 Hashing

Example n Dictionary Student Records q Keys are ID numbers (951000-952000), no more than 100 students q Hash function: h(k) = k-951000 maps ID into distinct table positions 0-1000 q array table[1001] hash table... 0 1 2 3 1000 buckets

Analysis (Ideal Case) n O(b) time to initialize hash table (b number of positions or buckets in hash table) n O(1) time to perform insert, remove, search

Ideal Case is Unrealistic n Many applications have key ranges that are too large to have 1-1 mapping between buckets and keys! Example: n Suppose key can take on values from 0.. 65,535 n n Expect 1,000 records at any given time Impractical to use hash table with 65,536 slots!

Hash Function Generally uses modulo arithmetic A key value is divided by the table length to generate an index number in the table This index number refers to a location, or bucket, in the hash table From: http://pumpkinprogrammer.com/2014/06/21/c-tutorial-intro-to-hash-tables/ UMBC CMSC 341 Hashing

Hash Tables vs. Other Data Structures Implementations of the dictionary operations Insert(), Delete() and Search()/Find() Arrays: Can accomplish in O(1) time But are not space efficient (assumes we leave empty space for keys not currently in dictionary) Binary search trees Can accomplish in O(log n) time Are space efficient. Hash Tables: A generalization of an array that under reasonable assumptions is O(1) for Insert/Delete/Search of a key UMBC CMSC 341 Hashing

Different Implementations As with almost all of the data structures that we have discussed so far, there are a variety of ways to implement them Let s start by looking at some real world examples to help illustrate the data structure as well as some possible issues UMBC CMSC 341 Hashing

Hash Function: Example 1 ASCII Values UMBC CMSC 341 Hashing

Hash Function Example 1 Suppose our hash function Takes in a string as its parameter It adds up the ASCII values of all of the characters in that string to get an integer The performs modulo math with the table size int hash( string key ) { int value = 0; for ( int i = 0; i < key.length(); i++ ) value += key[i]; return value % tablelength; } From: http://pumpkinprogrammer.com/2014/06/21/c-tutorial-intro-to-hash-tables/ UMBC CMSC 341 Hashing

Hash Function Example 1 If the key is pumpkin, then the sum of the ASCII values would be 772 For a table of size 13, the modulus of this number gives us an index of 5 So the item with the key pumpkin, would go into bucket # 5 in the hash table From: http://pumpkinprogrammer.com/2014/06/21/c-tutorial-intro-to-hash-tables/ UMBC CMSC 341 Hashing Char Dec p 112 u 117 m 109 p 112 k 107 i 105 n 110

Bad Hash Function This isn t a very good hash function why? Words tend to use certain letters more often than other Words tend to be rather short With a large table size, we wouldn t necessarily use the full length But it illustrates one way that we could implement a hash function UMBC CMSC 341 Hashing

Hash Function Example 2 UMBC CMSC 341 Hashing

Hash Function Example 2 Suppose our hash function gave us the following values: hashcode("apple") = 5 hashcode("watermelon") = 3 hashcode("grapes") = 8 hashcode("cantaloupe") = 7 hashcode("kiwi") = 0 hashcode("strawberry") = 9 hashcode("mango") = 6 hashcode("banana") = 2 0 1 2 3 4 5 6 7 8 9

Hash Function Example 2 Suppose our hash function gave us the following values: hashcode("apple") = 5 hashcode("watermelon") = 3 hashcode("grapes") = 8 hashcode("cantaloupe") = 7 hashcode("kiwi") = 0 hashcode("strawberry") = 9 hashcode("mango") = 6 hashcode("banana") = 2 0 kiwi 1 2 banana 3 watermelon 4 5 apple 6 mango 7 cantaloupe 8 grapes 9 strawberry Now, this is an IDEAL situation because the results put each in their own spot!

Hash Function Example 2 What happens if we add honeydew? hashcode("apple") = 5 hashcode("watermelon") = 3 hashcode("grapes") = 8 hashcode("cantaloupe") = 7 hashcode("kiwi") = 0 hashcode("strawberry") = 9 hashcode("mango") = 6 hashcode("banana") = 2 hash("honeydew") = 6 0 kiwi 1 2 banana 3 watermelon 4 5 apple 6 mango 7 cantaloupe 8 grapes 9 strawberry What happens now?

Hash Example Using SSN A social security application keeping track of people where the primary search key is a person s social security number (SSN) You can use an array to hold references to all the person objects Use an array with range 0-999,999,999 Using the SSN as a key, you have O(1) access to any person object

Hash Example Using SSN Unfortunately, the number of active keys (Social Security Numbers) is much less than the array size (1 billion entries) Est. US population, November 2015: 322,071,600 Over 60% of the array would be unused

Example 3 Hash Functions

Hash Function Example 3 We have a small group of people who wish to join a club (say about 40 folks). Then, if each of these people have an ID# associated with them (from 1 to 40) we could store their information in an array and access it using the ID# as the array index.

Hash Function Example 3 Now, we have 7 of these clubs, with consecutive ID#s going up to 280. Now what? We COULD create a 280 element array for each club and use 40 elements of the array. (wasteful?) We COULD create a 40 element array and calculate the index of each person using a mapping. (index = ID# % 40).

Hash Function Example 3 Now, imagine that we are hosting a club on campus open to all students. We could use the PC ID# (8 digits long). How big should our array be? THINGS TO CONSIDER: How many students do we expect to join? How can we create a key based on this number?

Hash Function Example 3 If we expect no more than 100 club members, we can use the last two digits of the PC ID# as our index (aka KEY). Do we see any problems with this? How do we get this number? Take the remainder (PC ID# % 100)

Hash Functions Taking the remainder is called the Divisionremainder technique (MOD) and is an example of a uniform hash function A uniform hash function is designed to distribute the keys roughly evenly into the available positions within the array (or hash table)

Collisions

Collisions If no two values are able to map into the same position in the hash table, we have what is known as an ideal hashing. Usually, ideal hashing is not possible (or at least not guaranteed). Some data is bound to hash to the same table element, in which case, we have a collision How do we solve this problem?

Collisions Ideally the hash function should map each possible key to a different slot index; but this goal is rarely achievable in practice. Most hash table designs assume that hash collisions pairs of different keys with the same hash values are normal occurrences, and accommodate them in some way.

Collisions We can think of each table location as a bucket that contains several slots. Each slot is filled with one piece of data. This approach involves chaining the data. Thankfully, we can create an array of arrays or an array of linked lists as a way to help deal with collisions.

Collisions This is a common approach when the hash table is used as disk storage. For each element of the table, a linked list is maintained to hold data that map to the same location. Do we want to sort items upon entering them into the list? Unsorted: easier to enter Sorted: easier to retrieve UMBC CMSC 341 Hashing

Collisions n If key range too large, use hash table with fewer buckets and a hash function which maps multiple keys to same bucket: h(k 1 ) = β = h(k 2 ): k 1 and k 2 have collision at slot β n Popular hash functions: hashing by division h(k) = k%d, where D number of buckets in hash table

Collision n Example: hash table with 11 buckets h(k) = k%11 80 3 (80%11= 3) 40 7 65 10 58 3 collision!

Division Method n The hash function: h( k ) = k mod m where m is the table size. n m must be chosen to spread keys evenly q Poor choice: m = a power of 10 q Poor choice: m = 2 b, b> 1 n A good choice of m is a prime number.

Multiplication Method n n The hash function: h( k ) = m( ka mod1) where 0< A < 1 A very good choice of A is the inverse of the golden ratio. A = (sqrt(5) - 1)/2 n An advantage of the multiplication method is that the value of m is not critical. n Given two positive numbers x and y, the ratio x/y is the golden ratio if φ = x/y = (x+y)/x n The golden ratio: x 2 - xy - y 2 = 0 φ 2 - φ - 1 = 0 φ = (1 + sqrt(5))/2 = 1.618033989 ~= Fib i /Fib i-1

Multiplication Method (cont.) n n Because of the relationship of the golden ratio to Fibonacci numbers, this particular value of A in the multiplication method is called Fibonacci hashing. Some values of h( k ) = m(k φ -1 - k φ -1 ) = 0 for k = 0 = 0.618m for k = 1 (φ -1 = 1/ 1.618 = 0.618 ) = 0.236m for k = 2 = 0.854m for k = 3 = 0.472m for k = 4 = 0.090m for k = 5 = 0.708m for k = 6 = 0.326m for k = 7 = = 0.777m for k = 32

Finding the Optimal Hash Function When a collision occurs, there are a variety of ways that we can address the collision In a perfect world, we could come up with a magic function that helps us deal with collisions

Finding the Optimal Hash Function How can we come up with this magic function? In general, we cannot--there is no such magic function In a few specific cases, where all the possible values are known in advance, it has been possible to compute a perfect hash function What is the next best thing? A perfect hash would tell us exactly where to look In general, the best we can do is a function that tells us where to start looking!

Collision Resolution Policies n Two classes: q (1) Open hashing, a.k.a. separate chaining q (2) Closed hashing, a.k.a. open addressing n Difference has to do with whether collisions are stored outside the table (open hashing) or whether collisions result in storing one of the records at another slot in the table (closed hashing)

Hash Function Methods

Hash Functions As we have mentioned, there are a variety of ways to implement hash functions. We will discuss: 1. Chaining This is where we put additional information into a bucket 2. Linear Probing 3. Quadratic Probing

Linear Probing Have you ever been to a theatre or sports event where the tickets were numbered? Has someone ever sat in your seat? How did you resolve this problem?

Linear Probing Linear Probing involves seeing an item in the hashed location and then moving by 1 through the array (circling to the beginning if necessary) until an open location is found.

Linear Probing Let s say that we have 1000 numbered tickets to an event, but only sell 400. If we move the event to a smaller venue, we must also renumber the tickets. The hash function would work like this: (ticket number) % 400. How many folks can get the same hashed number? (3 - for example, tickets 42, 442, and 842)

Linear Probing The idea is that even though these number hash to the same location, they need to be given a slot based on their hash number index. Using linear probing, the entries are placed into the next available position.

Linear Probing n n n n Associated with closed hashing is a rehash strategy: If we try to place x in bucket h(x) and find it occupied, find alternative location h 1 (x), h 2 (x), etc. Try each in order, if none empty table is full, h(x) is called home bucket Simplest rehash strategy is called linear hashing h i (x) = (h(x) + i) % D In general, our collision resolution strategy is to generate a sequence of hash table slots (probe sequence) that can hold the record; test each slot until find empty one (probing)

Linear Probing Consider the data with keys: 24, 42, 34,62,73 into a table of size 10. These entries can be placed into the table at the following locations:

Linear Probing 24 % 10 = 4. Position is free. 24 placed into element 4 42 % 10 = 2. Position is free. 42 placed into element 2 34 % 10 = 4. Position is occupied. Try next place in the table (5). 34 placed into position 5. 62 % 10 = 2. Position is occupied. Try next place in the table (3). 62 placed into position 3. 73 % 10 = 3. Position is occupied. Try next place in the table (4). Same problem. Try (5). Then (6). 73 is placed into position 6.

Linear Probing How would it look if the numbers were: 28, 19, 59, 68, 89??

Finding and Deleting Finding? Given a key, look it up with the hashing function and then if it s not there, keep looking one bucket down until it is or is not found. Search until you find an empty slot or search the whole array. Deleting? We must be more careful. Having found the element, we can t just remove it. Why? Removing an element from the hash table would cause the table to need reordering so that we wouldn t lose other data (What if we needed element 73 but element 62 had been removed? Would we ever find it?) Use lazy deletion (Mark an element as deleted instead of erasing it)

Primary Clustering Sometimes, data will cluster this is caused when many elements hash to the same (or similar) location and linear probing has been used often. We can help with this problem by choosing our divisor carefully in our hash function and by carefully choosing our table size.

Designing a Good Hash Function If the divisor is even and there are more even than odd key values, the hash function will produce an excess of even values. This is also true if there are an excessive amount of odd values. However, if the divisor is odd, then either kind of excess of key values would still give a balanced distribution of odd/even results. Thus, the divisor should be odd. But, this is not enough.

Designing a Good Hash Function Thus, the divisor should be odd. But, this is not enough. If the divisor itself is divisible by a small odd number (like 3, 5, or 7) the results are unbalanced again Ideally, it should be a prime number (close to m). If no such prime number works for our table size (the divisor, remember?), we should use an odd number with no small factors.

Problems of Linear Probing The majority of the problems are caused by clustering. These problems can be helped by using Quadratic probing or better double hashing instead. We ll cover this next time!

Announcements Homework 5 Due Thursday, November 9th at 8:59:59 PM Exam 2 is Tuesday, November 21st Next Time: More on Hashing UMBC CMSC 341 Hashing