130 likes | 261 Views
CSC 212 – Data Structures. Lecture 31: Last Word On Dictionaries. Problem of the Day. What is the smallest positive integer that cannot be defined in less than twenty-five syllables?. What is the smallest positive integer that cannot be defined in less than twenty-five syllables ?
E N D
CSC 212 –Data Structures Lecture 31: Last Word On Dictionaries
Problem of the Day • What is the smallest positive integer that cannot be defined in less than twenty-five syllables? • What is the smallest positive integer that cannot be defined in less than twenty-five syllables? • The highlighted phrase has fewer than 25 syllables, so this cannot exist!
Comparing Data Items • Ordering entries means comparing keys • Comparison depends on key’s type • Use <, >, == for numeric data • Use compareTo() for Strings • What about Car, IMClient, or Prof instances? • Want abstract approach to this problem • No OrderedDictionary class for each key type
Comparator ADT • Implements a total order relation • Objects less than, equal to, or greater than • Follows rule that if a > b & b > c, then a > c • Comparator’s methods are abstract • Implementation is specific to key type • But still independent of the key class • Can reweight keys by changing how comparator orders them
Comparator Interface public interface Comparator<E> { public int compare(E x, E y);}public class StrComp implements Comparator<String> { public int compare(String x, String y){ return(x.compareTo(y)); } } • Returns integer < 0 when x < y 0 when x== y> 0 when x > y
Ordered Dictionaries • Ordered dictionary constructor includes Comparator parameter • Now works with any type of key! • Can rewrite binary search more abstractly as: if (c.compare(key, table[m].getKey()) > 0) { l = m + 1;} else if (c.compare(key, table[m].getKey()) < 0) { h = m - 1;} else { return m;}
Ordered Dictionary • Key feature of ordered dictionary: they maintain entries in order • Can be a performance win (faster searching) • But can also be an important feature • Think of how first use a dictionary: Q: “Mom, how do I spell _______?”A: “Look it up.” • Cannot do this with Dictionary ADT
Ordered Dictionary Interface public interface OrderedDictionary<K,V> extends Dictionary<K,V> { public Entry<K,V> first(); // Entry with smallest key public Entry<K,V> last(); // Entry with largest key public Iterator<Entry<K,V>> successors(K k); public Iterator<Entry<K,V>> predecessors(K k); } • Includes all methods in Dictionary • Includes first() & last() methods • successors() iterates over larger keys • predecessors() iterates through smaller keys • May not include entries with the key k
Writing an Ordered Dictionary public class ODict<K,V> implements... {private IndexList<Entry<K,V>> table;private Comparator<K> comp;public Entry<K,V> first() throws EmptyDictionaryException { try { return table.get(0); } catch (NoSuchElementException e) { throw EmptyDictionaryException(“Dummkopf.”); } }
Writing an Ordered Dictionary public Iterator<Entry<K,V>> successors(K k) {IteratorClass<Entry<K,V>> retVal = new ...; int rank = binSearch(k);while (rank < table.size()) { if (comp.compare(k, table.get(rank).getKey)==0) { rank++; } else { break; }}for (; rank < table.size(); rank++) { retVal.addLast(table.get(rank));}return retVal; }
Why Should We Care? • We often care about ordering data • Prices • Schedules • QPAs • Number of watts consumed • Processor speed
Your Turn • Get back into groups and do activity
Before Next Lecture… • Keep up with your reading! • Cannot stress this enough • Finish Week #12 Assignment • Start Programming Assignment #4 • Prepare for Midterm #2 next Monday • Will also be open book, open note • Covers from last midterm through this week