Fall 2007CS 225 Sets and Maps Chapter 7. Fall 2007CS 225 Chapter Objectives To understand the Java Map and Set interfaces and how to use them To learn.

Slides:



Advertisements
Similar presentations
1 Designing Hash Tables Sections 5.3, 5.4, Designing a hash table 1.Hash function: establishing a key with an indexed location in a hash table.
Advertisements

Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved Hash Tables,
Hash Tables and Sets Lecture 3. Sets A set is simply a collection of elements Unlike lists, elements are not ordered Very abstract, general concept with.
CSE 1302 Lecture 23 Hashing and Hash Tables Richard Gesick.
Data Structures Using C++ 2E
Hashing as a Dictionary Implementation
Appendix I Hashing. Chapter Scope Hashing, conceptually Using hashes to solve problems Hash implementations Java Foundations, 3rd Edition, Lewis/DePasquale/Chase21.
© 2004 Goodrich, Tamassia Hash Tables1  
Hashing Chapters What is Hashing? A technique that determines an index or location for storage of an item in a data structure The hash function.
SETS AND MAPS Chapter 7 Common final examinations When: Thursday, 12/12, 3:30-5:30 PM Where: Ritter Hall - Walk Auditorium 131.
Lecture Objectives To learn about hash coding and its use to facilitate efficient search and retrieval To study two forms of hash tables—open addressing.
Hashing21 Hashing II: The leftovers. hashing22 Hash functions Choice of hash function can be important factor in reducing the likelihood of collisions.
Using arrays – Example 2: names as keys How do we map strings to integers? One way is to convert each letter to a number, either by mapping them to 0-25.
Sets and Maps ITEC200 – Week Chapter Objectives To understand the Java Map and Set interfaces and how to use them To learn.
Fall 2007CS 225 Sets and Maps Chapter 9. Fall 2007CS 225 Chapter Objectives To understand the Java Map and Set interfaces and how to use them To learn.
1 Chapter 9 Maps and Dictionaries. 2 A basic problem We have to store some records and perform the following: add new record add new record delete record.
Sets and Maps Chapter 9. Chapter 9: Sets and Maps2 Chapter Objectives To understand the Java Map and Set interfaces and how to use them To learn about.
Hash Tables1 Part E Hash Tables  
Sets and Maps (and Hashing)
Hash Tables1 Part E Hash Tables  
Hashing General idea: Get a large array
Data Structures Using C++ 2E Chapter 9 Searching and Hashing Algorithms.
Dictionaries 4/17/2017 3:23 PM Hash Tables  
Introducing Hashing Chapter 21 Copyright ©2012 by Pearson Education, Inc. All rights reserved.
Maps A map is an object that maps keys to values Each key can map to at most one value, and a map cannot contain duplicate keys KeyValue Map Examples Dictionaries:
CS2110 Recitation Week 8. Hashing Hashing: An implementation of a set. It provides O(1) expected time for set operations Set operations Make the set empty.
(c) University of Washingtonhashing-1 CSC 143 Java Hashing Set Implementation via Hashing.
CS212: DATA STRUCTURES Lecture 10:Hashing 1. Outline 2  Map Abstract Data type  Map Abstract Data type methods  What is hash  Hash tables  Bucket.
Hashing Table Professor Sin-Min Lee Department of Computer Science.
Hashing Chapter 20. Hash Table A hash table is a data structure that allows fast find, insert, and delete operations (most of the time). The simplest.
TECH Computer Science Dynamic Sets and Searching Analysis Technique  Amortized Analysis // average cost of each operation in the worst case Dynamic Sets.
Hash Tables1   © 2010 Goodrich, Tamassia.
Comp 335 File Structures Hashing.
Hashing Sections 10.2 – 10.3 CS 302 Dr. George Bebis.
1 5. Abstract Data Structures & Algorithms 5.2 Static Data Structures.
Can’t provide fast insertion/removal and fast lookup at the same time Vectors, Linked Lists, Stack, Queues, Deques 4 Data Structures - CSCI 102 Copyright.
Hashing Hashing is another method for sorting and searching data.
© 2004 Goodrich, Tamassia Hash Tables1  
Hashing as a Dictionary Implementation Chapter 19.
CSC 427: Data Structures and Algorithm Analysis
Hashing - 2 Designing Hash Tables Sections 5.3, 5.4, 5.4, 5.6.
Chapter 12 Hash Table. ● So far, the best worst-case time for searching is O(log n). ● Hash tables  average search time of O(1).  worst case search.
1 Hashing - Introduction Dictionary = a dynamic set that supports the operations INSERT, DELETE, SEARCH Dictionary = a dynamic set that supports the operations.
Chapter 11 Hash Tables © John Urrutia 2014, All Rights Reserved1.
1 CSC 427: Data Structures and Algorithm Analysis Fall 2011 Space vs. time  space/time tradeoffs  hashing  hash table, hash function  linear probing.
COSC 2007 Data Structures II Chapter 13 Advanced Implementation of Tables IV.
Building Java Programs Bonus Slides Hashing. 2 Recall: ADTs (11.1) abstract data type (ADT): A specification of a collection of data and the operations.
CS261 Data Structures Hash Tables Open Address Hashing.
Hashtables. An Abstract data type that supports the following operations: –Insert –Find –Remove Search trees can be used for the same operations but require.
Hash Tables © Rick Mercer.  Outline  Discuss what a hash method does  translates a string key into an integer  Discuss a few strategies for implementing.
Chapter 13 C Advanced Implementations of Tables – Hash Tables.
1 Data Structures CSCI 132, Spring 2014 Lecture 33 Hash Tables.
Java Methods A & AB Object-Oriented Programming and Data Structures Maria Litvin ● Gary Litvin Copyright © 2006 by Maria Litvin, Gary Litvin, and Skylight.
Sets and Maps Chapter 9. Chapter Objectives  To understand the Java Map and Set interfaces and how to use them  To learn about hash coding and its use.
Lecture Objectives  To learn about hash coding and its use to facilitate efficient search and retrieval  To study two forms of hash tables—open addressing.
Building Java Programs Generics, hashing reading: 18.1.
Sets and Maps Chapter 9.
Sections 10.5 – 10.6 Hashing.
Slides by Steve Armstrong LeTourneau University Longview, TX
Hashing Alexandra Stefan.
Data Structures Using C++ 2E
Efficiency add remove find unsorted array O(1) O(n) sorted array
Building Java Programs
Sets and Maps Chapter 7.
CS202 - Fundamental Structures of Computer Science II
Sets and Maps Chapter 9.
Dictionaries 4/5/2019 1:49 AM Hash Tables  
CS210- Lecture 16 July 11, 2005 Agenda Maps and Dictionaries Map ADT
Sets and Maps Chapter 7 CS 225.
Presentation transcript:

