Lecture 23
Second Exam: Tomorrow
Focus of Exam
JavaScript
Fire in the Valley: Chapters 5 - 8
Closed Books & Notes, but
can
bring 1 sheet of scribblings
Volunteer Opportunity
Design a Web Page for
The Middlebury Fire Department
Volunteer Coordinator
Community Service Office
Middlebury College
802-443-3099
Linear Search
Verbal Description:
If identical, stop.
Otherwise move to the next element
Repeat
LinearSearch(Low,High)
if (Target == TheArray[Low] ) STOP;
else LinearSearch(Low+1, Search)
(Need to clean up to handle what happens if Low = High
and Target not yet found)
LINEAR SEARCH
INITIAL STEP
AFTER 1 STEP
AFTER 2 STEPS
Binary Search
Verbal Description:
If "Yes" then throw away bottom half of list
If "No" then throw away top half of list
Repeat until list has one element.
Is Target = remaining element?
{ (provide escape clause when High = Low+1) else
Middle = Math.floor( (Low + High)/2 );
if ( Target >= TheArray[Middle] )
Low = Middle;
else High = Middle;
Binary(Low, High);
BINARY SEARCH
INITIAL STEP
AFTER 1 STEP
AFTER 2 STEPS
AFTER 3 STEPS
Example: Is Homer in the List?
List is:
1) Andrew | 9) Colin | 17) Kennan | 25) Rebecca |
2) Annalise | 10) DavidM | 18) Liz | 26) RyanB |
3) Beth | 11) DavidR | 19) Louisa | 27) RyanP |
4) Bob | 12) DavidS | 20) Matt | 28) Ted |
5) Brendan | 13) Eliza | 21) Megan | 29) Tejas |
6) Casey | 14) John | 22) Missy | 30) Trevor |
7) CharlesM | 15) Jordan | 23) Nathaniel | 31) Tyler |
8) CharlesR | 16) Kate | 24) Rada | 32) Veljko |
Step 1: Could Target be in second half of the list?
Is Homer >= Name[17]?
Is Homer >= Kennan?
No
List is:
1) Andrew | 9) Colin |
2) Annalise | 10) DavidM |
3) Beth | 11) DavidR |
4) Bob | 12) DavidS |
5) Brendan | 13) Eliza |
6) Casey | 14) John |
7) CharlesM | 15) Jordan |
8) CharlesR | 16) Kate |
Step 2: Could Target be in second half of the list?
Is Homer >= Name[9]?
Is Homer >= Colin?
Yes
List is:
9) Colin |
10) DavidM |
11) DavidR |
12) DavidS |
13) Eliza |
14) John |
15) Jordan |
16) Kate |
Step 3: Could Target be in second half of the list?
Is Homer >= Name[13]?
Is Homer >= Eliza?
Yes
List is:
13) Eliza |
14) John |
15) Jordan |
16) Kate |
Step 4: Could Target be in second half of the list?
Is Homer >= Name[15]?
Is Homer >= Jordan?
NO
List is:
13) Eliza |
14) John |
Step 5: Could Target be in second half of the list?
Is Homer >= Name[14]?
Is Homer >= John?
NO
List is:
13) Eliza |
Step 6: Is Target the remaining element?
Is Homer = Name[13]?
Is Homer = Eliza?
Example: Is Ted in the List?
List is:
1) Andrew | 9) Colin | 17) Kennan | 25) Rebecca |
2) Annalise | 10) DavidM | 18) Liz | 26) RyanB |
3) Beth | 11) DavidR | 19) Louisa | 27) RyanP |
4) Bob | 12) DavidS | 20) Matt | 28) Ted |
5) Brendan | 13) Eliza | 21) Megan | 29) Tejas |
6) Casey | 14) John | 22) Missy | 30) Trevor |
7) CharlesM | 15) Jordan | 23) Nathaniel | 31) Tyler |
8) CharlesR | 16) Kate | 24) Rada | 32) Veljko |
Step 1: Could Target be in second half of the list?
Is Ted >= Name[17]?
Is Ted >= Kennan?
Yes
List is:
17) Kennan | 25) Rebecca |
18) Liz | 26) RyanB |
19) Louisa | 27) RyanP |
20) Matt | 28) Ted |
21) Megan | 29) Tejas |
22) Missy | 30) Trevor |
23) Nathaniel | 31) Tyler |
24) Rada | 32) Veljko |
Step 2: Could Target be in second half of the list?
Is Ted >= Name[25]?
Is Ted >= Rebecca?
Yes
List is:
25) Rebecca |
26) RyanB |
27) RyanP |
28) Ted |
29) Tejas |
30) Trevor |
31) Tyler |
32) Veljko |
Step 3: Could Target be in second half of the list?
Is Ted >= Name[29]?
Is Ted >= Tejas?
No
List is:
25) Rebecca |
26) RyanB |
27) RyanP |
28) Ted |
Step 4: Could Target be in second half of the list?
Is Ted >= Name[27]?
Is Ted >= RyanP?
Yes
List is:
27) RyanP |
28) Ted |
Step 5: Could Target be in second half of the list?
Is Ted >= Name[27]?
Is Ted >= Ted?
NO
List is:
28) Ted |
Step 6: Is Target the remaining element?
Is Ted = Name[28]?
Is Ted = Ted?
Does Binary Search Work?
Is it Efficient?
If it takes 6 steps to search a list of
32 names, how many
steps does it take to search a list of 64 names?
Each doubling of the list size only increases the number of comparisons by 1.
With n comparisons,
we can search an ordered list of 2^n elements.
Array size | Number of steps |
1000 | 10 |
1,000,000 | 20 |
1,000,000,000 | 30 |
Multiple-Subscripted Arrays
Arrays and Computer
Dating Services
#1 | #2 | #3 | #4 | #5 | #6 | #7 | #8 | #9 | #10 | |
Andrew | Yes | No | No | Yes | Yes | Yes | Yes | No | No | No |
Annalise | Yes | Yes | Yes | No | No | Yes | No | No | Yes | Yes |
Beth | Yes | Yes | No | No | Yes | No | Yes | Yes | Yes | Yes |
Bob | No | Yes | Yes | Yes | No | No | No | Yes | No | No |
Brendan | Yes | No | Yes | Yes | Yes | No | No | Yes | Yes | Yes |
Casey | Yes | No | Yes | Yes | No | Yes | Yes | No | Yes | Yes |
Charles M | Yes | No | No | Yes | Yes | No | Yes | Yes | No | Yes |
Charles R | No | Yes | No | Yes | Yes | No | No | Yes | No | No |
Colin | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes |
David M | Yes | No | Yes | Yes | No | Yes | No | Yes | Yes | No |
David R | No | No | No | No | No | Yes | Yes | Yes | Yes | No |
David S | Yes | No | No | Yes | No | Yes | No | No | No | Yes |
Eliza | Yes | Yes | No | Yes | Yes | No | No | Yes | Yes | Yes |
John | No | Yes | No | Yes | Yes | No | Yes | No | No | Yes |
Jordan | Yes | Yes | No | Yes | Yes | No | Yes | No | Yes | No |
Kate | Yes | No | No | No | No | No | Yes | Yes | No | Yes |
Kennan | Yes | Yes | No | No | No | No | No | Yes | No | Yes |
Liz | No | Yes | No | Yes | Yes | No | No | No | Yes | Yes |
Louisa | Yes | No | No | Yes | No | No | Yes | Yes | No | No |
Matt | No | Yes | No | No | Yes | Yes | No | Yes | Yes | No |
Megan | Yes | No | No | Yes | Yes | Yes | Yes | No | Yes | No |
Missy | No | No | No | Yes | No | No | No | Yes | No | No |
Nathaniel | Yes | No | No | No | Yes | No | No | Yes | No | Yes |
Rada | No | No | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes |
Rebecca | No | Yes | No | Yes | No | No | No | Yes | No | Yes |
Ryan B | Yes | No | Yes | Yes | Yes | Yes | No | No | Yes | No |
Ryan P | Yes | Yes | No | No | Yes | No | No | No | Yes | Yes |
Ted | Yes | No | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes |
Tejas | Yes | No | Yes | Yes | No | No | Yes | Yes | Yes | No |
Trevor | No | Yes | No | Yes | No | Yes | Yes | No | No | Yes |
Tyler | No | Yes | No | No | No | No | Yes | Yes | Yes | No |
Veljko | No | Yes | Yes | Yes | No | No | Yes | No | No | Yes |
Casey | Yes | No | Yes | Yes | No | Yes | Yes | No | Yes | Yes | |
Eliza | Yes | Yes | No | Yes | Yes | No | No | Yes | Yes | Yes | 4 |
Casey | Yes | No | Yes | Yes | No | Yes | Yes | No | Yes | Yes | |
Louisa | Yes | No | No | Yes | No | No | Yes | Yes | No | No | 5 |
Brendan | Yes | No | Yes | Yes | Yes | No | No | Yes | Yes | Yes | |
Casey | Yes | No | Yes | Yes | No | Yes | Yes | No | Yes | Yes | 6 |
Array of 32 students
Each student is represented
by an array of 11 elements
An Array of Arrays
<HTML>
<HEAD>
<TITLE>Presidents</TITLE>
<SCRIPT LANGUAGE = "Javascript">
var President = new Array(5);
for (i = 0; i <= 4; i = i + 1)
President[i] = new Array(3);
President[0] [0] = "Name"
President[0] [1] = "Home State"
President[0] [2] = "Year Elected"
President[1] [0] = "Ronald Reagan"
President[1] [1] = "California"
President[1] [2] = "1980, 1988"
President[2] [0] = "George Bush"
President[2] [1] = "Maine"
President[2] [2] = "1988"
President[3] [0] = "Bill Clinton"
President[3] [1] = "Arkansas"
President[3] [2] = "1992, 1996"
President[4] [0] = "George W. Bush"
President[4] [1] = "Texas"
President[4] [2] = "2000"
document.writeln("<TABLE BORDER = '2' WIDTH = '100%' > ") ;
for (i = 0; i <= 4; i = i + 1)
{ for (j=0; j<=2; j=j+1)
document.writeln("<TD><H1>" + President[i][j] + "</TD>");
document.writeln("<TR>");
}
document.writeln(" </TABLE> ");
</SCRIPT>
</HEAD>
<BODY BGCOLOR = "cadetblue">
</BODY>
</HTML>