0% found this document useful (0 votes)
38 views39 pages

11 Searching Techniques

The document summarizes different searching techniques for data structures, including sequential search of arrays and linked lists, as well as binary search of arrays. It provides pseudocode examples and complexity analysis. Key topics covered include linear search, binary search trees, and the binary search algorithm.

Uploaded by

SWATI NANDUSEKAR
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
38 views39 pages

11 Searching Techniques

The document summarizes different searching techniques for data structures, including sequential search of arrays and linked lists, as well as binary search of arrays. It provides pseudocode examples and complexity analysis. Key topics covered include linear search, binary search trees, and the binary search algorithm.

Uploaded by

SWATI NANDUSEKAR
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 39

Programming and Data Structures

Debasis Samanta
Computer Science & Engineering
Indian Institute of Technology Kharagpur
Spring-2017
Lecture #11
Searching Techniques

CS 11001 : Programming and Data Structures 2 Lecture #11: © DSamanta


Today’s discussion…

* Searching Techniques

* Sequential search with arrays


• Binary search
• Interpolation search

* Sequential search with linked lists

CS 11001 : Programming and Data Structures 3 Lecture #11: © DSamanta


Searching Techniques

CS 11001 : Programming and Data Structures 4 Lecture #11: © DSamanta


S e a rc h in g

In te re n a l s e a rc h in g E x te rn a l s e a rc h in g

B tre e s e a rc h in g

B + tre e s e a rc h in g

S e a rc h w ith k e y -c o m p a ris o n S e a rc h w ith o u t k e y -c o m p a ris o n

A d re s s c a lc u la tio n s e a rc h

L in e a r s e a rc h N o n -lin e ra s e a rc h

S e q u e n tia l s e a rc h T re e s e a rc h

B in a ry s e a rc h B in a ry s e a rc h tre e

In te rp o la tio n s e a rc h A V L tre e s e a rc h

R e d -b la c k tre e s e a rc h

S p la y tre e s e a rc h

D ig ita l s e a rc h

M u lti-w a y tre e s e a rc h

m -w a y tre e s e a rc h

B -tre e s e a rc h

G ra p h s e a rc h

D e p th firs t s e a rc h

B re a d th firs t s e a rc h

CS 11001 : Programming and Data Structures 5 Lecture #11: © DSamanta


Linear Search

CS 11001 : Programming and Data Structures 6 Lecture #11: © DSamanta


Sequential Search with Arrays

CS 11001 : Programming and Data Structures 7 Lecture #11: © DSamanta


Flowchart: Sequential Search with Array
Start

i=0

Yes No
K = A[i]?

i = i+1

No
Print "Successful" i≥n
Yes

Print "Unsuccessful"

Stop

CS 11001 : Programming and Data Structures 8 Lecture #11: © DSamanta


Example: Sequential Search with Array
int main()
{
int A[10], i, n, K, flag = 0;
printf("Enter the size of an array: ");
scanf("%d",&n);

printf("Enter the elements of the array: ");


for(i=0; i < n; i++)
scanf("%d",&A[i]);
printf("Enter the number to be searched: ");
scanf("%d",&K);
for(i=0;i<n;i++){
if(a[i] == K){
flag = 1; break;
}
}
if(flag == 0)
printf("The number is not in the list");
else
printf("The number is found at index %d",i);
return 0;
}

CS 11001 : Programming and Data Structures 9 Lecture #11: © DSamanta


Complexity Analysis

• Case 1: The key matches with the first element


• T(n) = 1
• Case 2: Key does not exist
• T(n) = n
• Case 3: The key is present at any location in the array
n
T ( n)  p
i 1
i i

1
p1  p 2     pi     p n 
n
1
T ( n) 
n
i
i 1
n

n 1
T ( n) 
2
CS 11001 : Programming and Data Structures 10 Lecture #11: © DSamanta
Complexity Analysis : Summary

Number of key Asymptotic


