About CIT597
Download
Report
Transcript About CIT597
CIT 594
19-Jul-16
Basic content
CIT 594 is a continuation of CIT 591
Java will be used throughout
However, CIT 594 is not primarily a course about Java
Topics:
Data Structures
Algorithms
Supplied by Java
How to create your own
A sampling of some better-known algorithms
Analysis of algorithms
Simple algebra is required
Types of Collection
A collection is a structured group of objects
Java supplies several types of Collection:
Set: cannot contain duplicate elements, order is not important
SortedSet: like a Set, but order is important
List: may contain duplicate elements, order is important
Java also supplies some “collection-like” things:
Map: a “dictionary” that associates keys with values, order is
not important
SortedMap: like a Map, but order is important
The Collections hierarchy
Uniformity through interfaces
Much of the elegance of the Collections Framework
arises from the intelligent use of interfaces
For example, the Collection interface specifies
(among many other operations):
boolean add(Object o)
boolean isEmpty()
boolean remove()
int size()
Object[] toArray()
Iterator iterator()
Creating lists in Java
myList:
44
97
class Cell {
int value;
Cell next;
Cell (int v, Cell n) { // constructor
value = v;
next = n;
}
}
Cell temp = new Cell(17, null);
temp = new Cell(23, temp);
temp = new Cell(97, temp);
Cell myList = new Cell(44, temp);
23
17
A short list of categories
Algorithm types we will consider include:
Simple recursive algorithms
Backtracking algorithms
Divide and conquer algorithms
Dynamic programming algorithms
Greedy algorithms
Branch and bound algorithms
Brute force algorithms
Randomized algorithms
Example recursive algorithms
To count the number of elements in a list:
If the list is empty, return zero; otherwise,
Step past the first element, and count the remaining elements
in the list
Add one to the result
To test if a value occurs in a list:
If the list is empty, return false; otherwise,
If the first thing in the list is the given value, return true;
otherwise
Step past the first element, and test whether the value occurs
in the remainder of the list
Example backtracking algorithm
To color a map with no more than four colors:
color(Country n):
If all countries have been colored (n > number of countries) return
success; otherwise,
For each color c of four colors,
If country n is not adjacent to a country that has been
colored c
Color country n with color c
recursively color country n+1
If successful, return success
If loop exits, return failure
Example greedy algorithm
Suppose you want to count out a certain amount of
money, using the fewest possible bills and coins
A greedy algorithm would do this would be:
At each step, take the largest possible bill or coin
that does not overshoot
Example: To make $6.39, you can choose:
a $5 bill
a $1 bill, to make $6
a 25¢ coin, to make $6.25
A 10¢ coin, to make $6.35
four 1¢ coins, to make $6.39
For US money, the greedy algorithm always gives
the optimum solution
Time and space
To analyze an algorithm means:
developing a formula for predicting how fast an
algorithm is, based on the size of the input (time
complexity), and/or
developing a formula for predicting how much memory
an algorithm requires, based on the size of the input
(space complexity)
Usually time is our biggest concern
Most algorithms require a fixed amount of space
y = x2 + 3x + 5, for x=1..20
The End