Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
EECS 281: Data Structures and Algorithms
Dictionary Abstract Data Type
Dictionary ADT
Store elements so that they can be
quickly located using keys
Typically, useful additional information
in addition to key
Examples
– bank accounts with SSN as key
– student records with UMID or uniqname as
key
Dictionary ADTs
Types
Log File
Ordered Dictionary
Hash Table
Skip List
Operations
Search
Insertion
Removal
1
Dictionary ADTs
Stores items by key – element pairs
(k,e)
k and e may be of any type
k and e may be the same
In general, items with the same key
may be stored in same Dictionary
Unordered vs Ordered
Ordered
Relative order determined by comparator
between keys
Total Order relation defined on keys
Unordered
No order relation is assumed on keys
Only equality testing between keys
Dictionary ADT: Log File
Defn: implementation of Dictionary ADT
using a sequence to store items in
arbitrary order
Obviously, Unordered Dictionary
Useful implementation for case with many
insertions and few searches
Implemented as array (vector) or linked
list
2
Dictionary ADT: Log File
Search
Look through entire data set
O( )
Insertion
Always insert at end
O( )
Removal
First must find, then remove
O( )
Space, proportional to size of log file
O( )
Applications of Log Files
Database systems
File systems
Security audit trails
Dict. ADT: Ordered Dictionary
Defn: implementation of Dictionary ADT
in which usual operations may be used
and there exists an order relationship
between keys
Useful implementation for few insertions /
removals, but many searches
3
Binary Search
Iterative
int search(int a[], int v, int left, int right)
while (right >= left) {
int mid = (left + right)/2;
if (v == a[mid]) return mid;
if (v < a[mid])
right = mid - 1;
else
left = mid + 1;
}
return -1;
Binary Search
Recursive
int searchR(int a[], int v, int left, int right)
if (left > right) return -1;
int mid = (left + right)/2;
if (v == a[mid]) return mid;
if (v < a[mid])
return searchR(a[], v, left, mid - 1);
else
return searchR(a[], v, mid + 1, right);
}
Dict. ADT: Ordered Dictionary
Search
Binary Search (iterative or recursive)
O( )
Insertion
Always insert in correct location
O( ) to find location and O( ) to move subsequent
items
Removal
First must find, then remove
O( ) to find and O( ) to move subsequent items
4
Notes
Binary search is an example of divide-andconquer technique
Rule: An algorithm is O(log n) if each
constant time operation (e.g., CMP) can cut
the problem size by a fraction (e.g., half).
Corollary: If constant time is required to
reduce the problem size by a constant
amount, the algorithm is O(N).
Divide and conquer doesn’t work with linked
list, unfortunately
Summary: Dictionary ADT
Many implementations
– Log File (today)
– Ordered Dictionary (today)
– Hash Table (soon)
Different styles lead to different O( ) for
– search
– insertion
– removal
5