460 likes | 629 Vues
This lecture covers the essential comparison between Maps and Dictionaries in programming, emphasizing their functionalities, when to use each, and their limitations. We explore the structure of these Abstract Data Types (ADTs), focusing on their common features and major differences, including the implications on method changes and performance. Additionally, we investigate various implementations of Dictionaries and Maps, and when to choose one over the other based on specific requirements in programming.
E N D
CSC 213 – Large Scale Programming Lecture 13:Dictionary
Today’s Goal • Final review of why, when, & how of Maps • Limits of Map ADT & its impact also considered • Compare and contrast Dictionary & Map • Discuss common features found in both ADTs • Consider what are major differences between two • Changes to methods resulting from these differences • Examine 2 ways Dictionary implemented • Effect on performance of each implementation • Based on this, when & why use one of these approach
Map-Based Bartender No problem. I’ll have aManhattan ¾ oz sweet vermouth2½ oz bourbon 1 dash bitters1 maraschino cherry1 twist orange peel
Map-Based Bartender That’ll be $2 billion I’ll have aManhattan
Map-Based Bartender I’ll have aManhattan key value
What is a Map? • At simplest level, Map is collection of Entrys • Focus on searching data (or so it appears) • put() adds Entry so key is mapped to value • get() returns valueassociated with key • remove() used to delete an Entry • At most one value per key using a Map
Where Maps are Used • Mapgreat when want only one value for a key • Credit card number goes to one account • One person has a given social security number • One definition per word in the dictionary
Where Maps are Used • Mapgreat when want only one value for a key • Credit card number goes to one account • One person has a given social security number • One definition per word in the dictionary
Limitations of Map • May want to associate multiple values per key • Map key to Sequence of valuespossible solution • But this means Map’s user must handle complexity
Limitations of Map • May want to associate multiple values per key • Map key to Sequence of valuespossible solution • But this means Map’s user must handle complexity
Dictionary-based Bartender No problem. I’ll have aManhattan key value
Dictionary-based Bartender Not that Manhattan Sorry. key value
Dictionary-based Bartender Not that Manhattan Sorry. How about… key anothervalue
Dictionary-based Bartender That’ll be $2 billion Mmmmm... Manhattan key not a anothervalue
Dictionary ADT • Dictionary ADT very similar to Map • Hold searchable data in each of these ADTs • Both data structures are collections of Entrys • Convert key to valueusing either concept • Dictionary can have multiple values to one key • 1 value for key is still legal option
Dictionary ADT • Dictionary ADT very similar to Map • Hold searchable data in each of these ADTs • Both data structures are collections of Entrys • Convert key to valueusing either concept • Dictionary can have multiple values to one key • 1 value for key is still legal option “awesome”
Dictionary ADT • Dictionary ADT very similar to Map • Hold searchable data in each of these ADTs • Both data structures are collections of Entrys • Convert key to valueusing either concept • Dictionary can have multiple values to one key • 1 value for key is still legal option “awesome” • Also many Entryswith same key but different value “cool” “cool”
Map vs. Dictionary MapADT Dictionary ADT • Collection of Entrys • key – searched for • value – cared about • Collection of Entrys • key – searched for • value – cared about
Map vs. Dictionary MapADT Dictionary ADT • Collection of Entrys • key – searched for • value – cared about • Implemented with: • List w/ Entrys in order they were added • Collection of Entrys • key – searched for • value – cared about • Implemented with: • List w/ Entrys in order they were added
Map vs. Dictionary MapADT Dictionary ADT • Collection of Entrys • key – searched for • value – cared about • Implemented with: • List w/ Entrys in order they were added • List w/ Entrys in increasing order of keys • Collection of Entrys • key – searched for • value – cared about • Implemented with: • List w/ Entrys in order they were added • List w/ Entrys in increasing order of keys
Map vs. Dictionary Map ADT Dictionary ADT • Collection of Entrys • key – searched for • value – cared about • Implemented with: • List w/ Entrys in order they were added • List w/ Entrys in increasing order of keys • Hash table • Collection of Entrys • key – searched for • value – cared about • Implemented with: • List w/ Entrys in order they were added • List w/ Entrys in increasing order of keys • Hash table (but harder)
Map vs. Dictionary Map ADT DictionaryADT • Collection of Entrys • key – searched for • value – cared about • Implemented with: • List w/ Entrys in order they were added • List w/ Entrys in increasing order of keys • Hash table • key in at most1Entry • Collection of Entrys • key – searched for • value – cared about • Implemented with: • List w/ Entrys in order they were added • List w/ Entrys in increasing order of keys • Hash table (but harder) • Entryscan sharekey
Map vs. Dictionary MapADT DictionaryADT • Collection of Entrys • key – searched for • value – cared about • Implemented with: • List w/ Entrys in order they were added • List w/ Entrys in increasing order of keys • Hash table • key in at most1Entry • Collection of Entrys • key – searched for • value – cared about • Implemented with: • List w/ Entrys in order they were added • List w/ Entrys in increasing order of keys • Hash table (but harder) • Entryscan sharekey
Using an Unordered List • Simplest implementation uses unordered list • Question is: PositionListor IndexList • Mayscan through list during find or findAll • To see if it matches, check each Position • Stop at first matching key in find method • findAll needs to scan entire list for matches Time needed for PositionList: Time needed for IndexList:
Using an Unordered List • Simplest implementation uses unordered list • Question is: PositionListor IndexList • Mayscan through list during find or findAll • To see if it matches, check each Position • Stop at first matching key in find method • findAll needs to scan entire list for matches Time needed for PositionList:O(n) Time needed for IndexList: O(n)
Unordered List Details • Mayscan through listin call to remove • To see if a match, check each element • Stop & remove Entryonce (if) it is found • insert goes to end of listto add Entry • Entry created for key-valuepair is returned • Keys not unique, so no checks needed Time needed for PositionList: Time needed for IndexList:
Unordered List Details • Mayscan through listin call to remove • To see if a match, check each element • Stop & remove Entryonce (if) it is found • insert goes to end of listto add Entry • Entry created for key-valuepair is returned • Keys not unique, so no checks needed Time needed for PositionList:O(n) &O(1) Time needed for IndexList: O(n) & O(n)
Unordered List • Implementation great when adds are common… …but searching slow and not very useful • When would we ever need this implementation?
Unordered List • Implementation great when adds are common… …but searching slow and not very useful • When would we ever need this implementation? • Phone records • E-mail backups • Tax receipts by the IRS • Bank’s copy of your credit card orders
Unordered List • Implementation great when adds are common… …but searching slow and not very useful • When would we ever need this implementation? • Phone records • E-mail backups • Tax receipts by the IRS • Bank’s copy of your credit card orders
Ordered Dictionary • Idea normally associated with Dictionary • Maintains ordered list of key-value pairs • Must maintain Entrys ordered by their key • Faster searching provides performance win Q: “Mom, how do I spell _______?” A: “Look it up.” • Efficiency gains not just for find & findAll • Entrys with same key stored in any order • Only requires that keys be in order only
Ordered Dictionary • Iteratorsshouldrespect ordering of Entrys • Should not be a problem, if Entrys stored in order • If O(1) access time, search time is O(log n) • Array-based structure required to hold Entrys • To get immediate access, needs to access by index • Requires IndexList-based implementation
Binary Search • Finds key using divide-and-conquer approach • First of many times you will be seeing this approach • Algorithm has problems solved using recursion • Base case 1:No Entrys remain to find the key • Base case 2: At data’s midpoint is matching key • Recursive Step 1: If midpoint too high, use lower half • Recursive Step 2: Use upper half,if midpoint too low
Binary Search • low and high params specifying range to check • Would be called with 0 & size() – 1, initially • If l > h, no match possible in this data • Compare with key at midpoint of low & high • Consider steps for find(7): 0 1 3 4 5 7 8 9 11 14 16 18 19 m h l
Binary Search • low and high params specifying range to check • Would be called with 0 & size() – 1, initially • If l > h, no match possible in this data • Compare with key at midpoint of low & high • Consider steps for find(7): 0 1 3 4 5 7 8 9 11 14 16 18 19 m h l 0 1 3 4 5 7 8 9 11 14 16 18 19 m h l
Binary Search • low and high params specifying range to check • Would be called with 0 & size() – 1, initially • If l > h, no match possible in this data • Compare with key at midpoint of low & high • Consider steps for find(7): 0 1 3 4 5 7 8 9 11 14 16 18 19 m h l 0 1 3 4 5 7 8 9 11 14 16 18 19 m h l 0 1 3 4 5 7 8 9 11 14 16 18 19 m h l
Binary Search • low and high params specifying range to check • Would be called with 0 & size() – 1, initially • If l > h, no match possible in this data • Compare with key at midpoint of low & high • Consider steps for find(7): 0 1 3 4 5 7 8 9 11 14 16 18 19 m h l 0 1 3 4 5 7 8 9 11 14 16 18 19 m h l 0 1 3 4 5 7 8 9 11 14 16 18 19 m h l 0 1 3 4 5 7 8 9 11 14 16 18 19 l = m = h
Using Ordered Dictionary • findrelies on binary search; takes O(log n)time • Should also start with binary search for findAll() • findAll checks neighbors to find all matches • remove & insertcould use binary search • List shifts elements in addto make hole for element • Would also need to do shift when removing from list • Each takes O(n) total time in worst case as a result
Comparing Keys • For all searching, must find matching keys • Cannot rely upon equals()when ordering • Want to be lazy, write code for all types of key • Use <, >, == if keys numeric type, but this is limiting • String also has simple method: compareTo() • General way comparing keys based upon this idea?
Comparable<E> Interface • In Java as a standard from java.lang • Defines single method used for comparison • compareTo(E obj)compares instance with obj • Returns intwhich is either negative, zero, positive
Ordered Dictionary Example • Easiest to require that keys be Comparable • Now reuse class anywhere by adding interface • Also use standard types like String & Integer • compareTo()in binary search makes it simple int c = k.compareTo(list.get(m).getKey());if (c > 0) {return binarySearch(k, m + 1, h);} else if (c < 0) { return binarySearch(k, l, m - 1);} else { return m;}
Before Next Lecture… • Start week #5 assignment • Because of holiday, will be due next Wednesday • Start thinking of design for your project • Due Friday a preliminary copy of this design • Friday sees 1stproblem day on Map & Dictionary • Project test #1 in Lab on Friday, too • Tests your knowledge of group’s submission • No studying needed ifunderstand what group did