Understanding Ordered Dictionaries in Data Structures: Key Comparisons and Implementations
Dive into the importance of ordered dictionaries in data structures, focusing on how they maintain entries in sequence and improve search performance. This lecture covers the concepts of key comparisons using various types of data, including integers and strings, along with the implementation of comparison through the Comparator interface. Explore the functions of ordered dictionaries, such as finding the first and last entries, and iterating through successors and predecessors. Additionally, prepare for upcoming assignments and midterm exams in this course segment.
Understanding Ordered Dictionaries in Data Structures: Key Comparisons and Implementations
E N D
Presentation Transcript
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