Sequential and Binary Search

advertisement
Sequential and Binary Search
Computer Science I --- Haas
How can we find something in a list?
A linear or sequential search is a method for finding a particular item in a list. It consists
of checking every item, one at a time and in sequence, until the desired one is found.
Linear search is the simplest search algorithm, but it is not very efficient.
A binary search compares the search item to the middle element of the list. If it matches
the item has been found. Otherwise, if the search item is less than the middle element, the
algorithm repeats the search on the first half of the list, if the search item greater the
algorithm repeats the search on the second half of the list. This process continues until the
item is found or it can be determined that the item is not in the list.
One advantage of a linear search is that it can be performed on a list that is unsorted. A
binary search can only be performed on a sorted list.
From your classes folder open: searching - NOT COMPLETE
Once you start making changes to it, save your version as: LASTNAME-searching
Assignment: You will complete two blocks.
Implement using a linear or
sequential search.
Implement using a binary
search.
You will need to show Haas code for both searches.
1) Sequential search: Implement the block: find in unsorted list. The block should accept
a word to search for and a list of words as input, and return the index of the word’s
position in the list. The block should return the location of the word, or -1 if the word
doesn't exist in the list.
See next page for an hint…
Below is the partially compete block to perform a sequential search. It looks for word in
list. Notice that if the word is not found it will repeat until it reaches the end of the list.
Inside the repeat-block you should have an if-block that checks to see if the word is found
and, if found, reports that index.
If you reach the end of the list you should report -1 to indicate that the word is not found in
the list.
2) Binary search: Implement the block: find in sorted list. The block should accept a word
to search for and a list of words as input, and return the index of the word’s position in the
list. Searching through sorted data, while faster, also requires a more complicated block.
Below is the partially compete block to perform a binary search. It looks for word in list.
Notice that if the word is not found it will repeat until mix index > max index.
See next page for an example…
Here's how things should generally work on a list of numbers:
1. The range of possibilities starts off including every number in the list (the minimum
is position #1 and the maximum is the final position). Let's say that we're searching
for the number 10 as shown in the diagram. Start your search around the middle of
the list. Check the value of the number there.
2. If the number at the spot you searched is greater than 10, set the maximum to the
slot one before the one you just searched. If the number is smaller than 10, set the
minimum to one after the one you searched.
3. Check the middle position of your new range.
4. Repeat step 2 for this new range and reduce the range further. Continue to repeat
steps 2 & 3 until either (a) you find the number you're looking for or (b) you get in a
position where the minimum is greater than the maximum of the range.
min index
min index
index
max index
index
min index
max index
index
max index
max index
min index
Found at position 4!
index
When your code is complete run both searches 10 times
each. Keep track of the amount of time it took using each
strategy. Record the best time, worst time, and average
time for each.
Download