Cover page images (keyboard)

Searching and Algorithm Analysis

Sue Evans & Travis Mayberry



Searching

Linear Search

# linearSearch() searches for the item in myList and returns
# the index of item in the list myList, or -1 if not found.
# Inputs: item, the item to search for
#         myList, the list to search for item
# Output: the index where item was found or -1 if index was 
#         not in the list  
def linearSearch(item, myList):

    for index in range(len(myList)):
        if myList[index] == item:
            return index

    return -1

Analysis

Linear Search Analysis

Analysis Metric

Improving Search

Binary Search

For example, suppose we were trying to find the word "strawberry".

Another example, finding "banana".

Binary Search Code

# binarySearch() performs a binary search for an item in a list
# Inputs: list, the list to search
#         item, the item to search for
# Output: the index of item in the list, or -1 if not found
def binarySearch(list, item):

    low = 0
    high = len(list) - 1

    while low <= high:

        mid = (low + high) / 2


        # if found return the index
        if item == list[mid]:
            return mid

        # if item is in the 2nd half of the list
        elif item > list[mid]:
            low = mid + 1

        # if item is in the 1st half of the list
        else:
            high = mid - 1

    # item was not in list
    return -1

Analysis of Binary Search

How fast is log2(n) ?

How many accesses will it take to find X as we increase N ?

N
log2(N)
1
1
10
3
100
7
1,000
10
1,000,000
20

Keep in mind that a linear search of a list containing 1,000,000 items would require 1,000,000 accesses in the worst case.

So binary search which runs in log2(n) is amazingly fast!