CMP2003 Lecturenotes Week9

Download as pdf or txt
Download as pdf or txt
You are on page 1of 25

Data Structures Using C++ 2E

Chapter 9
Searching Algorithms
Objectives

• Learn the various search algorithms


• Explore how to implement the sequential and binary
search algorithms
• Discover how the sequential and binary search
algorithms perform
• Become aware of the lower bound on comparison-
based search algorithms

Data Structures Using C++ 2E 2


Search Algorithms

• Item key
– Unique member of the item
– Used in searching, sorting, insertion, deletion
• Number of key comparisons
– Comparing the key of the search item with the key of
an item in the list
• We can use class arrayListType (Chapter 3)
– For easy reference
– Implements a list and basic operations in an array

Data Structures Using C++ 2E 3


Sequential Search

• Array-based lists
– Covered in Chapter 3
• Linked lists
– Covered in Chapter 5
• Works the same for array-based lists and linked lists
• See code on page 499

Data Structures Using C++ 2E 4


Sequential Search Analysis

• Sequential search algorithm performance


– Examine worst case and average case
– Count number of key comparisons
• Unsuccessful search
– Search item not in list
– Make n comparisons
• Conducting algorithm performance analysis
– Best case: make one key comparison
– Worst case: algorithm makes n comparisons

Data Structures Using C++ 2E 5


Sequential Search Analysis (cont’d.)

• Determining the average number of comparisons


– Consider all possible cases
– Find number of comparisons for each case
– Add number of comparisons, divide by number of
cases

Data Structures Using C++ 2E 6


Sequential Search Analysis (cont’d.)

• Determining the average number of comparisons


(cont’d.)

Data Structures Using C++ 2E 7


Sequential Search Analysis (cont’d.)

Data Structures Using C++ 2E


Ordered Lists

• Elements ordered according to some criteria


– Usually, ascending order
• Operations
– Same as those on an unordered list
• Determining if list is empty or full, determining list
length, printing the list, clearing the list
• Defining ordered list as an abstract data type (ADT)
– Use inheritance to derive the class to implement the
ordered lists from class arrayListType
– Define two classes

Data Structures Using C++ 2E 9


Ordered Lists (cont’d.)

Data Structures Using C++ 2E 10


Binary Search
• Performed only on ordered lists
• Uses divide-and-conquer technique
• Example: Determine if 75 is in the list:

FIGURE 9-1 List of length 12

FIGURE 9-2 Search list, list[0]...list[11]

FIGURE 9-3 Search list, list[6]...list[11]

Data Structures Using C++ 2E 11


Binary Search (cont’d.)

• C++ function implementing binary search algorithm

Data Structures Using C++ 2E 12


Binary Search (cont’d.)
• Example 9-1

FIGURE 9-4 Sorted list for a binary search

TABLE 9-1 Values of first, last, and mid and the


number of comparisons for search item 89

Data Structures Using C++ 2E 13


Binary Search (cont’d.)
TABLE 9-2 Values of first, last, and mid and the
number of comparisons for search item 34

TABLE 9-3 Values of first, last, and mid and the


number of comparisons for search item 22

Running time of binary search is:


T(n)= O(log2n) = O(lgn)
Data Structures Using C++ 2E 14
Insertion into an Ordered List

• After insertion: resulting list must be ordered


– Find place in the list to insert item
• Use algorithm similar to binary search algorithm
– Slide list elements one array position down to make
room for the item to be inserted
– Insert the item
• Use function insertAt (class arrayListType)

Data Structures Using C++ 2E 15


Insertion into an Ordered List (cont’d.)

• Algorithm to insert the item


• Function insertOrd implements algorithm

Data Structures Using C++ 2E 16


Data Structures Using C++ 2E 17
Insertion into an Ordered List (cont’d.)

• Add binary search algorithm and the insertOrd


algorithm to the class orderedArrayListType

Data Structures Using C++ 2E 18


Insertion into an Ordered List (cont’d.)
• class orderedArrayListType
– Derived from class arrayListType
– List elements of orderedArrayListType
• Ordered
• Must override functions insertAt and insertEnd
of class arrayListType in class
orderedArrayListType
– If these functions are used by an object of type
orderedArrayListType, list elements will remain
in order

Data Structures Using C++ 2E 19


Insertion into an Ordered List (cont’d.)

• Can also override function seqSearch


– Perform sequential search on an ordered list
• Takes into account that elements are ordered

Data Structures Using C++ 2E 20


Sequential Search vs Binary Search

• Number of comparisons for a list of length 1024=210


– Sequential search : 1024 at most
– Binary search : 2*11=22 at most
• Time complexity
– Sequential search : O(n)
– Binary search: <2log(n+1)> O(logn)

Data Structures Using C++ 2E 21


Lower Bound on Comparison-Based
Search Algorithms
• Comparison-based search algorithms
– Search list by comparing target element with list
elements
• Sequential search: order n
• Binary search: order log2n

Data Structures Using C++ 2E 22


Lower Bound on Comparison-Based
Search Algorithms (cont’d.)
• Devising a search algorithm with order less than
log2n
– Obtain lower bound on number of comparisons
• Cannot be comparison based

Data Structures Using C++ 2E 23


Summary
• Sequential search
– Order n
• Ordered lists
– Elements ordered according to some criteria
• Binary search
– Order log2n

Data Structures Using C++ 2E 24


Programming Exercises

• Chapter 9 – Exercise 1
• Chapter 9 – Exercise 2

Data Structures Using C++ 2E 25

You might also like