Transcript Document
29-Jan-00
CPSC 212: Data Structures
and Algorithms
Instructor: Harry Plantinga
29-Jan-00
Computer Science 212
Data Structures and Algorithms
The Heart of Computer Science
Data structures
Study of important algorithms
Algorithm analysis
Algorithm design techniques
Plus
GUIs and a GUI toolkit
Intelligent systems
Course Information:
http://cs.calvin.edu/CS/212/
29-Jan-00
Why study DS & Algorithms?
Some problems are difficult to solve and
good solutions are known
Some “solutions” don’t always work
Some simple algorithms don’t scale well
Data structures and algorithms make good
tools for addressing new problems
Why not just get a faster computer?
Esthetic beauty!
29-Jan-00
Asymptotic Analysis
What does it mean to say that an algorithm
has runtime O(n log n)?
n: Problem size
Big-O: upper bound over all inputs of size n
“Ignore constant factor” (why?)
“as n grows large”
g(n) is said to be O(f(n)) if there exist constants c0
and n0 such that g(n) < c0 f(n) for all n > n0
Most algorithms we study will have runtimes of
O(1), O(log n), O(n), O(n log n), O(n2), O(n3), O(2n)
29-Jan-00
Connectivity
Building railroads
across America
Dutch Bingo
IC connectivity
Telephone network
Given an edge from A to B,
print it out unless
previous edges already
connect A and B
n edges are added
29-Jan-00
Example
3-4
4-9
8-0
2-3
5-6
2-9
5-9
7-3
4-8
5-6
0-2
6-1
3-4
4-9
8-0
2-3
5-6
[2-3-4-9]
5-9
7-3
4-8
[5-6]
[0-8-4-3-2]
6-1
29-Jan-00
Abstract Data Types
What is an abstract data type?
A collection of data
A set of operations on that data
What abstract data type do we need?
Data:
Sets of elements
Operations:
Find(x) – what set is x in?
Union(A,B) – merge sets A and B
29-Jan-00
Algorithm
How to solve the railroads problem?
For road (x,y)
if find(x) != find(y)
union(find(x),find(y))
print “x – y”
How to implement the Union-Find ADT?
29-Jan-00
Quick Find
For each city, keep a pointer
to the “capital” of the set
Find(x): return the set name for x
Runtime:
O(1)
10^8 items, 10^9 unions, 100 mips: 10sec
Union(A,B): change all sets
named A (=Find(x)) in the array
to B (=Find(y))
O(n)
Runtime:
10^8 items, 10^9 unions, 31 yrs
Can we do faster unions?
29-Jan-00
Quick Union
To do a Unite(X,Y) (where X and
Y are sets), just point X to Y
Union runtime:
O(1)
Find runtime:
O(n)
Total time for adding n roads?
Can we do better?
29-Jan-00
Weighted Union
Keep track of the number of
cities in each set
Insert the smaller set into the
larger
Runtime for Unite(A,B): O(1)
O(?)
Runtime for Find(x):
What’s the worst-case tree
height?
29-Jan-00
Weighted Union
Worst case
What sequence of inputs gives
the tallest trees?
How tall are the trees?
<= log n (prove by induction)
What is the runtime for find?
O(log n)
What is the runtime for n unions?
O(n log n)
Better still: average O(1) per union!
29-Jan-00
Path Compression
When you do a find, make every city on the
path to the “capital” point to the capital
Runtime? O(n log* n)
29-Jan-00
What difference does it make?
Small problem: use the simplest algorithm
Large problem: use the best algorithm!
N
M
1000
6206
10000
83857
100000 1545119
qf
14
1216
qu
25
4577
wqu
6
91
1071
pc
5
73
1106
A better algorithm is much more advantageous
than a faster computer.
29-Jan-00
Lessons
Start with simple algorithm
Need a good algorithm for big problems
Higher level of abstraction (tree) is helpful
Strive for worst-case performance
guarantees
Average-case is better than nothing
Identify fundamental abstraction
Show me your code—you’ll have to explain your DS
Show me your DS—I don’t need to see your code