Question

In: Computer Science

The sequence 2, 4, 1, 3, 5 has three inversions (2,1), (4,1), (4,3). Using C++ Code...

The sequence 2, 4, 1, 3, 5 has three inversions (2,1), (4,1), (4,3). Using C++ Code an O(nlog(n)) algorithm to count the number of inversions. Use the Merge sort Algorithm, and use the template below: (Use the file below that to test)

countInv.cpp -------------------------------------------------------------------------------------------------------------------------------

#include <vector>
#include <algorithm>

using namespace std;


int mergeInv(vector<int>& nums, vector<int>& left, vector<int>& right) {

// Your code here


}

int countInv(vector<int>&nums) {
// Your code here


}

CountInv_test.cpp -------------------------------------------------------------------------------------------------------------------------

#include <iostream>
#include <vector>


using namespace std;


int countInv(vector<int>& numvec);

int main()
{
int n;
vector<int> numvec{4, 5, 6, 1, 2, 3};
n = countInv(numvec);
cout << "Number of inversions " << n << endl; // Should be 9
  
numvec = {1, 2, 3, 4, 5, 6};
n = countInv(numvec);
cout << "Number of inversions " << n << endl; // Should be 0
  
numvec = {6, 5, 4, 3, 2, 1};
n = countInv(numvec);
cout << "Number of inversions " << n << endl; // Should be 15
  
numvec = {0, 0, 0, 0, 0, 0};
n = countInv(numvec);
cout << "Number of inversions " << n << endl;; // Should be 0
}


Solutions

Expert Solution

I have combined both the files in one file.

Output:

Code:

#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;

int mergeInv(vector<int>& nums, vector<int>& left, vector<int>& right, int l) {

    int i=0, j=0, k=l, count = 0;
    int left_size = left.size();
    while (i<left.size() && j<right.size()) {
        if (left[i] <= right[j])
            nums[k++] = left[i++];
        else {
            nums[k++] = right[j++];
            count += left_size - i; //add number of inversions(number of element in the left subarray after the ith element)
        }
    }
    return count;

}

int merge(vector<int>& nums, int l, int r)
{
    int ans = 0;
    if (l<r) {
        int m = (l + r) / 2;
        ans += merge(nums, l, m);     //count inversions in left subarray
        ans += merge(nums, m + 1, r); //count inversions in right subarray
        vector<int> left, right;
        left.assign(nums.begin()+l, nums.begin()+m+1);     //left subarray
        right.assign(nums.begin()+m+1, nums.begin()+r+1); //right subarray
        ans += mergeInv(nums, left, right, l); //merge count
    }
    return ans;
}

int countInv(vector<int>&nums) {

    int n = nums.size();
    return merge(nums, 0, n-1);

}
int main(){
    int n;
    vector<int> numvec{4, 5, 6, 1, 2, 3};
    n = countInv(numvec);
    cout << "Number of inversions " << n << endl; // Should be 9
    
    numvec = {1, 2, 3, 4, 5, 6};
    n = countInv(numvec);
    cout << "Number of inversions " << n << endl; // Should be 0
    
    numvec = {6, 5, 4, 3, 2, 1};
    n = countInv(numvec);
    cout << "Number of inversions " << n << endl; // Should be 15
    
    numvec = {0, 0, 0, 0, 0, 0};
    n = countInv(numvec);
    cout << "Number of inversions " << n << endl;; // Should be 0
}


Related Solutions

