Presentation is loading. Please wait.

Presentation is loading. Please wait.

Searching Chapter 10. 2 Chapter Contents The Problem Searching an Unsorted Array Iterative Sequential Search Recursive Sequential Search Efficiency of.

Similar presentations


Presentation on theme: "Searching Chapter 10. 2 Chapter Contents The Problem Searching an Unsorted Array Iterative Sequential Search Recursive Sequential Search Efficiency of."— Presentation transcript:

1 Searching Chapter 10

2 2 Chapter Contents The Problem Searching an Unsorted Array Iterative Sequential Search Recursive Sequential Search Efficiency of Sequential Search Searching a Sorted Array Sequential search Binary Search Java Class Library: the Method binarySearch Searching an Unsorted Chain Iterative Sequential Search Recursive Sequential Search Efficiency of Sequential Search of a Chain Searching a Sorted Chain Sequential Search Binary Search Choosing a Search Method

3 3 The Problem Fig. 1 Searching is an every day occurrence.

4 4 Searching an Unsorted Array A method that uses a loop to search an array. public boolean contains(Object anEntry) {boolean found = false; for (int index = 0; !found && (index < length); index++) {if (anEntry.equals(entry[index])) found = true; } // end for return found; } // end contains

5 5 Searching an Unsorted Array Fig. 2 An iterative sequential search of an array that (a) finds its target; (b) does not find its target

6 6 Searching an Unsorted Array Pseudocode for a recursive algorithm to search an array. Algorithm to search a[first] through a[last] for desiredItem if (there are no elements to search) return false else if (desiredItem equals a[first]) return true else return the result of searching a[first+1] through a[last]

7 7 Searching an Unsorted Array Fig. 3 A recursive sequential search of an array that (a) finds its target; (b) does not find its target.

8 8 Efficiency of a Sequential Search Best caseO(1) Locate desired item first Worst caseO(n) Must look at all the items Average caseO(n) Must look at half the items O(n/2) is still O(n)

9 9 Searching a Sorted Array A sequential search can be more efficient if the data is sorted Fig. 4 Coins sorted by their mint dates.

10 10 Binary Search of Sorted Array Fig. 5 Ignoring one-half of the data when the data is sorted.

11 11 Binary Search of Sorted Array Algorithm for a binary search Algorithm binarySearch(a, first, last, desiredItem) mid = (first + last)/2 // approximate midpoint if (first > last) return false else if (desiredItem equals a[mid]) return true else if (desiredItem a[mid] return binarySearch(a, mid+1, last, desiredItem)

12 12 Binary Search of Sorted Array Fig. 6 A recursive binary search of a sorted array that (a) finds its target;

13 13 Binary Search of Sorted Array Fig. 6 A recursive binary search of a sorted array that (b) does not find its target.

14 14 Java Class Library: The Method binarySearch The class Arrays in java.util defines versions of a static method with following specification: /** Task: Searches an entire array for a given item. * @param array the array to be searched * @param desiredItem the item to be found in the array * @return index of the array element that equals desiredItem; * otherwise returns -belongsAt-1, where belongsAt is * the index of the array element that should contain * desiredItem */ public static int binarySearch(type[] array, type desiredItem);

15 15 Efficiency of a Binary Search Best caseO(1) Locate desired item first Worst caseO(log n) Must look at all the items Average caseO(log n)

16 16 Iterative Sequential Search of an Unsorted Chain Fig. 7 A chain of linked nodes that contain the entries in a list.

17 17 Iterative Sequential Search of an Unsorted Chain Implementation of iterative sequential search public boolean contains(Object anEntry) {boolean found = false; Node currentNode = firstNode; while (!found && (currentNode != null)) {if (anEntry.equals(currentNode.getData())) found = true; else currentNode = currentNode.getNextNode(); } // end while return found; } // end contains

18 18 Recursive Sequential Search of an Unsorted Chain Recursive search method /** Task: Recursively searches a chain of nodes for desiredItem, * beginning with the node that current references. */ private boolean search(Node current, Object desiredItem) {boolean found; if (current = = null) found = false; else if (desiredItem.equals(current.getData())) found = true; else found = search(current.getNextNode(), desiredItem); return found; } // end search

19 19 Efficiency of a Sequential Search of a Chain Best caseO(1) Locate desired item first Worst caseO(n) Must look at all the items Average caseO(n) Must look at half the items O(n/2) is just O(n)

20 20 Searching a Sorted Chain Method to search a sorted chain public boolean contains(Object anEntry) {boolean found = false; Comparable entry = (Comparable)anEntry; Node currentNode = firstNode; while ( (currentNode != null) && (entry.compareTo(currentNode.getData()) > 0) ) {currentNode = currentNode.getNextNode(); } // end while if ( (currentNode != null) && entry.equals(currentNode.getData()) ) {found = true; } // end if return found; } // end contains Note: Binary search of a chain of linked nodes is impractical.

21 21 Choosing a Search Method Iterative search saves time, memory over recursive search Best Case Average Case Worst Case Sequential search (unsorted data) O(1)O(n) Sequential search (sorted data) O(1)O(n) Binary Search (sorted array) O(1)O(log n)


Download ppt "Searching Chapter 10. 2 Chapter Contents The Problem Searching an Unsorted Array Iterative Sequential Search Recursive Sequential Search Efficiency of."

Similar presentations


Ads by Google