Case Remark
comparisons complexity

Case 1 T(n) = 1 T(n) = O(1) Best case

Case 2 T(n) = n T(n) = O(n) Worst case

Case 3 n 1 T(n) = O(n) Average case


T ( n) 
2

CS 11001 : Programming and Data Structures 11 Lecture #11: © DSamanta


Binary Search

CS 11001 : Programming and Data Structures 12 Lecture #11: © DSamanta


The Technique m id

l u = m id -1 u
S e ra c h th is h a lf th e sa m e w a y
if K < A [m id ]

(b ) S e a rc h th e e n tire lis t tu rn s in to th e s e a rc h in g o f le ft-h a lf o n ly

l m id = (l+ u )/2 u

(a ) A n o rd e re d a rra y o f e le m n e ts w ith in d e x v a lu e s l, u a n d m id
m id

l l = m id + 1 u
S erach th is h alf th e sam e w ay
if K > A [m id ]
CS 11001 : Programming and Data Structures 13 Lecture #11: © DSamanta
(c ) S e a rc h th e e n tire list tu rn s in to th e se a rc h in g o f rig h t-h a lf o n ly
Flowchart: Binary Search with Array
Start

mid = (l+u)/2

YES NO
K = A[mid]?

YES NO
K < A[mid]?

Search is successful
u = mid-1 l = mid+1

Stop
NO
(l>u)?

YES

Search is unsuccessful

Start
CS 11001 : Programming and Data Structures 14 Lecture #11: © DSamanta
Binary Search (with Iteration)
#include <stdio.h>

int main()
{
int i, l, u, mid, n, K, data[100];

printf("Enter number of elements\n");


scanf("%d",&n);

printf("Enter %d integers in sorted order\n", n);

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


scanf("%d",&array[i]);

printf("Enter value to find\n");


scanf("%d", &K);

l = 0;
u = n - 1; Contd…
mid = (l+u)/2;

CS 11001 : Programming and Data Structures 15 Lecture #11: © DSamanta


Binary Search (with Iteration)

while (l <= u) {
if (data[mid] < K)
l = mid + 1;
else if (data[mid] == K) {
printf("%d found at location %d.\n", search, mid+1);
break;
}
else
u = mid - 1;

mid = (l + u)/2;
}
if (l > u)
printf("Not found! %d is not present in the list.\n", K);

return 0;
}

CS 11001 : Programming and Data Structures 16 Lecture #11: © DSamanta


Binary Search (with Recursion)
#include<stdio.h>
int main(){

int data[100],i, n, K, flag, l, u;

printf("Enter the size of an array: ");


scanf("%d",&n);

printf("Enter the elements of the array in sorted order: " );


for(i=0;i<n;i++)
scanf("%d",&a[i]);

printf("Enter the number to be search: ");


scanf("%d",&K);

l=0,u=n-1;
flag = binarySearch(data,n,K,l,u);
if(flag==0)
printf("Number is not found.");
else
printf("Number is found.");
Contd…
return 0;
}
CS 11001 : Programming and Data Structures 17 Lecture #11: © DSamanta
Binary Search (with Recursion)

int binary(int a[],int n,int K,int l,int u){

int mid;

if(l<=u){
mid=(l+u)/2;
if(K==a[mid]){
return(1);
}
else if(m<a[mid]){
return binarySearch(a,n,K,l,mid-1);
}
else
return binarySearch(a,n,m,mid+1,u);
}
else return(0);
}

CS 11001 : Programming and Data Structures 18 Lecture #11: © DSamanta


Complexity Analysis

5
< = >

2 8
< = > < = >

1 3 6 9
< = > < = > < = > < = >

F F F 4 F 7 F 10
< = > < = > < = >

F F F F F F

CS 11001 : Programming and Data Structures 19 Lecture #11: © DSamanta


Complexity Analysis: Binary Search
5
< = >

2 8
< = > < = >

1 3 6 9
< = > < = > < = > < = >