Fall 2007CS 225 Sets and Maps Chapter 7

Fall 2007CS 225 Chapter Objectives To understand the Java Map and Set interfaces and how to use them To learn about hash coding and its use to facilitate efficient search and retrieval To study two forms of hash tables—open addressing and chaining—and to understand their relative benefits and performance tradeoffs

Fall 2007CS 225 Chapter Objectives To learn how to implement both hash table forms To be introduced to the implementation of Maps and Sets To see how two earlier applications can be more easily implemented using Map objects for data storage

Fall 2007CS 225 The Set Abstraction A set is a collection that contains no duplicate elements Operations on sets include: –Testing for membership –Adding elements –Removing elements –Union –Intersection –Difference –Subset

Fall 2007CS 225 Sets and the Set Interface The part of the Collection hierarchy that relates to sets includes three interfaces, two abstract classes, and two actual classes

Fall 2007CS 225 Methods of the Set Interface Has required methods for testing set membership, testing for an empty set, determining set size, and creating an iterator over the set Two optional methods for adding an element and removing an element Constructors enforce the no duplicate members criterion Add method does not allow duplicate items to be inserted

Fall 2007CS 225 The Set Interface (Set ) cardinalityint size() set intersection, optionalboolean retainAll(Collection ) set difference, optionalboolean removeAll(Collection ) optionalboolean remove( Object) Iterator iterator() boolean isEmpty() subset testboolean containsAll(Collection ) set membershipboolean contains( E) set union, optionalboolean addAll( Collection ) false if o already present, optionalboolean add( E o) BehaviorMethod

