Examples of Divide and Conquer Algorithm

1. Finding the maximum element in the array:

We can use Divide and Conquer Algorithm to find the maximum element in the array by dividing the array into two equal sized subarrays, finding the maximum of those two individual halves by again dividing them into two smaller halves. This is done till we reach subarrays of size 1. After reaching the elements, we return the maximum element and combine the subarrays by returning the maximum in each subarray.

C++
// function to find the maximum no.
// in a given array.
int findMax(int a[], int lo, int hi)
{
    // If lo becomes greater than hi, then return minimum
    // integer possible
    if (lo > hi)
        return INT_MIN;
    // If the subarray has only one element, return the
    // element
    if (lo == hi)
        return a[lo];
    int mid = (lo + hi) / 2;
    // Get the maximum element from the left half
    int leftMax = findMax(a, lo, mid);
    // Get the maximum element from the right half
    int rightMax = findMax(a, mid + 1, hi);
    // Return the maximum element from the left and right
    // half
    return max(leftMax, rightMax);
}
Java
// Function to find the maximum number
// in a given array.
static int findMax(int[] a, int lo, int hi)
{
    // If lo becomes greater than hi, then return
    // minimum integer possible
    if (lo > hi)
        return Integer.MIN_VALUE;
    // If the subarray has only one element, return the
    // element
    if (lo == hi)
        return a[lo];
    int mid = (lo + hi) / 2;
    // Get the maximum element from the left half
    int leftMax = findMax(a, lo, mid);
    // Get the maximum element from the right half
    int rightMax = findMax(a, mid + 1, hi);
    // Return the maximum element from the left and
    // right half
    return Math.max(leftMax, rightMax);
}
Python3
# Function to find the maximum number
# in a given array.
def find_max(a, lo, hi):
    # If lo becomes greater than hi, then return minimum
    # integer possible
    if lo > hi:
        return float('-inf')
    # If the subarray has only one element, return the
    # element
    if lo == hi:
        return a[lo]
    mid = (lo + hi) // 2
    # Get the maximum element from the left half
    left_max = find_max(a, lo, mid)
    # Get the maximum element from the right half
    right_max = find_max(a, mid + 1, hi)
    # Return the maximum element from the left and right
    # half
    return max(left_max, right_max)
C#
// Function to find the maximum number
// in a given array.
static int FindMax(int[] a, int lo, int hi)
{
    // If lo becomes greater than hi, then return
    // minimum integer possible
    if (lo > hi)
        return int.MinValue;
    // If the subarray has only one element, return the
    // element
    if (lo == hi)
        return a[lo];
    int mid = (lo + hi) / 2;
    // Get the maximum element from the left half
    int leftMax = FindMax(a, lo, mid);
    // Get the maximum element from the right half
    int rightMax = FindMax(a, mid + 1, hi);
    // Return the maximum element from the left and
    // right half
    return Math.Max(leftMax, rightMax);
}
JavaScript
// Function to find the maximum number
// in a given array.
function findMax(a, lo, hi) {
    // If lo becomes greater than hi, then return minimum
    // integer possible
    if (lo > hi)
        return Number.MIN_VALUE;
    // If the subarray has only one element, return the
    // element
    if (lo === hi)
        return a[lo];
    const mid = Math.floor((lo + hi) / 2);
    // Get the maximum element from the left half
    const leftMax = findMax(a, lo, mid);
    // Get the maximum element from the right half
    const rightMax = findMax(a, mid + 1, hi);
    // Return the maximum element from the left and right
    // half
    return Math.max(leftMax, rightMax);
}

2. Finding the minimum element in the array:

Similarly, we can use Divide and Conquer Algorithm to find the minimum element in the array by dividing the array into two equal sized subarrays, finding the minimum of those two individual halves by again dividing them into two smaller halves. This is done till we reach subarrays of size 1. After reaching the elements, we return the minimum element and combine the subarrays by returning the minimum in each subarray.

