1 / 18

Map ADT

Map ADT. CSCI 3333 Data Structures. by Dr. Bun Yue Professor of Computer Science yue@uhcl.edu http://sce.uhcl.edu/yue/ 2013. Acknowledgement. Mr. Charles Moen Dr. Wei Ding Ms. Krishani Abeysekera Dr. Michael Goodrich. Maps. A map models a searchable collection of key-value entries

samuru
Télécharger la présentation

Map ADT

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Map ADT CSCI 3333 Data Structures byDr. Bun YueProfessor of Computer Scienceyue@uhcl.eduhttp://sce.uhcl.edu/yue/2013

  2. Acknowledgement • Mr. Charles Moen • Dr. Wei Ding • Ms. Krishani Abeysekera • Dr. Michael Goodrich

  3. Maps • A map models a searchable collection of key-value entries • The main operations of a map are for searching, inserting, and deleting items • Multiple entries with the same key are not allowed => the key is unique. • Applications: • address book • student-record database

  4. An Example Map ADT • Map ADT methods: • get(k): if the map M has an entry with key k, return its associated value; else, return null • put(k, v): insert entry (k, v) into the map M; if key k is not already in M, then return null; else, return old value associated with k • remove(k): if the map M has an entry with key k, remove it from M and return its associated value; else, return null • size(), isEmpty() • keys(): return an iterator of the keys in M • values(): return an iterator of the values in M

  5. Example Operation Output Map isEmpty() true Ø put(5,A) null (5,A) put(7,B) null (5,A),(7,B) put(2,C) null (5,A),(7,B),(2,C) put(8,D) null (5,A),(7,B),(2,C),(8,D) put(2,E) C (5,A),(7,B),(2,E),(8,D) get(7) B (5,A),(7,B),(2,E),(8,D) get(4) null (5,A),(7,B),(2,E),(8,D) get(2) E (5,A),(7,B),(2,E),(8,D) size() 4 (5,A),(7,B),(2,E),(8,D) remove(5) A (7,B),(2,E),(8,D) remove(2) E (7,B),(8,D) get(2) null (7,B),(8,D) isEmpty() false (7,B),(8,D)

  6. Comparison to java.util.Map Map ADT Methods java.util.MapMethods size() size() isEmpty() isEmpty() get(k) get(k) put(k,v) put(k,v) remove(k) remove(k) keys() keySet().iterator() values() values().iterator()

  7. Java Map Interface • Map is an interface in Java. • Many general implementations: • HashMap • Hashtable • LinkedHashMap • TreeMap • … • Sub-interfaces: • SortedMap • ConcurrentMap • …

  8. Map in Perl • The built-in hash data structure in Perl is basically a map. • Hashes in Perl starts with the symbol %. • Each hash value must be a scalar.

  9. Hash Example in Perl %h = ("yue", 1, "moen", 5, "davari", 2); $h{"yue"} = 6; $h{"abeysekera"} = 9; while (($key, $value) = each %h) { print "$key => $value\n"; } foreach $key (sort keys %h) { print "$key => $h{$key}\n"; } delete($h{"yue"}); foreach $key (sort keys %h) { print "$key => $h{$key}\n"; }

  10. Output abeysekera => 9 davari => 2 moen => 5 yue => 6 abeysekera => 9 davari => 2 moen => 5 yue => 6 abeysekera => 9 davari => 2 moen => 5

  11. We can efficiently implement a map using an unsorted list We store the items of the map in a list S (based on a doubly-linked list), in arbitrary order A Simple List-Based Map trailer nodes/positions header c c 5 8 c c 9 6 entries

  12. The get(k) Algorithm Algorithm get(k): B = S.positions() {B is an iterator of the positions in S} while B.hasNext() do p = B.next() fthe next position in Bg if p.element().key() = k then return p.element().value() return null {there is no entry with key equal to k}

  13. The put(k,v) Algorithm Algorithm put(k,v): B = S.positions() while B.hasNext() do p = B.next() if p.element().key() = k then t = p.element().value() B.replace(p,(k,v)) return t {return the old value} S.insertLast((k,v)) n = n + 1 {increment variable storing number of entries} return null {there was no previous entry with key equal to k}

  14. The remove(k) Algorithm Algorithm remove(k): B =S.positions() while B.hasNext() do p = B.next() if p.element().key() = k then t = p.element().value() S.remove(p) n = n – 1 {decrement number of entries} return t {return the removed value} return null {there is no entry with key equal to k}

  15. Performance: put, get and remove take O(n) time since in the worst case (the item is not found) we traverse the entire sequence to look for an item with the given key The unsorted list implementation is effective only for maps of small size or for maps in which puts are the most common operations, while searches and removals are rarely performed (e.g., historical record of logins to a workstation) Performance of a List-Based Map

  16. Other Map Implementations • Other possible implementations of a map: • Trees: e.g. BST. • put, get and remove: average time of O(lg n). • Hash: • put, get and remove: average time of O(1).

  17. Maps and Dictionaries • Maps and dictionaries may sometime be used in an interchangeable manner. • One way of differentiation: • Map: keys are unique. • Dictionary: keys may not be unique. More than one key-value pairs may have the same key values.

  18. Questions and Comments?

More Related