Fall 2007CS 225 Maps and the Map Interface The Map is related to the Set Mathematically, a Map is a set of ordered pairs whose elements are known as the key and the value Keys are required to be unique, but values are not necessarily unique You can think of each key as a “mapping” to a particular value A map can be used to enable efficient storage and retrieval of information in a table

Fall 2007CS 225 The Map Interface (Map ) int size() returns value associated with key or null V remove( Object key) returns previous value or null if not present V put( K key, V value) boolean isEmpty() returns object with given key or null if not present V get( Object key) BehaviorMethod

Fall 2007CS 225 Hash Tables The goal behind the hash table is to be able to access an entry based on its key value, not its location We want to be able to access an element directly through its key value, rather than having to determine its location first by searching for the key value in the array Using a hash table enables us to retrieve an item in constant time (on average) with a linear (worst case) behavior

Fall 2007CS 225 Hash Codes and Index Calculation The basis of hashing is to transform the item’s key value into an integer value which will then be transformed into a table index

Fall 2007CS 225 Example Getting letter frequencies to generate Huffman codes For text-only documents, use the ascii code of a character as its key value table size of 128 isn't too big If you need the unicode value, the table would get too large. (65,536) Not all characters will occur Use smaller table and use mod operation to compute the index from the unicode value

Fall 2007CS 225 Methods for Generating Hash Codes In most applications, the keys will consist of strings of letters or digits rather than a single character The number of possible key values is much larger than the table size Generating good hash codes is somewhat of an experimental process Besides a random distribution of its values, the hash function should be relatively simple and efficient to compute

Fall 2007CS 225 Hash Codes for Strings For strings, simply summing the int values of all characters will return the same hash code for sign and sing The Java API algorithm accounts for position of the characters as well

Fall 2007CS 225 String hashCode Method The String.hashCode() returns the integer calculated by the formula: s 0 x 31 (n-1) + s 1 x 31 (n-2) + … + s n-1 where s i is the ith character of the string, and n is the length of the string “Cat” will have a hash code of:‘C’ x ‘a’ x 31 + ‘t’ 31 is a prime number that generates relatively few collisons

Fall 2007CS 225 Handling Collisions A collision happens when two distinct entries in the hash table have the same hash value Consider two ways to handle collisions –Open addressing each element of the hash table has a single entry –Chaining each element of the hash table points to a list (possibly empty) of entries

Fall 2007CS 225 Open Addressing Linear probing can be used to access an item in a hash table –If that element contains an item with a different key, increment the index by one –Keep incrementing until you find the key or a null entry

Fall 2007CS 225 Algorithm for Open Addressing Compute index using hashCode % table.length if table[index] is null add item at position index else if table[index] equals item being added item is already in the table else while table[index] not null increment index add item at new value of index

Fall 2007CS 225 Search Termination As you increment the table index, your table should wrap around as in a circular array –This leads to the possibility of an infinite loop How do you know when to stop searching if the table is full and you have not found the correct value? –Stop when the index value for the next probe is the same as the hash code value for the object –Ensure that the table is never full by increasing its size after an insertion if its occupancy rate exceeds a specified threshold

Fall 2007CS 225 Name hashCode () hashCode% 5 hashCode()% 11 "Tom " "Dick " "Harr y" "Sam " "Pete"

