Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Binary Search vs. Brute Force Search Algorithms for Finding a Local Minimum in a

ID: 3723415 • Letter: B

Question

Binary Search vs. Brute Force Search Algorithms for Finding a Local Minimum in a Two- Dimensional Array Due: March 6th, 2018: 1 PM In this project, you will use C++ programming language to implement the binary search-based 0(n) algorithm to determine the local minimurm in an 'n, x 'n' two-dimensional array (as discussed in Module 2) and compare its run-time performance with that of a brute force O(n2) algorithm that searches for the local minimum element by element until one is found. Note that both the binary search and the brute force search algorithms should stop once a local minimum is found. You should create random two-dimensional arays (with numRows- numCols) with unique elements in the range [1... numRows numCols] for the following values of numRows (numCols) and determine the average execution time of the binary search and the brute force search algorithms by running 200 trials for each of the numRows (numCols) values. Determine the running times in nano seconds or milliseconds, as appropriate. num Rows (numCols) values: 4,6, 8, 10, 15, 20, 25, 30, 35. 40, 50, 75, 100, 150, 200, 250, 300. 350 ot the results with numRows in X-axis and the average execution times (in nanoseconds or Pl milliseconds) of the binary search and the brute force search algorithms in the Y-axi

Explanation / Answer

time complexity bruteforce

code:-

#include <stdio.h>

#include <limits.h>

#include <time.h>

#include <sys/time.h>

//BruteForce

int search(int mat[5][5], int n, int k)

{

int i,j;

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

{

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

{

if(mat[i][j]==k)

{

// printf("localMinindex=(%d,%d)",i,j);

break;

}

}

}

}

int main() {

// your code goes here

int i,j,r,c;

printf("Enter number of rows ");

scanf("%d",&r);

printf("Enter number of column ");

scanf("%d",&c);

int mat[r][c];

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

{

for(j=0;j<c;j++)

{

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

}

}

int locmin=INT_MAX;

struct timeval timer_usec;

long long int timestamp_usec; / timestamp in microsecond /

if (!gettimeofday(&timer_usec, NULL)) {

timestamp_usec = ((long long int) timer_usec.tv_sec) * 1000000ll +

(long long int) timer_usec.tv_usec;

}

else {

timestamp_usec = -1;

}

printf("%lld microseconds since epoch ", timestamp_usec);

int loop;

for(loop=1;loop<=100000;loop++)

{

search(mat, r, 25);

}

if (!gettimeofday(&timer_usec, NULL)) {

timestamp_usec = ((long long int) timer_usec.tv_sec) * 1000000ll +

(long long int) timer_usec.tv_usec;

}

else {

timestamp_usec = -1;

}

printf("%lld microseconds since epoch ", timestamp_usec);

return 0;

}

Binary search :-

code

#include <stdio.h>

#include <limits.h>

#include <time.h>

#include <sys/time.h>

//Binary Search

int bsearch(int mat[5][5], int n, int k)

{

int i = 0, j = n-1; //set indexes for top right element

while ( i < n && j >= 0 )

{

if ( mat[i][j] == k )

{

// printf("n Found at %d, %d", i, j);

return 1;

}

if ( mat[i][j] > k )

j--;

else // if mat[i][j] < k

i++;

}

printf("n Element not found");

return 0; // if ( i==n || j== -1 )

}

int main() {

// your code goes here

int i,j,r;

printf("Enter number of rows & column ");

scanf("%d",&r);

int mat[r][r];

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

{

for(j=0;j<r;j++)

{

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

}

}

// int locmin=INT_MAX;

struct timeval timer_usec;

long long int timestamp_usec; / timestamp in microsecond /

if (!gettimeofday(&timer_usec, NULL)) {

timestamp_usec = ((long long int) timer_usec.tv_sec) * 1000000ll +

(long long int) timer_usec.tv_usec;

}

else {

timestamp_usec = -1;

}

printf("%lld microseconds since epoch ", timestamp_usec);

int loop;

for(loop=1;loop<=100000;loop++)

{

bsearch(mat, 5, 25);

}

if (!gettimeofday(&timer_usec, NULL)) {

timestamp_usec = ((long long int) timer_usec.tv_sec) * 1000000ll +

(long long int) timer_usec.tv_usec;

}

else {

timestamp_usec = -1;

}

printf("%lld microseconds since epoch ", timestamp_usec);

return 0;

}