• No results found

Department of Computer Science and Engineering IIT Bombay

N/A
N/A
Protected

Academic year: 2022

Share "Department of Computer Science and Engineering IIT Bombay "

Copied!
31
0
0

Loading.... (view fulltext now)

Full text

(1)

IIT Bombay

Computer Programming

Dr. Deepak B Phatak Dr. Supratik Chakraborty

Department of Computer Science and Engineering IIT Bombay

Session: Searching

1 Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay

(2)

IIT Bombay

• Sorting integers

• Selection sort

• Merge sort

• Counting “basic” steps in sorting an array

• Sorting strings and other data types

• Same techniques apply

• Appropriate comparison operator needed

2 Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay

Quick Recap of Relevant Topics

(3)

IIT Bombay

• Searching integers

• Linear search

• Binary search

• Searching strings and other data types

3 Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay

Overview of This Lecture

(4)

IIT Bombay

The Searching Problem

Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay 4

A

24 18 17 25 27 24

Given an array A of integers and a candidate integer N

Is N present in A? Yes/No question

More interesting

If N is present in A, return its index in A else return -1

[Yes/No answer can be derived]

N = 27

A[0]

A[1]

A[2]

A[3]

A[4]

A[5]

Return 4

(5)

IIT Bombay

The Searching Problem

Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay 5

A

24 18 17 25 27 24

Given an array A of integers and a candidate integer N

Is n present in A? Yes/No question

More interesting

If n is present in A, return its index in A else return -1

[Yes/No answer can be derived]

N = 23

A[0]

A[1]

A[2]

A[3]

A[4]

A[5]

Return -1

(6)

IIT Bombay

The Searching Problem

Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay 6

A

24 18 17 25 27 24

Given an array A of integers and a candidate integer N

Is n present in A? Yes/No question

More interesting

If n is present in A, return its index in A else return -1

[Yes/No answer can be derived]

N = 24

A[0]

A[1]

A[2]

A[3]

A[4]

A[5]

Return 0

(7)

IIT Bombay

The Searching Problem

Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay 7

A

24 18 17 25 27 24

Given an array A of integers and a candidate integer N

Is n present in A? Yes/No question

More interesting

If n is present in A, return its index in A else return -1

[Yes/No answer can be derived]

N = 24

A[0]

A[1]

A[2]

A[3]

A[4]

A[5]

Return 5

(8)

IIT Bombay

The Searching Problem

Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay 8

A

24 18 17 25 27 24

Given an array A of integers and a candidate integer N

Is n present in A? Yes/No question

More interesting

If n is present in A, return its index in A else return -1

[Yes/No answer can be derived]

N = 24

A[0]

A[1]

A[2]

A[3]

A[4]

A[5]

In case of multiple matches, index

of any one can be returned

(9)

IIT Bombay

Linear Search

• Check each element of the array

• Stop on finding first match and output index

• If array exhausted and no match found, return -1

Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay 9

(10)

IIT Bombay

Linear Search in C++

int main() {

int i, n, A[100]; // Declarations

cout << “Give size of array: “; cin >> n; // Read and validate inputs

if ((n > 100) || (n <= 0)) { cout << “Invalid input!” << endl; return -1; } cout << “Give “ << n << “ positive integers in array.” << endl;

for (i = 0; i < n; i++) {cin >> A[i]; } // Read elements of array A … Code to search …

return 0;

}

Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay 10

(11)

IIT Bombay

Linear Search in C++

int main() {

… Declarations, reading inputs and validation … int srchElement, index;

do {

cout << “Give element to search (-1 to exit): “; cin >> srchElement;

if (srchElement == -1) break;

index = linearSearch(A, n, srchElement);

if (index == -1) { cout << srchElement << “ not present!” << endl;}

else { cout << srchElement << “present at index “ << index << endl;}

} while (true);

return 0;

}

Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay 11

(12)

IIT Bombay

Linear Search in C++

int main() {

… Declarations, reading inputs and validation … int srchElement, index;

do {

cout << “Give element to search (-1 to exit): “; cin >> srchElement;

if (srchElement == -1) break;

index = linearSearch(A, n, srchElement);

if (index == -1) { cout << srchElement << “ not present!” << endl;}

else { cout << srchElement << “present at index “ << index << endl;}

} while (true);

return 0;

}

Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay 12

(13)

IIT Bombay

Linear Search in C++

int linearSearch(int A[], int n, int srchElement) { int i;

for (i = 0; i < n; i++) {

if (A[i] == srchElement) { return i; } }

return -1;

}

Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay 13

(14)

IIT Bombay

“Basic” Steps In Searching

• Comparing an element of array A with the searched element and incrementing index

• Count of “basic” steps

• At most n “basic” steps to search in an array of size n

• Can we do better?

Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay 14

(15)

IIT Bombay

The Searching Problem

Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay 15

A

24 18 17 25 27 24

N = 18

A[0]

A[1]

A[2]

A[3]

A[4]

A[5]

A

27 25 24 24 18 17

A[0]

A[1]

A[2]

A[3]

A[4]

A[5]

SORT

(16)

IIT Bombay

The Searching Problem

16

N = 18 A

27 25 24 24 18 17

A[0]

A[1]

A[2]

A[3]

A[4]

A[5]

>= 24

<= 24

(17)

IIT Bombay

The Searching Problem

17

N = 18 A

27 25 24 24 18 17