We can use Divide and Conquer Algorithm to sort the array in ascending or descending order by dividing the array into smaller subarrays, sorting the smaller subarrays and then merging the sorted arrays to sort the original array.

Introduction to Divide and Conquer Algorithm – Data Structure and Algorithm Tutorials

Divide and Conquer Algorithm is a problem-solving technique used to solve problems by dividing the main problem into subproblems, solving them individually and then merging them to find solution to the original problem. In this article, we are going to discuss how Divide and Conquer Algorithm is helpful and how we can use it to solve problems.

Table of Content

  • Divide and Conquer Algorithm Definition
  • Working of Divide and Conquer Algorithm
  • Characteristics of Divide and Conquer Algorithm
  • Examples of Divide and Conquer Algorithm
  • Complexity Analysis of Divide and Conquer Algorithm
  • Applications of Divide and Conquer Algorithm
  • Advantages of Divide and Conquer Algorithm
  • Disadvantages of Divide and Conquer Algorithm

Similar Reads

Divide and Conquer Algorithm Definition:

Divide and Conquer Algorithm involves breaking a larger problem into smaller subproblems, solving them independently, and then combining their solutions to solve the original problem. The basic idea is to recursively divide the problem into smaller subproblems until they become simple enough to be solved directly. Once the solutions to the subproblems are obtained, they are then combined to produce the overall solution....

Working of Divide and Conquer Algorithm:

Divide and Conquer Algorithm can be divided into three steps: Divide, Conquer and Merge ....

Characteristics of Divide and Conquer Algorithm:

Divide and Conquer Algorithm involves breaking down a problem into smaller, more manageable parts, solving each part individually, and then combining the solutions to solve the original problem. The characteristics of Divide and Conquer Algorithm are:...

Examples of Divide and Conquer Algorithm:

1. Finding the maximum element in the array:...

Complexity Analysis of Divide and Conquer Algorithm:

T(n) = aT(n/b) + f(n), where n = size of input a = number of subproblems in the recursion n/b = size of each subproblem. All subproblems are assumed to have the same size. f(n) = cost of the work done outside the recursive call, which includes the cost of dividing the problem and cost of merging the solutions...

Applications of Divide and Conquer Algorithm:

The following are some standard algorithms that follow Divide and Conquer algorithm:...

Advantages of Divide and Conquer Algorithm:

Solving difficult problems: Divide and conquer technique is a tool for solving difficult problems conceptually. e.g. Tower of Hanoi puzzle. It requires a way of breaking the problem into sub-problems, and solving all of them as an individual cases and then combining sub- problems to the original problem. Algorithm efficiency: The divide-and-conquer algorithm often helps in the discovery of efficient algorithms. It is the key to algorithms like Quick Sort and Merge Sort, and fast Fourier transforms. Parallelism: Normally Divide and Conquer algorithms are used in multi-processor machines having shared-memory systems where the communication of data between processors does not need to be planned in advance, because distinct sub-problems can be executed on different processors. Memory access: These algorithms naturally make an efficient use of memory caches. Since the subproblems are small enough to be solved in cache without using the main memory that is slower one. Any algorithm that uses cache efficiently is called cache oblivious....

Disadvantages of Divide and Conquer Algorithm:

Overhead: The process of dividing the problem into subproblems and then combining the solutions can require additional time and resources. This overhead can be significant for problems that are already relatively small or that have a simple solution. Complexity: Dividing a problem into smaller subproblems can increase the complexity of the overall solution. This is particularly true when the subproblems are interdependent and must be solved in a specific order. Difficulty of implementation: Some problems are difficult to divide into smaller subproblems or require a complex algorithm to do so. In these cases, it can be challenging to implement a divide and conquer solution. Memory limitations: When working with large data sets, the memory requirements for storing the intermediate results of the subproblems can become a limiting factor....

Frequently Asked Questions (FAQs) on Divide and Conquer Algorithm:

1. What is the Divide and Conquer algorithm?...

Contact Us