Binary Search Trees:Introduction
Daniel KaneDepartment of Computer Science and Engineering
University of California, San Diego
Data StructuresData Structures and Algorithms
Learning Objectives
Provide examples of the sorts ofproblems we hope to solve with BinarySearch Trees.Show why data structures that we havealready covered are insufficient.
Outline
1 Local Search
2 Attempts
Dictionary SearchFind all words that start with some givenstring.
Date Ranges
Find all emails received in a given period.
Closest HeightFind the person in your class whose height isclosest to yours.
Local Search
DefinitionA Local Search Datastructure stores anumber of elements each with a key comingfrom an ordered set. It supports operations:
RangeSearch(x , y): Returns allelements with keys between x and y .NearestNeighbors(z): Returns theelement with keys on either side of z .
Example
RangeSearch(5, 12)
NearestNeighbors(3)
Example
RangeSearch(5, 12)
NearestNeighbors(3)
Example
RangeSearch(5, 12)
NearestNeighbors(3)
Dynamic Data Structure
We would also like to be able to modify thedata structure as we go.
Insert(x): Adds a element with key x .Delete(x): Removes the element withkey x .
Example
Insert(3)
Delete(10)
Example
Insert(3)
Delete(10)
Example
Insert(3)
Delete(10)
ProblemIf an empty data structure is given thesecommands what does it output at the end?
Insert(3)Insert(8)Insert(5)Insert(10)Delete(8)Insert(12)NearestNeighbors(7)
Answer
Outline
1 Local Search
2 Attempts
Hash TableRangeSearch: Impossible ×
NearestNeighbors: Impossible ×Insert: O(1) XDelete: O(1) X
Hash TableRangeSearch: Impossible ×NearestNeighbors: Impossible ×
Insert: O(1) XDelete: O(1) X
Hash TableRangeSearch: Impossible ×NearestNeighbors: Impossible ×Insert: O(1) X
Delete: O(1) X
Hash TableRangeSearch: Impossible ×NearestNeighbors: Impossible ×Insert: O(1) XDelete: O(1) X
ArrayRangeSearch: O(n) ×
NearestNeighbors: O(n) ×Insert: O(1) XDelete: O(1) X
ArrayRangeSearch: O(n) ×NearestNeighbors: O(n) ×
Insert: O(1) XDelete: O(1) X
ArrayRangeSearch: O(n) ×NearestNeighbors: O(n) ×Insert: O(1) X
Delete: O(1) X
ArrayRangeSearch: O(n) ×NearestNeighbors: O(n) ×Insert: O(1) XDelete: O(1) X
Sorted ArrayRangeSearch: O(log(n)) X
NearestNeighbors: O(log(n)) XInsert: O(n) ×Delete: O(n) ×
Sorted ArrayRangeSearch: O(log(n)) XNearestNeighbors: O(log(n)) X
Insert: O(n) ×Delete: O(n) ×
Sorted ArrayRangeSearch: O(log(n)) XNearestNeighbors: O(log(n)) XInsert: O(n) ×
Delete: O(n) ×
Sorted ArrayRangeSearch: O(log(n)) XNearestNeighbors: O(log(n)) XInsert: O(n) ×Delete: O(n) ×
Linked ListRangeSearch: O(n) ×
NearestNeighbors: O(n) ×Insert: O(1) XDelete: O(1) X
Linked ListRangeSearch: O(n) ×NearestNeighbors: O(n) ×
Insert: O(1) XDelete: O(1) X
Linked ListRangeSearch: O(n) ×NearestNeighbors: O(n) ×Insert: O(1) X
Delete: O(1) X
Linked ListRangeSearch: O(n) ×NearestNeighbors: O(n) ×Insert: O(1) XDelete: O(1) X
Need Something New
ProblemPrevious data structures won’t work. Weneed something new.