A[0]

A[1]

A[2]

A[3]

A[4]

A[5]

>= 24

<= 24

18 < 24

(18)

IIT Bombay

The Searching Problem

18

N = 18 A

24 18 17

A[3]

A[4]

A[5]

>= 18

18 = 18

<= 18

We are done!

(19)

IIT Bombay

General Idea

• Sort the array (A[0] … A[n-1]) in increasing order

• Check search element (m) with element at A[n/2]

• If m equals A[n/2], we are done (return n/2)

• If m < A[n/2], search for m in A[0] … A[n/2 - 1]

• If m > A[n/2], search for m in A[n/2] … A[n-1]

• If A has 1 element and m does not match that, return -1

Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay 19

Recursion Recursion

Termination Case

Termination

Case

(20)

IIT Bombay

General Idea

• Sort the array (A[0] … A[n-1]) in increasing order

• Check search element (m) with element at A[n/2]

• If m equals A[n/2], we are done (return n/2)

• If m < A[n/2], search for m in A[0] … A[n/2]

• If m > A[n/2], search for m in A[n/2+1] … A[n-1]

• If A has 1 element and m does not match that, return -1

Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay 20

BINARY SEARCH

(21)

IIT Bombay

Binary Search In Action

Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay 21

ARRAY A SORTED IN INCREASING ORDER

mid

srchElement < A[mid]

(22)

IIT Bombay

Binary Search In Action

Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay 22

ARRAY A SORTED IN INCREASING ORDER

mid

srchElement > A[mid]

(23)

IIT Bombay

Binary Search In Action

Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay 23

ARRAY A SORTED IN INCREASING ORDER

mid

srchElement < A[mid]

(24)

IIT Bombay

Binary Search In Action

Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay 24

ARRAY A SORTED IN INCREASING ORDER

mid

srchElement < A[mid]

(25)

IIT Bombay

Binary Search In Action

Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay 25

ARRAY A SORTED IN INCREASING ORDER

mid

srchElement == A[mid]

(26)

IIT Bombay

Binary Search in C++

// PRECONDITION: A[start] … A[end – 1] sorted in increasing order int binarySearch(int A[], int start, int end, int srchElement) {

if (end == start + 1) { // Array A has exactly 1 element if (A[start] == srchElement) { return start; }

else { return -1; } }

int mid = (start + end)/2;

if (A[mid] == srchElement) { return mid; }

else { if (A[mid] < srchElement) { return binarySearch(A, mid, end, srchElement); } else { return binarySearch(A, start, mid, srchElement); }

} }

// POSTCONDITION: If srchElement in A[start] … A[end-1], return its index, else -1

Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay 26

(27)

IIT Bombay

Binary Search in C++

// PRECONDITION: A[start] … A[end – 1] sorted in increasing order int binarySearch(int A[], int start, int end, int srchElement) {

if (end == start + 1) { // Array A has exactly 1 element if (A[start] == srchElement) { return start; }

else { return -1; } }

int mid = (start + end)/2;

if (A[mid] == srchElement) { return mid; }

else { if (A[mid] < srchElement) { return binarySearch(A, mid, end, srchElement); } else { return binarySearch(A, start, mid, srchElement); }

} }

// POSTCONDITION: If srchElement in A[start] … A[end-1], return its index, else -1

Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay 27

(28)

IIT Bombay

Binary Search in C++

// PRECONDITION: A[start] … A[end – 1] sorted in increasing order int binarySearch(int A[], int start, int end, int srchElement) {

if (end == start + 1) { // Array A has exactly 1 element if (A[start] == srchElement) { return start; }

else { return -1; } }

int mid = (start + end)/2;

if (A[mid] == srchElement) { return mid; }

else { if (A[mid] < srchElement) { return binarySearch(A, mid, end, srchElement); } else { return binarySearch(A, start, mid, srchElement); }

} }

// POSTCONDITION: If srchElement in A[start] … A[end-1], return its index, else -1

Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay 28

(29)

IIT Bombay

What About Searching Other Data Types

• Exactly same technique

• Sort array

• Use an appropriate comparison operator

• lexEarlier(s1, s2) for strings

• Custom comparison operator for other data types

• Use same comparison operator for searching

• Decide which half of array to recurse on based on output of comparison operator

Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay 29

(30)

IIT Bombay

Count Of “Basic” Steps

• Let T n be maximum count of steps when searching in array of size n

• T n = T n/2 + 1; T 1 = 1

• Solution: T n  log 2 n 

Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay 30

(31)

IIT Bombay

Summary

• Searching in an array of integers

• Linear search

• Binary search

• Sorting helps searching

• Counting “basic” steps in searching

• Searching in an array of other data types

Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay 31

References

Related documents

Computer Science and Engineering Department Indian Institute of Technology

Memory locations accessed: local variables/arrays of functions Statically allocated in stack segment when function is called.. Quick Recap of

Choice of comparison operator crucially determines sorting order (increasing/decreasing), and also how equal elements

• Recall how we accessed member data values of structures V3 p, *ptrP;. cin

• Uses dynamically allocated array to store elements Array can grow or shrink in size. • Dynamic memory management

Department of Computer Science and Engineering Indian Institute of Technology Bombay.

Sivakumar Computer Science and Engineering IIT Bombay siva@iitb.ac.in... But, C can listen to all

Sort remaining unsorted sub-array using the same technique. Selection Sort