F F F 4 F 7 F 10
< = > < = > < = >

F F F F F F

Let n be the total number of elements in the list under search and there exist an integer k such that:-
• For successful search:-
• If 2 k 1  n  2 k, then the binary search algorithm requires at least one comparison and at most k comparisons.
• For unsuccessful search:-
• If , then the binary search algorithm requires k comparisons.
n  2 k 1
• If k 1
2  n  2 k  1 , then the binary search algorithm requires either k-1 or k number of comparisons.

CS 11001 : Programming and Data Structures 20 Lecture #11: © DSamanta


Complexity Analysis: Binary Search

• Best case
T(n) = 1

• Worst case
log= 2 n  1
T(n)

CS 11001 : Programming and Data Structures 21 Lecture #11: © DSamanta


Complexity Analysis: Binary Search

• Average Case
• Successful search:-
I
T ( n)  1
n
T (n)  log 2 n   log 2 n  2  1
n n

• Unsuccessful search:-
E
T ' ( n) 
n 1

2
T ' (n)  log 2 n  
n 1

CS 11001 : Programming and Data Structures 22 Lecture #11: © DSamanta


Interpolation Search

CS 11001 : Programming and Data Structures 23 Lecture #11: © DSamanta


Interpolation Search
1. l = 1, u = n // Initialization: Range of searching
2. flag = FALSE // Hold the status of searching
3. While (flag = FALSE) do
 K  A[l ] 
4. loc     u  l   l
 A[u ]  A [l ] 
5. If ( l  loc  u ) then // If loc is within the range of the list
6. Case: K < A[loc]
7. u = loc -1
8. Case: K = A[loc]
9. flag = TRUE
10. Case: K > A[loc]
11. l = loc +1
12. Else
13. Exit()
14. EndIf
15. EndWhile
16. If (flag) then
17. Print “Successful at” loc
18. Else
19. Print “Unsuccessful”
20. EndIf
21. Stop

CS 11001 : Programming and Data Structures 24 Lecture #11: © DSamanta


Complexity Analysis:
Interpolation Search

Best case Worst case Average case

Successful 1 n log 2 log 2 n 

Interpolation search

Unsuccessful n
n n

CS 11001 : Programming and Data Structures 25 Lecture #11: © DSamanta


Comparision: Successful Search

100

80 S earch array
Time (  s)

60
B inary search
40
Interpolation search
20

0 S earch list
10 100 500 1000 5000 10000
Input Size

CS 11001 : Programming and Data Structures 26 Lecture #11: © DSamanta


Comparision: Unsuccessful Search

100

80 S earch A rray
Time (  s)

60
B inary S earch
40
Interpolation search
20

0 S earch list
10 100 500 1000 5000 10000
Input Size

CS 11001 : Programming and Data Structures 27 Lecture #11: © DSamanta


Sequential Search with Linked List

CS 11001 : Programming and Data Structures 28 Lecture #11: © DSamanta


Sequential Search with Linked List

DATA L IN K

(a) S tru ctu re o f a n o d e in th e lin ked list

H ead er
S earch at an in term ed iate n od e:
S earch b egin s S earch stop s h ere if k ey m atch es S earch u n su ccessfu lly en d s h ere
h ere else m ove to its im m ed iate n ext n od e

(b ) L in ear search o n a lin ked list

CS 11001 : Programming and Data Structures 29 Lecture #11: © DSamanta


Flow Chart: Sequential Search with LL
Start

temp = header

while
Print Unsuccessful
temp != NULL
temp = temp->next
T
N temp->data == Y
key

Print Success
Return temp

CS 11001 : Programming and Data Structures 30 Lecture #11: © DSamanta


Example: Sequential Search with LL
#include <stdio.h>
#include <stdlib.h>

struct node
{
int data;
struct node *next;
};

