Divide and Conquer
Learn more about Divide and Conquer Algorithms in DSA Self Paced Course
Practice Problems on Divide and Conquer
Recent Articles on Divide and Conquer
Some Quizzes on Divide and Conquer
What is Divide and Conquer?
Divide and Conquer is an algorithmic paradigm in which the problem is solved using the Divide, Conquer, and Combine strategy.
A typical Divide and Conquer algorithm solves a problem using following three steps:
- Divide: This involves dividing the problem into smaller sub-problems.
- Conquer: Solve sub-problems by calling recursively until solved.
- Combine: Combine the sub-problems to get the final solution of the whole problem.
Standard algorithms that follow Divide and Conquer algorithm
The following are some standard algorithms that follow Divide and Conquer algorithm.
- Quicksort is a sorting algorithm. The algorithm picks a pivot element and rearranges the array elements so that all elements smaller than the picked pivot element move to the left side of the pivot, and all greater elements move to the right side. Finally, the algorithm recursively sorts the subarrays on the left and right of the pivot element.
- Merge Sort is also a sorting algorithm. The algorithm divides the array into two halves, recursively sorts them, and finally merges the two sorted halves.
- Closest Pair of Points The problem is to find the closest pair of points in a set of points in the x-y plane. The problem can be solved in O(n^2) time by calculating the distances of every pair of points and comparing the distances to find the minimum. The Divide and Conquer algorithm solves the problem in O(N log N) time.
- Strassen’s Algorithm is an efficient algorithm to multiply two matrices. A simple method to multiply two matrices needs 3 nested loops and is O(n^3). Strassen’s algorithm multiplies two matrices in O(n^2.8974) time.
- Cooley–Tukey Fast Fourier Transform (FFT) algorithm is the most common algorithm for FFT. It is a divide and conquer algorithm which works in O(N log N) time.
- Karatsuba algorithm for fast multiplication does the multiplication of two n-digit numbers in at most single-digit multiplications in general (and exactly when n is a power of 2). It is, therefore, faster than the classical algorithm, which requires n2 single-digit products. If n = 210 = 1024, in particular, the exact counts are 310 = 59, 049 and (210)2 = 1, 048, 576, respectively.
Example of Divide and Conquer algorithm
A classic example of Divide and Conquer is Merge Sort demonstrated below. In Merge Sort, we divide array into two halves, sort the two halves recursively, and then merge the sorted halves.
- Intoduction to Divide and Conquer
- Dynamic Programming vs Divide-and-Conquer
- Decrease and Conquer
- Advanced master theorem for divide and conquer recurrences
- Binary Search
- Merge Sort
- Quick Sort
- Calculate pow(x, n)
- Karatsuba algorithm for fast multiplication
- Strassen’s Matrix Multiplication
- Convex Hull (Simple Divide and Conquer Algorithm)
- Quickhull Algorithm for Convex Hull
- Find a peak element in a given array
- Check for Majority Element in a sorted array
- K-th Element of Two Sorted Arrays
- Find the number of zeroes
- Find the Rotation Count in Rotated Sorted array
- Find the point where a monotonically increasing function becomes positive first time
- Median of two sorted arrays
- Median of two sorted arrays of different sizes
- The painter’s partition problem using Binary Search
- Square root of an integer
- Maximum and minimum of an array using minimum number of comparisons
- Find frequency of each element in a limited range array in less than O(n) time
- Tiling Problem
- Count Inversions
- The Skyline Problem
- Search in a Row-wise and Column-wise Sorted 2D Array
- Allocate minimum number of pages
- Modular Exponentiation (Power in Modular Arithmetic)
- Learn Data Structure and Algorithms | DSA Tutorial
- ‘Practice Problems’ on Divide and Conquer
- ‘Quizzes’ on Divide and Conquer
If you like GeeksforGeeks and would like to contribute, you can also write an article and mail your article to firstname.lastname@example.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.