2015 DS Labs
by: Prof. J. Chen
2015.09.14
LabArrayList
LabArrayList&LinkedList
LabRedBlackTree
LabTreeSet
LabGraph (To be done)
LabCompare4DS
Instructions on the Labs:
The grading is based on READABILITY. You need good header, pseudo-code,
and names.
LabArrayList
Insert ("add" in ArrayList) one million randomly-generated grades from 0 to 100 to anArrayList.
Then, search for the max grade in the list, and record the search time.
If there are multiple answers, return one at the highest index.
You can handle exceptions to get bonus point.
Use the following data names:
aGrade
- a grade to be inserted to an ArrayList.
anArrayList - an ArrayList object to hold the inserted grades.
maxGrade - the max grade in the ArrayList.
endTime - ending time of the search.
searchTime - endTime minus startTime.
startTime - start time of the search.
/*------------------------------------------------------------------------------prepareGrades () puts all the grades in anArrayList
returns: anArrayList
-----------------------------------------------------------------------------------*/
1. randomly generate aGrade (0-100)
2. insert aGrade into anArrayList
3. do 1,2 for one million times
4. return anArrayList
/*-----------------------------------------------------------------------------------------searchMaxGrade () looks for max grade in anArrayList
Example result:
The max grade is 100 and the search time is 12 milliseconds for ArrayList.
-------------------------------------------------------------------------------------------*/
1. record startTime.
2. let the first grade be maxGrade
3. if the next grade >= maxGrade then let it be maxGrade
4. do 2,3 for one million times
5. record endTime.
6. get searchTime.
7. Print maxGrade and searchTime
LabArrayList&LinkedList
Add LinkedList to the previous lab.
/*------------------------------------------------------------------------------prepareGradesInArrayList () puts all the grades in anArrayList
returns: anArrayList, which is an object of ArrayList class
-----------------------------------------------------------------------------------*/
/*------------------------------------------------------------------------------prepareGradesInLinkedList () puts all the grades in aLinkedList
returns: aLinkedList, which is an object of LinkedList class
-----------------------------------------------------------------------------------*/
/*------------------------------------------------------------------searchMaxGrade (whichDS) looks for the max grade in anArrayList or aLinkedList
parameter: whichDS means which data structure (DS), either “anArrayList” or
“aLinkedList”
Example result:
The max grade is 100 and the search time is 12 milliseconds for ArrayList.
OR
The max grade is 100 and the search time is 19 milliseconds for LinkedList.
----------------------------------------------------------------------*/
LabRedBlackTree
Study the class notes of Chap. 12, pp. 19-25 to develop the red-black tree insert
method specified below:
/*--------------------------------------------------------------------red black trees (RBT) insert() puts anElement into the tree
----------------------------------------------------------------------*/
RBT.Entry RBTinsert (anElement)
In that method, you need binary search tree (BST) “add” method, BSTinsert() (see
class note Chap. 10, p.35). You also need “rotation” method (see p.80, pp. 67-81 of
Chap. 10).
Turn in 2 classes:
1) a Main class with main (), and
2) a RBT class with 7 methods:
RBT() constructor,
RBTinsert (),
BSTinsert(),
rotateRight(),
rotateLeft(),
recolor(x)
inOrder () (See class note Chap. 9, p.71).
Be sure to have readable headers for class and method.
You can paste design sketches in class notes to improve its readability.
Most importantly, give Big O worst time estimate for each method.
Instructions on LabRedBlackTree
Strictly follow the design below:
main ()
1. call RBT() to construct an empty red-black tree called “t”
2. call the above “RBTinsert” 4 times to insert 3, 1, 4, and 2 to “t”,
respectively
3. call a recursive “inOrder” method to traverse “t” to print out the
followings:
1 black 2 red 3 black 4 black
public class RBT
//red-black trees (RBT)
private static final boolean RED
= false;
private static final boolean BLACK =true;
public class Entry <E> { fill in here the code of class Entry shown below}
public inOrder ()
public RBT () {Entry <Integer> t=null; return t;}
public RBTinsert ()
private recolor(x) {if color of x is red, recolor it to black; else to red end if}
private rotateRight();
private rotateLeft();
private BSTinsert(); //binary search trees (BST) insert
end of class RBT
protected static class Entry<E>
{
protected E
element;
protected Entry<E> left
= null,
right = null,
parent;
boolean color;
protected Entry (E element, Entry<E> parent)
{this.element = element; this.parent = parent; color=RED;}
} // end of class Entry
LabTreeSet
First, you import the two utilities below:
import java.util.Iterator;
import java.util.TreeSet;
and you construct an empty TreeSet called “t”. Then, you call “add” of TreeSet class 4
times to insert 3, 1, 4, and 2 to “t”, respectively. Last, you construct an iterator to
traverse “t” to print out the followings:
1 2 3 4
LabGraph
For the graph below, use 1) TreeMap and 2) HashMap, respectively, to model it.
Scenario 1: From Karen to Don is 7.4 km
Scenario 2: From Karen to Tara is 18.3 km
Scenario 3: From Mark to Karen Sorry, you cannot get there.
LabCompare4DS
Use 4 data structures (4DS) below:
0)
1)
2)
3)
“ArrayList”,
“LinkedList”,
“TreeMap”,
“HashMap”
to store a big data set of one million elements with ID from 0 to 999,999.
In a list, an element contains a grade.
In a map, a mapping contains both ID (as key) and grade (as value).
Use Java Random class to obtain a grade so you do not need to prepare a big input
text file. Then, do run-time analysis on the data structures.
You will see some data structure is slower than others!
/****************************************************
LAB Compare 4 DS
By 張一二 2015.09.13
隨機產生一百萬筆 aGrade 資料 每筆資料分別存入下列四種資料結構:
0) anArrayList,
1)
aLinkedList,
aTreeMap,
3) aHashMap
2)
Example result:
請輸入ID 400000 (red means user input)
ID: 400000
Grade: 91
各資料結構搜尋時間:
ArrayList
80 milliseconds
LinkedList
92 milliseconds
TreeMap
8 milliseconds
HashMap
2 milliseconds
*****************************************************/
class Main
static int[4]
grades
// hold aGrade of ID for 4 data structures.
static double[4] searchTimes // hold searchTime of 4 data structures
main() {
1.
construct 4 empty data structures: 0) anArrayList, 1) aLinkedList, 2) aTreeMap, and
3) aHashMap with n= 1000000, m=1250000 (load factor: 1000000/1250000 = 0.8)
2.
for ID from 0 upto 999,999
1.
randomly generate a grade (aGrade) with range 0..100
2.
store aGrade into 0) anArrayList and 1) aLinkedList
3.
store ID (as key) and aGrade (as value) into 2) aTreeMap and 3) aHashMap
end for
3.
for DSindex from 0 upto 3 (for each of 4 DS, data structures)
call search (DSindex, 400000)
end for
4.
prompt for ID and print result
} // end of main()
/*--------------------------------------------------------------------search() looks for the grade of the given ID stored in 4 data structures.
It also records the search time for each.
Parameters: DSindex
ID
specifies which of the 4 data structures (0 to 3)
specifies the student ID to search
--------------------------------------------------------------------------------*/
private void search (int DSindex, int ID)
1.get startTime by system clock
2.case (DSindex)
0: from anArrayList get aGrade of ID
1: from aLinkedList
do the same
2: from aTreeMap
do the same
3: from aHashMap
do the same
3.get endTime by system clock
4.searchTime is endTime minus startTime
5.store searchTime into searchTimes[DSindex]
6.store aGrade into grades[DSindex]
end of search()
end of class Main
Download

2015 DS Labs by: Prof. J. Chen 2015.09.14 LabArrayList