Disclaimer: This is a user generated content submitted by a member of the WriteUpCafe Community. The views and writings here reflect that of the author and not of WriteUpCafe. If you have any complaints regarding this post kindly report it to us.

Aggressive cow problem is a tough nut to crack in programming as well as your real life!!

This is one of the most advanced problems related to the application of binary search. The aggressive cow question is therefore generally every interviewer’s favorite. This is because to solve this problem, you need to know the basic application and concept of binary search.

But how do you actually resolve the aggressive cows problem?

Well, the answer is obvious: Using Binary Search!!

Still not sure how to find the solution? Stick to this post to learn.

Here is everything you need to know about the aggressive cows problem and its solution.

## The Problem Statement

Before understanding the solution to the problem, let’s first understand the problem statement. The problem statement goes like this:

John, the farmer, has constructed a new barn consisting of N stalls. He has built all these stalls in a single line X.

In his barn, he has a C number of cows. His cows are disappointed with the new barn and have become very aggressive. Farmer John wishes to place the cows in the stalls in such a way that the cows have the largest minimum distance.

You are required to write a code to find the required largest minimum distance.

Input:

T: It is the total number of test cases. All the test cases will follow:

Line 1: There are two space integers: C and N.

Line 2: N+1: line i+1 depicts the location of stall location which is xi.

Output:

Each test case should output one integer which is the largest minimum distance between the cows.

If you are still not able to understand the problem, let’s consider the following example:

Input:

1

5 3

1

2

8

4

9

The output of the code will be:

3

Output Explanation:

Farmer John can put the cows in stalls at positions 1, 8, and 4. This will print the minimum distance between the cows as 3.

## Let’s Proceed With The Solution

So, now you may have got an idea of what the aggressive cows problem is. Let’s understand the solution to this problem in detail.

Now that we know that the value of xi ranges from 0 to 10^9. Therefore, the minimum distance will lie within this range only. You can say that the minimum distance between any two 2 stalls can be as low as 0 and as high as 10^9.

Hence, you can check for each value between the lower and upper bound. Let’s assume the minimum distance is K. We will have to check if we can place a cow in that stall or not. If you are at the last stall and you have not placed all the cows. This simply means that the solution you are using is not feasible.

One thing that you will have to keep in mind is that in the case of k if you can place all the cows, all the values less than K will also be true. However, if for k, the values are false, any value above K will also be false.

You can consider that we are constructing a monotonic function. In this function, we will have to look for the value where the output changes from true to false. Finally, we will have to return that transition value.

This can be achieved easily via Binary search within the range from 0 to 10^9.

## An Explanation Of Binary Search

Till now we have talked about how you can resolve the aggressive cows problem using binary search. Are you aware of the binary search algorithm? If not, here’s a glimpse for you.

Binary search is used to find a certain value in a sorted array. In this searching algorithm, the search interval is divided repeatedly in half. The main idea of using binary search is to utilize the information that the given array is sorted and reduce the complexity of the algorithm to O(log n).

## How To Perform Binary Search?

• You need to start by considering the middle element of the whole array as its search key.
• In case the search key’s value is equal to the element, return the search key index.
• However, if the search key’s value is less than the required element, you will have to focus on the lower half interval.
• Otherwise, narrow the search key interval to the upper half.
• In the same way, you will have to check from the second point. Repeat it till you find the required element or you end up having an empty interval.

## Complexity Analysis Of Binary Search

Binary search has an impressive space and time complexity. Therefore, this method is even used to resolve basic and advanced problems like AGGRCOW and the first missing positive problem. The complexity analysis of the binary search is as follows:

### Space Complexity

The space complexity of the binary search is calculated as O(1). The space required by the algorithm is constant and it does not require any additional space, hence, the complexity is O(1).

### Time Complexity

The time complexity of binary search depends on the cases and the input. Here is the time complexity of binary search in its worst, average and best case.

• Worst Case: The worst case in binary search is when you need to keep reducing the array until there is only one element left. The worst-case complexity is then calculated as O(logn).
• Average Case: For binary search, the average case complexity is calculated as O(log n).
• Best Case: The best case in binary search is when you are able to find the element in the first comparison only. This simply means that the middle element is the only element you are searching for. The best case complexity of the binary search is calculated as O(1).

## Conclusion

AGGRCOW or aggressive cow problem is a good question on binary search. To resolve this problem, you need to have clear basics of the binary search.

In this post, we have provided you with a detailed explanation of what the aggressive cow problem is and how you can resolve it along with a binary search algorithm.

0