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>