Problem Statement:
a) Write a python program to store roll numbers of student in array who attended training program in random order. Write function for searching whether particular student attended training program or not, using Linear search and Sentinel search.
Theory:
Linear Search :
The idea behind linear search is to compare the search item with the elements in the list one by one (using a loop) and stop as soon as we get the first copy of the search element in the list. Now considering the worst case in which the search element does not exist in the list of size N then the Simple Linear Search will take a total of 2N+1 comparisons (N comparisons against every element in the search list and N+1 comparisons to test against the end of the loop condition).
Sentinel Linear Search :
Here the idea is to reduce the number of comparisons
required to find an element in a list. Here we replace the last element of the
list with the search element itself and run a while loop to see if there
exists any copy of the search element in the list and quit the loop as soon as
we find the search element. See the code snippet for clarification.
Algorithm:
int last = array[N-1];
array[N-1]
= item; // Here item is the search element.
int
i = 0;
while(array[i]!=item)
{
i++;
}
array[N-1]
= last;
if(
(i < N-1) || (item == array[N-1]) )
{
cout << " Item Found @
"<<i;
}
else
{
cout << " Item Not
Found";
}
Analysis:
Here we see that the while loop
makes only one comparison in each iteration and it is sure that it will
terminate since the last element of the list is the search element itself. So
in the worst case ( if the search element does not exists in the list ) then
there will be at most N+2 comparisons ( N comparisons in the
while loop and 2 comparisons in the if condition). Which is better than
( 2N+1 ) comparisons as found in Simple Linear Search.
Take note that both the algorithms
have time complexity of O(n).
No comments:
Post a Comment