Fall 2007CS 225 Traversing a hash table You can visit all elements in a hash table by getting each element of the array in turn The sequence of values that results is arbitrary For previous example size = 5 "Dick", "Sam", "Pete", "Harry", "Tom" size = 11 "Tom", "Dick", "Sam", "Pete", "Harry"

Fall 2007CS 225 Deleting from a Hash Table When an item is deleted, you cannot just set its table entry to null –Any element with the same hash code that was inserted into the table later will not be found –Store a dummy value instead –Deleted items waste storage space and reduce search efficiency

Fall 2007CS 225 Hash Table Considerations Using a prime number for the size of the table tends to reduce collisions Load factor is ratio of filled elements to total elements load factor = actual elements / size A larger load factor will result in increased collisions Don't allow the table get too full Specify a maximum load factor If table gets too full, rehash Allocate a new table with twice the capacits Get each element from the old table, compute its index in new table and insert Don't insert deleted items

Fall 2007CS 225 Clustering Example Consider a hash table of size 11 Add elements with hash codes 5, 6, 5, 6, 7 in that order 5(1) 6(1) 5(2) 6(2) 7(1)

Fall 2007CS 225 Reducing Collisions Using Quadratic Probing Linear probing tends to form clusters of keys in the table, causing longer search chains Quadratic probing can reduce the effect of clustering –Increments form a quadratic series –Disadvantage is that the next index calculation is time consuming as it involves multiplication, addition, and modulo division –Not all table elements are examined when looking for an insertion index

Fall 2007CS 225 Clustering Example Consider a hash table of size 11 Add elements with hash codes 5, 6, 5, 6, 7 in that order using quadratic probing There is less overlap in the search chains 5 -> 6 -> 9 -> > 7 -> 10 -> 15 5(1) 6(1) 6(2) 7(1) 5(2)

Fall 2007CS 225 Hashing with Chaining Chaining is an alternative to open addressing Each table element references a linked list that contains all of the items that hash to the same table index –The linked list is often called a bucket –The approach sometimes called bucket hashing Only items that have the same value for their hash codes will be examined when looking for an object

Fall 2007CS 225 Chaining Illustrated

Fall 2007CS 225 Performance of Hash Tables Load factor is the number of filled cells divided by the table size Load factor has the greatest effect on hash table performance The lower the load factor, the better the performance as there is a lesser chance of collision when a table is sparsely populated

Fall 2007CS 225 Performance of Hash Tables

Fall 2007CS 225 Implementing a Hash Table Use interface KWHashMap and implement the interface using both open hashing and chaining. MethodBehavior V get( K key)returns value associated with key or null boolean isEmpty() V put( K key, V value) Inserts or replaces object associated with key V remove( K key) Removes mapping for key; returns value or null int size()

Fall 2007CS 225 Entry class Create an inner class to store key-value pairs Data fields private Object key private Object value Constructor public Entry( Object key, Object value) Methods public Object getKey() public Object getValue(); public Object setValue();

Fall 2007CS 225 Open Hash Table Data Fields private Entry table[] private static final int START_CAPACITY private double LOAD_THRESHOLD private int numKeys private int numDeletes private static final Entry DELETED Private Methods private int find( Object key) private void rehash()

Fall 2007CS 225 find Algorithm for Open Hash Table 1.set index to key.hashCode() % table.length 2.if index < 0 add table.length 3.while table[index] not empty and != key 4. increment index 5. if index >= table.length 6. index = 0 7.return index

Fall 2007CS 225 get Algorithm for Open Hash Table 1.find table element for key 2.if table element contains key 3. return value at this element 4.else 5. return null

Fall 2007CS 225 put Algorithm for Open Hash Table 1.find table element for key 2.if table element is empty 3. insert new item 4. increment numKeys 5. rehash if needed 6. return null 7.else 8. save old value of element 9. replace value with new value 10. return old value

Fall 2007CS 225 Removing from Open Hash Table 1.find table element for key 2.if element is empty 3. return null 4.else 5. save value of element 6. replace element with DELETED 7. increment numDeletes 8. decrement numKeys 9. return saved value

