View
219
Download
0
Tags:
Embed Size (px)
Citation preview
CS 240: Data StructuresCS 240: Data Structures
Thursday, July 12Thursday, July 12thth
Vector, Algorithms, RecursionVector, Algorithms, Recursion
Uh oh…Uh oh…
The second test is The second test is next Thursday.next Thursday. Hopefully, it won’t be Hopefully, it won’t be
as long.as long.
Linkedlist Linkedlist presentations are on presentations are on Tuesday.Tuesday.
VectorVector
Vector is an STL provided sequential Vector is an STL provided sequential container.container.
It provides us with similar abilities as does It provides us with similar abilities as does our templated mycontainer (lab 5).our templated mycontainer (lab 5).
VectorVector
We declare a vector just like we do a templated We declare a vector just like we do a templated mycontainer:mycontainer: vector<T> testvector;vector<T> testvector;
Many methods are built in:Many methods are built in: Constructor, destructor, operator =Constructor, destructor, operator = size(), capacity(), size(), capacity(), clear() //equivalent to mycontainer::empty()clear() //equivalent to mycontainer::empty() push_back(T) //equivalent to mycontainer::insert(T)push_back(T) //equivalent to mycontainer::insert(T) pop_back(T) //equivalent to mycontainer::remove(T)pop_back(T) //equivalent to mycontainer::remove(T)
VectorVector
We can access Vector data as follows:We can access Vector data as follows: front() //gets first elementfront() //gets first elementback() //gets last elementback() //gets last elementoperator [unsigned int] //gets element at operator [unsigned int] //gets element at
specified location.specified location.
VectorVector Instead of currentvalue, Vector uses iterators:Instead of currentvalue, Vector uses iterators:
vector<T>::iterator myiterator; //T must match the vector<T>::iterator myiterator; //T must match the vector you want to use this iterator with.vector you want to use this iterator with.
myiterator = testvector.begin();myiterator = testvector.begin(); myiterator = testvector.end();myiterator = testvector.end(); myiterator++;myiterator++; //equivalent to mycontainer::next()//equivalent to mycontainer::next() myiterator--;myiterator--; //equivalent to mycontainer::previous()//equivalent to mycontainer::previous() *myiterator;*myiterator; //equivalent to mycontainer::current()//equivalent to mycontainer::current() testvector.erase(myiterator); //equivalent to testvector.erase(myiterator); //equivalent to
mycontainer::removeHere();mycontainer::removeHere(); testvector.insert(myiterator, T); //equivalent to testvector.insert(myiterator, T); //equivalent to
mycontainer::insertHere(T);mycontainer::insertHere(T);
Algorithm EfficiencyAlgorithm Efficiency
What determines if an algorithm is What determines if an algorithm is efficient?efficient?How much space does it take up?How much space does it take up?How long does it take?How long does it take?
We usually worry about time when we We usually worry about time when we discuss efficiency – however, space discuss efficiency – however, space issues are also important!issues are also important!
Time efficiencyTime efficiency
The time an algorithm takes has many The time an algorithm takes has many variables:variables:Size of data setSize of data setProcessing speedProcessing speedCompiler optimizations, effective codingCompiler optimizations, effective coding
Time EvaluationTime Evaluation
We could count how many instructions are We could count how many instructions are executed.executed.
Let T(n) represent the time it takes for an Let T(n) represent the time it takes for an algorithm to handle a data size of size n.algorithm to handle a data size of size n.
How long does insert() take?How long does insert() take?
Time EvaluationTime Evaluation
What about taking an What about taking an average?average?
How does this vary based How does this vary based on SIZE?on SIZE?
SIZE has a direct effect SIZE has a direct effect on the performance of on the performance of this algorithm!this algorithm!
//float array[SIZE] is filled //float array[SIZE] is filled with datawith data
float sum = 0;float sum = 0;
for(int i=0;i<SIZE;i++)for(int i=0;i<SIZE;i++)
{{
sum += array[i];sum += array[i];
}}
float average = sum/SIZE;float average = sum/SIZE;
Time EvaluationTime Evaluation We refer to this as an We refer to this as an
“order of magnitude” -> “order of magnitude” -> Big Oh, or O()Big Oh, or O()
In this case, the algorithm In this case, the algorithm is O(N), where N is the is O(N), where N is the input size.input size.
Math:Math: We say that T(N) has an We say that T(N) has an
order of magnitude of order of magnitude of O(f(X)) where,O(f(X)) where,
T(N) <= Cf(X), for some int T(N) <= Cf(X), for some int constant C, a sufficiently constant C, a sufficiently large N and f(X) in terms of large N and f(X) in terms of N and minimized.N and minimized.
f(X) = N, C >= 2f(X) = N, C >= 2
//float array[SIZE] is filled //float array[SIZE] is filled with datawith data
float sum = 0;float sum = 0;for(int i=0;i<SIZE;i++)for(int i=0;i<SIZE;i++){{
sum += array[i];sum += array[i];}}float average = sum/SIZE;float average = sum/SIZE;
Big OhBig Oh
Let us consider a couple of algorithms and Let us consider a couple of algorithms and determine their complexity.determine their complexity.
I have no examples, you’d better think of I have no examples, you’d better think of one.one.
RecursionRecursion
Recursion.Recursion. Recursion is a form of Recursion is a form of
loop written in a loop written in a different style.different style.
Generally, if we have Generally, if we have a loop it can become a loop it can become a recursive function.a recursive function.
Recursion TranslationRecursion Translation
T & search(T searchval)T & search(T searchval){{
Node * i = first;Node * i = first;for(i;i!=NULL;i=i->next)for(i;i!=NULL;i=i->next){{
if(i->data==searchval)if(i->data==searchval){{
return &(i-return &(i->data);>data);
}}}}return NULL;return NULL;
}}
T & search(T searchval, Node * searchat)T & search(T searchval, Node * searchat){{
if(searchat == NULL)if(searchat == NULL){{
return NULL;return NULL;}}if(searchat->data==searchval)if(searchat->data==searchval){{
return &(searchat->data);return &(searchat->data);}}return search(searchval,searchat-return search(searchval,searchat->next);>next);
}}
Recursion: Break DownRecursion: Break Down
T & search(T searchval, Node * searchat)T & search(T searchval, Node * searchat)
{{
if(searchat == NULL)if(searchat == NULL)
{{
return NULL;return NULL;
}}
if(searchat->data==searchval)if(searchat->data==searchval)
{{
return &(searchat->data);return &(searchat->data);
}}
return search(searchval,searchat->next);return search(searchval,searchat->next);
}}
Base Case
Terminating Case
Continuation Case
RecursionRecursion
Base Case:Base Case: Termination Case:Termination Case: Continuation Case:Continuation Case: Minor difference in Minor difference in
usageusage Easier to evaluate for Easier to evaluate for
Big Oh!Big Oh!
Too small.
Cheerios are an O Cheerios are an O with big flavor.with big flavor.
Overstock.com is the Overstock.com is the “O”.“O”.
So, why do we care So, why do we care about the Big O?about the Big O?
Big OhBig Oh
It lets us determine how effective one It lets us determine how effective one algorithm is compared to another.algorithm is compared to another.
However, it isn’t a perfect answer. But it is However, it isn’t a perfect answer. But it is pretty good.pretty good.
Sorting time!Sorting time!
Insertion Sort!Insertion Sort!Two ways to do this… yes… two!Two ways to do this… yes… two!
Bubble Sort!Bubble Sort!