The sequence 2, 4, 1, 3, 5 has three inversions (2,1), (4,1), (4,3). Using C++ Code...
The sequence 2, 4, 1, 3, 5 has three inversions (2,1), (4,1), (4,3). Using C++ Code an O(nlog(n)) algorithm to count the number of inversions. Use the Merge sort Algorithm, and use the template below: (Use the file below that to test) countInv.cpp ------------------------------------------------------------------------------------------------------------------------------- #include <vector> #include <algorithm> using namespace std; int mergeInv(vector<int>& nums, vector<int>& left, vector<int>& right) { // Your code here } int countInv(vector<int>&nums) { // Your code here } CountInv_test.cpp ------------------------------------------------------------------------------------------------------------------------- #include <iostream> #include <vector> using namespace...
Fix the C++ code to count the number of inversions using the given array. The answer...
Fix the C++ code to count the number of inversions using the given array. The answer is 8 inversions, but I am only getting 6 inversions. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #include <iostream> using namespace std; int mergeInversion(int arr[], int l, int m, int r) {     // size of the two arrays     int n1 = m - l + 1;     int n2 = r - m;     // create temporary arrays     int L[n1];     int R[n2];     // Copy the...
Assume that there are a sequence of consecutive integers 1, 2, 3, 4, 5, ... 15....
Assume that there are a sequence of consecutive integers 1, 2, 3, 4, 5, ... 15. Tom and Jim respectively select a number from the sequence randomly (no repetition). Given that Tom’s number is divisible by 5, what’s the probability that Tom’s number is greater than Jim’s number ?
Direction ratio of line joining (2, 3, 4) and (−1, −2, 1), are: A. (−3, −5, −3) B. (−3, 1, −3) C. (−1, −5, −3) D. (−3, −5, 5)
Direction ratio of line joining (2, 3, 4) and (−1, −2, 1), are:A. (−3, −5, −3)B. (−3, 1, −3)C. (−1, −5, −3)D. (−3, −5, 5)
Consider the following virtual page reference sequence: page 1, 2, 3, 4, 2, 1, 5, 6,...
Consider the following virtual page reference sequence: page 1, 2, 3, 4, 2, 1, 5, 6, 2, 1, 2, 3. This indicates that these particular pages need to be accessed by the computer in the order shown. Consider each of the following 4 algorithm-frame combinations: LRU with 3 frames FIFO with 3 frames LRU with 4 frames FIFO with 4 frames Print a copy of this page. For each of the 4 combinations, below, move from left to right as...
write a java code to calculate 1+2-3+4-5 …-99+100
write a java code to calculate 1+2-3+4-5 …-99+100
4. (a) Suppose that τσ=(1 5 2 3)(4) and στ=(1 2 4 5)(3) in S5. If...
4. (a) Suppose that τσ=(1 5 2 3)(4) and στ=(1 2 4 5)(3) in S5. If σ1 = 2, find σ and τ. (b) In Sn, show that σ = τ if and only if σ(τ)^(−1) = ε. ε is the identity permutation. Must be written as a proof. (c) Let σ=(1 2 3) and τ=(1 2) in S3. Show that S3={ε,σ,σ^2,τ,τσ,τ(σ)^2} and that σ^3=ε=τ^2 and στ=τ(σ)^2, then fill out the multiplication table for S3.
coffee tea juice 3 4 5 5 4 3 4 4 4 5 1 2 4...
coffee tea juice 3 4 5 5 4 3 4 4 4 5 1 2 4 2 2 Do a One-way ANOVA by hand (at least once in your life!) …Is there a difference in attention for those who drink coffee, tea, or juice during an 8 a.m. class? Utilize the five steps of hypothesis testing to analyze the following data (p<.01). Attention Ratings (1=no attention- 5=full attention)
trace by using quicksort on the array : 4 6 5 3 2 7 1 using...
trace by using quicksort on the array : 4 6 5 3 2 7 1 using 7 as the pivot
Find the distances: A) Between ?1=〈2+2?,−1+?,−3?〉and ?2=〈4,−5−3?,1+4?〉 . B) Between the planes 2?−?+5?=0 and 2?−?+5?=5 ....
Find the distances: A) Between ?1=〈2+2?,−1+?,−3?〉and ?2=〈4,−5−3?,1+4?〉 . B) Between the planes 2?−?+5?=0 and 2?−?+5?=5 . C) From the point (1,2,3) to the line ?=〈−?,4−?,1+4?〉 .
ADVERTISEMENT
ADVERTISEMENT
ADVERTISEMENT