Fall 2007CS 225 Rehashing 1.Alocate a new table with twice as many elements 2.set numKeys to 0 3.set numDeletes to 0 4.add each undeleted element of original table to new table

Fall 2007CS 225 Chained Hash Table Data Fields private LinkedList table[] private static final int CAPACITY private static final int LOAD_THRESHOLD Rehash when numKeys=3*CAPACITY

Fall 2007CS 225 get Algorithm for Chained Hash Table 1.set index to key.hashCode % table.length 2.if index < 0 3. add table.length 4.if table[index] is empty 5. return null 6.for each element in list at table[index] 7. if element key = search key 8. return element's value 9.return null (key not found)

Fall 2007CS 225 put Algorithm for Chained Hash Table 1.set index to key.hashCode % table.length 2.if index < 0 add table.length 3.if table[index] is empty 4. create a new linked list at table[index] 5.Search list at table[index] for key 6.if successful 7. replace value and return old value 8.else 9. insert new key-value pair into list 10. increment numKeys 11. rehash if needed 12. return null

Fall 2007CS 225 Removing from Chained Hash Table 1.set index to key.hashCode % table.length 2.if index < 0 add table.length 3.if table[index] is empty 4. return null 5.Search list at table[index] for key 6.if successful 7. remove value and decrement numKeys 8. if list at table[index] is empty 9. table[index] -> null 10. return value associated with key 11.return null

Fall 2007CS 225 Implementation Considerations for Maps and Sets Class Object implements methods hashCode and equals, so every class can access these methods unless it overrides them –Object.equals compares two objects based on their addresses, not their contents –Object.hashCode calculates an object’s hash code based on its address, not its contents Java recommends that if you override the equals method, then you should also override the hashCode method

Fall 2007CS 225 Implementing HashSetOpen HashSetOpen is similar to a hash table Methods have slightly different signatures HashSetOpen is an adapter class with an internal HashTableOpen Map MethodSet Method Object get( Object key)boolean contains( Object key) Object put(Object key, Object value)boolean add( Object key) Object remove( Object key)boolean remove( Object key)

Fall 2007CS 225 Implementing the Java Map and Set Interfaces The Java API uses a hash table to implement both the Map and Set interfaces The task of implementing the two interfaces is simplified by the inclusion of abstract classes AbstractMap and AbstractSet in the Collection hierarchy

Fall 2007CS 225 Nested Interface Map.Entry One requirement on the key-value pairs for a Map object is that they implement the interface Map.Entry, which is an inner interface of interface Map –An implementer of the Map interface must contain an inner class that provides code for the methods Object getKey() Object getValue() Object setValue( Object value)

Fall 2007CS 225 Additional Applications of Maps Can implement the phone directory using a map PhoneDirectory Interface Map Interface addOrChangeEntryput lookUpEntryget removeEntryremove loadDatanone savenone

Fall 2007CS 225 Additional Applications of Maps Huffman Coding Problem –Use a map for creating an array of elements and replacing each input character by its bit string code in the output file –Frequency table The key will be the input character The value is the character code string

Fall 2007CS 225 Chapter Review The Set interface describes an abstract data type that supports the same operations as a mathematical set The Map interface describes an abstract data type that enables a user to access information corresponding to a specified key A hash table uses hashing to transform an item’s key into a table index so that insertions, retrievals, and deletions can be performed in expected O(1) time

Fall 2007CS 225 Chapter Review A collision occurs when two keys map to the same table index In open addressing, linear probing is often used to resolve collisions The best way to avoid collisions is to keep the table load factor relatively low by rehashing when the load factor reaches a value such as 0.75

Fall 2007CS 225 Chapter Review In open addressing, you can’t remove an element from the table when you delete it, but you must mark it as deleted A set view of a hash table can be obtained through method entrySet Two Java API implementations of the Map (Set) interface are HashMap (HashSet) and TreeMap (TreeSet)