int main()
{
struct node *header = NULL;
int K, n;

printf("Enter the number of nodes: ");


scanf("%d", &n);
printf("\nDisplaying the list\n");
generate(header, num);
printf("\nEnter key to search: ");
scanf("%d", &key);
searchBinary(header, K);
delete(header);

return 0;
}

CS 11001 : Programming and Data Structures 31 Lecture #11: © DSamanta


Example: Linear Search with LL
void generate(struct node *head, int n)
{
int i;
struct node *temp;

for (i = 0; i < num; i++)


{
temp = (struct node *)malloc(sizeof(struct node));
temp->data = rand() % n;
if (*header == NULL)
{
*header = temp;
temp->next = NULL;
}
else
{
temp->next = header;
header = temp;
}
printf("%d ", temp->data);
}
}

CS 11001 : Programming and Data Structures 32 Lecture #11: © DSamanta


Example: Linear Search with LL
void searchBinary(struct node *temp, int K)
{
while (temp != NULL)
{
if (temp->data == K)
{
printf("key found\n");
return;
}
else temp = temp->next;
}
printf("Key not found\n");
}

void delete(struct node *header)


{
struct node *temp;
temp = header;
while (temp != NULL)
{
temp = temp->next;
free(header);
header = temp;
}
}

CS 11001 : Programming and Data Structures 33 Lecture #11: © DSamanta


Complexity Analysis

Number of key
Case Asymptotic complexity Remark
comparisons

Case 1 T(n) = 1 T(n) = O(1) Best case

n 1
Case 2 T ( n)  T(n) = O(n) Average case
2

Case 3 T(n) = n T(n) = O(n) Worst case

CS 11001 : Programming and Data Structures 34 Lecture #11: © DSamanta


Any question?

You may post your question(s) at the “Discussion


Forum” maintained in the course Web page.
CS 11001 : Programming and Data Structures 35 Lecture #11: © DSamanta
Problems to ponder…
1. What will be the time complexity of linear search with array if the array is already in sorted order?

2. What will be the outcome, if Binary search technique is applied to an array where the data are not
necessarily in sorted order?

3. Whether the Binary search technique is applicable to a linked list? If so, how?

4. In Binary Search, the mid location is calculated and then either left or right part of the mid location is
searched further, if there is no match at the middle is found. As an alternative to check at middle, the
location at one-third (or two-third) position of the array is chosen. Such a searching can be termed as
Ternary Search. Modify the Binary Search algorithm to Ternary Search algorithm. Which algorithm gives
result faster?

5. If T(n) denotes the number of comparisons required to search a key element in a list of n elements, then a)
express T(n) as recursion formula and b) solve T(n).

CS 11001 : Programming and Data Structures 36 Lecture #11: © DSamanta


Problems to ponder…
6. Out of sequential search and binary search, which is faster? Why?

7. Whether binary search technique can be applied to search a string in a list od strings stored in an array? If
so, revise the Binary search algorithm accordingly.

8. A structure is defined as follows.


struct Record {
int RollNo;
char name[20];
struct Date { int dd; int mm; int yy; } dob;
}

suppose, 100 records of type Record are stored in an array say, struct Record students[100];
We have to find the student(s), whose date of birth is given in the form dd/mm/yy. How you can search the
array students?

CS 11001 : Programming and Data Structures 37 Lecture #11: © DSamanta


Problems for Practice…
*You can check the Moodle course management system for a
set of problems for your own practice.

• Login to the Moodle system at http://cse.iitkgp.ac.in/


• Select “PDS Spring-2017 (Theory) in the link “My Courses”
• Go to Topic 11: Practice Sheet #11 : Searching Technique

*Solutions to the problems in Practice Sheet #11 will be uploaded


in due time.

CS 10001 : Programming and Data Structures 38 Lecture #07: © DSamanta


If you try to solve problems yourself, then you will learn
many things automatically.

Spend few minutes and then enjoy the study.

CS 10001 : Programming and Data Structures 39 Lecture #07: © DSamanta

You might also like