0% found this document useful (0 votes)
51 views

CMP2003 Lecturenotes Week9

This document summarizes search algorithms in chapter 9 of the book "Data Structures Using C++ 2E". It covers sequential search which has order n time complexity, binary search which has order log2n time complexity for ordered lists, and explains that the lower bound on comparison-based search algorithms is order log2n. It provides examples and pseudocode for implementing sequential search, binary search, and insertion into an ordered list using binary search.

Uploaded by

Ammar Jagadhita
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
51 views

CMP2003 Lecturenotes Week9

This document summarizes search algorithms in chapter 9 of the book "Data Structures Using C++ 2E". It covers sequential search which has order n time complexity, binary search which has order log2n time complexity for ordered lists, and explains that the lower bound on comparison-based search algorithms is order log2n. It provides examples and pseudocode for implementing sequential search, binary search, and insertion into an ordered list using binary search.

Uploaded by

Ammar Jagadhita
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 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