Given a range [L, R] where L ≤ R, the task is to generate a random permutation of the sequence [L, L + 1, L + 2, …, R].
Input: L = 5, R = 15
Output: 11 9 6 5 8 7 10 12 13 15 14
Input: L = 10, R = 20
Output: 16 14 11 10 13 12 15 17 18 20 19
Approach: We will use Divide and Conquer algorithm for our solution. We will create a global vector that will store random numbers generated by our recursive function generate_random_permutation().
We will pass two arguments L (start) and R (end) to our recursive function. Inside the function it will call another function give_random_number that will return a number between X and Y. Lets call it N. We will store this random number in our vector and then we will call generate_random_permutation() function recursively for range [L, N – 1] and then for range [N + 1, R].
If L becomes greater than R then we will return from the function without performing any task, as this is our base condition.
Below is the implementation of the above approach:
11 9 6 5 8 7 10 12 13 15 14
Time Complexity: O(n)
- Generate a random permutation of 1 to N
- Dynamic Programming vs Divide-and-Conquer
- Divide and Conquer Algorithm | Introduction
- Convex Hull using Divide and Conquer Algorithm
- Maximum Subarray Sum using Divide and Conquer algorithm
- The Skyline Problem using Divide and Conquer algorithm
- Tiling Problem using Divide and Conquer algorithm
- Divide and Conquer | Set 5 (Strassen's Matrix Multiplication)
- Longest Common Prefix using Divide and Conquer Algorithm
- Closest Pair of Points using Divide and Conquer algorithm
- Advanced master theorem for divide and conquer recurrences
- Merge K sorted arrays | Set 3 ( Using Divide and Conquer Approach )
- Merge K sorted arrays of different sizes | ( Divide and Conquer Approach )
- Program to generate random alphabets
- C++ program to generate random number