Upload
jemma
View
12
Download
0
Embed Size (px)
DESCRIPTION
CSE 326: Data Structures Lecture #4. Alon Halevy Spring Quarter 2001. Agenda. Today : Finish complexity issues. Linked links (Read Ch 3; skip “radix sort”). Direct Proof of Recursive Fibonacci. Recursive Fibonacci: int Fib(n) if (n == 0 or n == 1) return 1 - PowerPoint PPT Presentation
Citation preview
CSE 326: Data StructuresLecture #4
Alon Halevy
Spring Quarter 2001
Agenda
• Today:– Finish complexity issues.
– Linked links (Read Ch 3; skip “radix sort”)
Direct Proof of Recursive Fibonacci
• Recursive Fibonacci:int Fib(n)
if (n == 0 or n == 1) return 1
else return Fib(n - 1) + Fib(n - 2)
• Lower bound analysis• T(0), T(1) >= b
T(n) >= T(n - 1) + T(n - 2) + c if n > 1
• Analysislet be (1 + 5)/2 which satisfies 2 = + 1show by induction on n that T(n) >= bn - 1
Direct Proof Continued
• Basis: T(0) b > b-1 and T(1) b = b0
• Inductive step: Assume T(m) bm - 1 for all m < nT(n) T(n - 1) + T(n - 2) + c bn-2 + bn-3 + c bn-3( + 1) + c = bn-32 + c bn-1
Fibonacci Call Tree
5
3
1 2
0 1
4
2
0 1
3
1 2
0 1
Learning from Analysis
• To avoid recursive calls– store all basis values in a table
– each time you calculate an answer, store it in the table
– before performing any calculation for a value n • check if a valid answer for n is in the table
• if so, return it
• Memoization– a form of dynamic programming
• How much time does memoized version take?
Kinds of Analysis• So far we have considered worst case analysis• We may want to know how an algorithm performs
“on average”• Several distinct senses of “on average”
– amortized• average time per operation over a sequence of operations
– average case• average time over a random distribution of inputs
– expected case• average time for a randomized algorithm over different random
seeds for any input
Amortized Analysis
• Consider any sequence of operations applied to a data structure– your worst enemy could choose the sequence!
• Some operations may be fast, others slow• Goal: show that the average time per operation is
still good
n
operationsn for timetotal
Stack ADT
• Stack operations– push
– pop
– is_empty
• Stack property: if x is on the stack before y is pushed, then x will be popped after y is popped
What is biggest problem with an array implementation?
A
BCDEF
E D C B A
F
Stretchy Stack Implementation
int data[];int maxsize;int top;
Push(e){if (top == maxsize){
temp = new int[2*maxsize];copy data into temp;deallocate data;data = temp; }
else { data[++top] = e; }
Best case Push = O( )
Worst case Push = O( )
Stretchy Stack Amortized Analysis
• Consider sequence of n operationspush(3); push(19); push(2); …
• What is the max number of stretches?• What is the total time?
– let’s say a regular push takes time a, and stretching an array containing k elements takes time kb, for some constants a and b.
• Amortized = (an+b(2n-1))/n = a+2b-(1/n)= O(1)
log n
)12()12(
2)...8421(
log1
log
nbanban
bannban
n
n
oi
i
Average Case Analysis
• Attempt to capture the notion of “typical” performance
• Imagine inputs are drawn from some random distribution– Ideally this distribution is a mathematical model of the
real world
– In practice usually is much more simple – e.g., a uniform random distribution
Example: Find a Red Card
• Input: a deck of n cards, half red and half black• Algorithm: turn over cards (from top of deck) one
at a time until a red card is found. How many cards will be turned over?– Best case =
– Worst case =
– Average case: over all possible inputs (ways of shuffling deck)
Summary
• Asymptotic Analysis – scaling with size of input• Upper bound O, Lower bound • O(1) or O(log n) great• O(2n) almost never okay• Worst case most important – strong guarantee• Other kinds of analysis sometimes useful:
– amortized
– average case
List ADT• List properties
– Ai precedes Ai+1 for 1 i < n– Ai succeeds Ai-1 for 1 < i n– Size 0 list is defined to be the empty list
• Key operations– Find(item) = position– Find_Kth(integer) = item– Insert(item, position)– Delete(position)– Next(position) = position
• What are some possible data structures?
( A1 A2 … An-1 An )length = n
Implementations of Linked Lists
a b c
(a b c)(optionalheader)
L
W 1 I S E S
1 7 92 3 4 5 6 8 10
Array:
Linked list:
H A Y
Can we apply binary search to an array representation?
Linked List vs. Array
Find(item) = position
Find_Kth(integer)=item
Find_Kth(1)=item
Insert(item, position)
Insert(item)
Delete(position)
Next(position) = position
linked list array sorted array
Tradeoffs• For what kinds of applications is a linked list best?
• Examples for an unsorted array?
• Examples for a sorted array?
Implementing in C++
Create separate classes for– Node
– List (contains a pointer to the first node)
– List Iterator (specifies a position in a list; basically, just a pointer to a node)
Pro: syntactically distinguishes uses of node pointers
Con: a lot of verbage! Also, is a position in a list really distinct from a list?
a b c
(a b c)(optionalheader)
L