Searching and Sorting I 1 Searching and Sorting 1.

Slides:



Advertisements
Similar presentations
Zabin Visram Room CS115 CS126 Searching
Advertisements

Sorting. “Sorting” When we just say “sorting,” we mean in ascending order (smallest to largest) The algorithms are trivial to modify if we want to sort.
Search and Recursion CS221 – 2/23/09. List Search Algorithms Linear Search: Simple search through unsorted data. Time complexity = O(n) Binary Search:
©TheMcGraw-Hill Companies, Inc. Permission required for reproduction or display. Chapter 11: Sorting and Searching  Searching Linear Binary  Sorting.
Searching. 2 Searching an array of integers If an array is not sorted, there is no better algorithm than linear search for finding an element in it static.
Chapter 11 Sorting and Searching. Copyright © 2005 Pearson Addison-Wesley. All rights reserved Chapter Objectives Examine the linear search and.
Analysis of Algorithms. Time and space To analyze an algorithm means: –developing a formula for predicting how fast an algorithm is, based on the size.
Searching Chapter Chapter Contents The Problem Searching an Unsorted Array Iterative Sequential Search Recursive Sequential Search Efficiency of.
Quicksort. Quicksort I To sort a[left...right] : 1. if left < right: 1.1. Partition a[left...right] such that: all a[left...p-1] are less than a[p], and.
ICS201 Lecture 20 : Searching King Fahd University of Petroleum & Minerals College of Computer Science & Engineering Information & Computer Science Department.
Searching Algorithms. Lecture Objectives Learn how to implement the sequential search algorithm Learn how to implement the binary search algorithm To.
Quicksort.
Quicksort
Searching. 2 Searching an array of integers If an array is not sorted, there is no better algorithm than linear search for finding an element in it static.
1 © 2006 Pearson Addison-Wesley. All rights reserved Searching and Sorting Linear Search Binary Search ; Reading p Selection Sort ; Reading p
CHAPTER 11 Searching. 2 Introduction Searching is the process of finding a target element among a group of items (the search pool), or determining that.
Searching/Sorting Introduction to Computing Science and Programming I.
Searching. Searching an array of integers If an array is not sorted, there is no better algorithm than linear search for finding an element in it static.
Searching Arrays Linear search Binary search small arrays
Searching Chapter 18 Copyright ©2012 by Pearson Education, Inc. All rights reserved.
Searching Chapter Chapter Contents The Problem Searching an Unsorted Array Iterative Sequential Search Recursive Sequential Search Efficiency of.
Searching1 Searching The truth is out there.... searching2 Serial Search Brute force algorithm: examine each array item sequentially until either: –the.
1 © 2006 Pearson Addison-Wesley. All rights reserved Searching and Sorting Linear Search Binary Search -Reading p
CS 106 Introduction to Computer Science I 10 / 16 / 2006 Instructor: Michael Eckmann.
Comparing Objects in Java. The == operator When you define an object, for instance Person p = new Person("John", 23); we talk about p as if its value.
The Binary Search Textbook Authors: Ken Lambert & Doug Nance PowerPoint Lecture by Dave Clausen
Chapter 8 ARRAYS Continued
Searching Also: Logarithms. 2 Searching an array of integers If an array is not sorted, there is no better algorithm than linear search for finding an.
Set, TreeSet, TreeMap, Comparable, Comparator. Def: The abstract data type set is a structure that holds objects and satifies ARC: Objects can be added.
(c) University of Washingtonhashing-1 CSC 143 Java Hashing Set Implementation via Hashing.
Chapter 5 Ordered List. Overview ● Linear collection of entries  All the entries are arranged in ascending or descending order of keys.
Week 11 Introduction to Computer Science and Object-Oriented Programming COMP 111 George Basham.
Searching Also: Logarithms. 2 Searching an array of integers If an array is not sorted, there is no better algorithm than linear search for finding an.
(C) 2010 Pearson Education, Inc. All rights reserved. Java How to Program, 8/e.
Chapter 19 Searching, Sorting and Big O
Puzzle 3 1  Write the class Enigma, which extends Object, so that the following program prints false: public class Conundrum { public static void main(String[]
1 Searching and Sorting Linear Search Binary Search.
SEARCHING. Vocabulary List A collection of heterogeneous data (values can be different types) Dynamic in size Array A collection of homogenous data (values.
Chapter 9 Searching and Sorting
CS 61B Data Structures and Programming Methodology July 28, 2008 David Sun.
CSC 211 Data Structures Lecture 13
Chapter 5 Searching and Sorting. Copyright © 2004 Pearson Addison-Wesley. All rights reserved.1-2 Chapter Objectives Examine the linear search and binary.
Comparison-Based Sorting & Analysis Smt Genap
©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter Chapter 11 Searching and Sorting.
CS261 Data Structures Ordered Bag Dynamic Array Implementation.
HashCode() 1  if you override equals() you must override hashCode()  otherwise, the hashed containers won't work properly  recall that we did not override.
Comparable and Comparator Nuts and Bolts. Sets A set is a collection in which all elements are unique—an element is either in the set, or it isn’t In.
Big Java by Cay Horstmann Copyright © 2009 by John Wiley & Sons. All rights reserved. Selection Sort Sorts an array by repeatedly finding the smallest.
Symbol Tables From “Algorithms” (4 th Ed.) by R. Sedgewick and K. Wayne.
Array Search & Sort (continues). On the fly questions Array declaration: int[] a, b, c; 1. a is an array of integers, b and c are two integers 2. a, b,
27-Jan-16 Analysis of Algorithms. 2 Time and space To analyze an algorithm means: developing a formula for predicting how fast an algorithm is, based.
Visual C++ Programming: Concepts and Projects Chapter 8A: Binary Search (Concepts)
ICS201 Lecture 21 : Sorting King Fahd University of Petroleum & Minerals College of Computer Science & Engineering Information & Computer Science Department.
Chapter 8 Searching and Sorting © 2006 Pearson Education Inc., Upper Saddle River, NJ. All rights reserved.
1. Searching The basic characteristics of any searching algorithm is that searching should be efficient, it should have less number of computations involved.
Data Structures Arrays and Lists Part 2 More List Operations.
More constructors 1. Constructors  recall that a public constructor is what a client uses to create an object  the purpose of a constructor is to initialize.
Searching/Sorting. Searching Searching is the problem of Looking up a specific item within a collection of items. Searching is the problem of Looking.
Building Java Programs Chapter 12: Recursive public/private pairs Chapter 13: Searching reading: 13.3.
Chapter 5 Ordered List.
Searching.
Searching.
Adapted from Pearson Education, Inc.
Lecture 14: binary search and complexity reading:
Lecture 15: binary search reading:
Searching CLRS, Sections 9.1 – 9.3.
Searching.
The Binary Search by Mr. Dave Clausen
Searching.
Presentation transcript:

Searching and Sorting I 1 Searching and Sorting 1

Searching and Sorting I 2 The Problem Searching is an every day occurrence. Searching a particular item among a collection of many items

Searching and Sorting I 3 Searching an array of integers If an array is not sorted, there is no better algorithm than linear search for finding an element in it static final int NONE = -1; // not a legal index static int linearSearch(int target, int[] a) { for (int p = 0; p < a.length; p++) { if (target == a[p]) return p; } return NONE; }

Searching and Sorting I 4 Searching an array of Strings Searching an array of Strings is just like searching an array of integers, except –Instead of i1==i2 we need to use s1.equals(s2) static final int NONE = -1; // not a legal index static int linearSearch(String target, String[] a) { for (int p = 0; p < a.length; p++) { if (target.equals(a[p])) return p; } return NONE; }

Searching and Sorting I 5 Searching an array of Objects Searching an array of Objects is just like searching an array of Strings, provided –The operation equals has been defined appropriately static final int NONE = -1; // not a legal index static int linearSearch(Object target, Object[] a) { for (int p = 0; p < a.length; p++) { if (target.equals(a[p])) return p; } return NONE; }

Searching and Sorting I 6 Templates There is no way, in Java, to write a general linear search method for any data type To do this, we would need a template facility--a method which can take a parameter of any type Note, however: –we can write a method that works for Objects (because Object has equals defined, even if it isn’t very good) –The method we defined for Objects also works fine for Strings (because String overrides equals )

Searching and Sorting I 7 Java review: equals The Object class defines public boolean equals(Object obj) For most objects, this just tests identity: whether the two objects are really one and the same This is not generally what you want The String class overrides this method with a method that is more appropriate for Strings You can override equals for your own classes –But there are some rules you should follow if you do

Searching and Sorting I 8 Overriding equals If you override equals, your method should have the following properties (for your objects x, y, z ) –Reflexive: for any x, x.equals(x) should return true –Symmetric: for any non-null objects x and y, x.equals(y) should return the same result as y.equals(x) –Transitive: if x.equals(y) and y.equals(z) are true, then x.equals(z) should also be true –Consistent: x.equals(y) should always return the same answer (unless you modify x or y, of course) –For any non-null x, x.equals(null) should return false Java cannot check to make sure you follow these rules

Searching and Sorting I 9 About sorted arrays An array is sorted in ascending order if each element is not smaller than the preceding element An array is sorted in descending order if each element is no larger than the preceding element When we just say an array is “sorted,” by default we mean that it is sorted in ascending order An array of Object cannot be in sorted order ! –There is no notion of “smaller” or “larger” for arbitrary objects –We can define an ordering for some of our objects

Searching and Sorting I 10 The Comparable interface java.lang provides a Comparable interface with the following method: –public int compareTo(Object that) –This method should return A negative integer if this is less than that Zero if this equals that A positive integer if this is greater than that Reminder: you implement an interface like this: class MyObject implements Comparable { public int compareTo(Object that) {...} }

Searching and Sorting I 11 Rules for implementing Comparable You must ensure: –x.compareTo(y) and y.compareTo(x) either are both zero, or else one is positive and the other is negative –x.compareTo(y) throws an exception if and only if y.compareTo(x) throws an exception –The relation is transitive: (x.compareTo(y)>0 && y.compareTo(z)>0) implies x.compareTo(z)>0 –if x.compareTo(y)==0, then x.compareTo(z) has the same sign as y.compareTo(z) You should ensure: – compareTo is consistent with equals

Searching and Sorting I 12 Consistency with equals compareTo is consistent with equals if: x.compareTo(y)==0 gives the same boolean result as x.equals(y ) Therefore: if you implement Comparable, you really should override equals as well Java doesn’t actually require consistency with equals, but sooner or later you’ll get into trouble if you don’t meet this condition

Searching and Sorting I 13 Binary Search Ignoring one-half of the data when the data is sorted.

Searching and Sorting I 14 Binary search Linear search has linear time complexity: –Time n if the item is not found –Time n/2, on average, if the item is found If the array is sorted, we can write a faster search How do we look up a name in a phone book, or a word in a dictionary? –Look somewhere in the middle –Compare what’s there with the thing you’re looking for –Decide which half of the remaining entries to look at –Repeat until you find the correct place –This is the binary search algorithm

Searching and Sorting I 15 Binary search algorithm To find which (if any) component of a[left..right] is equal to target (where a is sorted): Set l = left, and set r = right While l <= r, repeat: Let m be an integer about midway between l and r If target is equal to a[m], terminate with answer m If target is less than a[m], set r = m–1 If target is greater than a[m], set l = m+1 Terminate with answer none lrmm-1m+1 ?

Searching and Sorting I 16 Binary search in Java static int binarySearch(Comparable target, Comparable[] a, int left, int right) { int l = left, r = right; while (l <= r) { int m = (l + r) / 2; int comp = target.compareTo(a[m]); if (comp == 0) return m; else if (comp < 0) r = m – 1; else /* comp > 0 */ l = m + 1; } return NONE; // As before, NONE = -1 }

Searching and Sorting I 17 Recursive binary search in Java static int binarySearch(Comparable target, Comparable[] a, int left, int right) { if (left > right) return NONE; int m = (left + right) / 2; int comp = target.compareTo(a[m]); if (comp == 0) return m; else if (comp < 0) return binarySearch(target, a, left, m-1); else // comp > 0 return binarySearch(target, a, m+1, right); }

Searching and Sorting I 18 Java Class Package: 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. array the array to be searched desiredItem the item to be found in the array 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);

Searching and Sorting I 19 The Method binarySearch

Searching and Sorting I 20 Binary search takes log n time In binary search, we choose an index that cuts the remaining portion of the array in half We repeat this until we either find the value we are looking for, or we reach a subarray of size 1 If we start with an array of size n, we can cut it in half log 2 n times Hence, binary search has logarithmic (log n) time complexity For an array of size 1000, this is 100 times faster than linear search ( 2 10 ~= 1000 )

Searching and Sorting I 21 Conclusion Linear search has linear time complexity Binary search has logarithmic time complexity For large arrays, binary search is far more efficient than linear search –However, binary search requires that the array be sorted –If the array is sorted, binary search is 100 times faster for an array of size times faster for an array of size This is the kind of speedup that we care about when we analyze algorithms