Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> प्रोग्रामिंग

एक सरणी में व्युत्क्रमों की गणना करें


सरणी का व्युत्क्रम दर्शाता है; सरणी को उसके क्रमबद्ध रूप में बदलने के लिए कितने परिवर्तनों की आवश्यकता है। जब एक सरणी पहले से ही सॉर्ट की जाती है, तो उसे 0 व्युत्क्रम की आवश्यकता होती है, और दूसरे मामले में, यदि सरणी को उलट दिया जाता है, तो व्युत्क्रमों की संख्या अधिकतम होगी।

इस समस्या को हल करने के लिए, हम समय की जटिलता को कम करने के लिए मर्ज सॉर्ट दृष्टिकोण का पालन करेंगे, और इसे डिवाइड एंड कॉनकर एल्गोरिथम में बनाएंगे।

इनपुट और आउटपुट

Input:
A sequence of numbers. (1, 5, 6, 4, 20).
Output:
The number of inversions required to arrange the numbers into ascending order.
Here the number of inversions are 2.
First inversion: (1, 5, 4, 6, 20)
Second inversion: (1, 4, 5, 6, 20)

एल्गोरिदम

मर्ज (सरणी, tempArray, बाएँ, मध्य, दाएँ)

इनपुट: दो सरणियाँ, जो मर्ज हो गई हैं, बाएँ, दाएँ और मध्य अनुक्रमणिका।

>आउटपुट: मर्ज किए गए सरणी क्रमबद्ध क्रम में।

Begin
   i := left, j := mid, k := right
   count := 0
   while i <= mid -1 and j <= right, do
      if array[i] <= array[j], then
         tempArray[k] := array[i]
         increase i and k by 1
      else
         tempArray[k] := array[j]
         increase j and k by 1
         count := count + (mid - i)
   done

   while left part of the array has some extra element, do
      tempArray[k] := array[i]
      increase i and k by 1
   done

   while right part of the array has some extra element, do
      tempArray[k] := array[j]
      increase j and k by 1
   done

   return count
End

मर्जसॉर्ट (सरणी, tempArray, बाएँ, दाएँ)

इनपुट: सरणी और अस्थायी सरणी को देखते हुए, सरणी के बाएँ और दाएँ अनुक्रमणिका।

>आउटपुट - छँटाई के बाद व्युत्क्रमों की संख्या।

Begin
   count := 0
   if right > left, then
      mid := (right + left)/2
      count := mergeSort(array, tempArray, left, mid)
      count := count + mergeSort(array, tempArray, mid+1, right)
      count := count + merge(array, tempArray, left, mid+1, right)
   return count
End

उदाहरण

#include <iostream>
using namespace std;

int merge(intarr[], int temp[], int left, int mid, int right) {
   int i, j, k;
   int count = 0;
   
   i = left;    //i to locate first array location
   j = mid;     //i to locate second array location
   k = left;    //i to locate merged array location

   while ((i <= mid - 1) && (j <= right)) {
      if (arr[i] <= arr[j]) {    //when left item is less than right item
         temp[k++] = arr[i++];
      }else{
         temp[k++] = arr[j++];
         count += (mid - i);    //find how many convertion is performed
      }
   }

    while (i <= mid - 1)    //if first list has remaining item, add them in the list
       temp[k++] = arr[i++];

    while (j <= right)    //if second list has remaining item, add them in the list
       temp[k++] = arr[j++];
   
    for (i=left; i <= right; i++)
       arr[i] = temp[i];    //store temp Array to main array
    return count;
}

intmergeSort(intarr[], int temp[], int left, int right) {
   int mid, count = 0;

   if (right > left) {
      mid = (right + left)/2;    //find mid index of the array
      count  = mergeSort(arr, temp, left, mid);    //merge sort left sub array
      count += mergeSort(arr, temp, mid+1, right);    //merge sort right sub array
         
      count += merge(arr, temp, left, mid+1, right);    //merge two sub arrays
   }
   return count;
}

intarrInversion(intarr[], int n) {
   int temp[n];
   return mergeSort(arr, temp, 0, n - 1);
}

int main() {
   intarr[] = {1, 5, 6, 4, 20};
   int n = 5;
   cout<< "Number of inversions are "<<arrInversion(arr, n);
}

आउटपुट

Number of inversions are 2

  1. सी/सी++ प्रोग्राम मर्ज सॉर्ट का उपयोग करके एक सरणी में व्युत्क्रमों की गणना करने के लिए?

    दिए गए सरणी को क्रमबद्ध करने के लिए होने वाले व्युत्क्रमों की संख्या को व्युत्क्रम गणना के रूप में जाना जाता है। उलटा समस्या एक शास्त्रीय समस्या है जिसे मर्ज सॉर्ट एल्गोरिदम का उपयोग करके हल किया जा सकता है। इस समस्या में हम इसके बाईं ओर सभी तत्वों को अधिक से अधिक गिनेंगे और गिनती को आउटपुट में जोड़

  1. एक सरणी में व्युत्क्रमों की गणना करने के लिए पायथन कार्यक्रम

    इस लेख में, हम नीचे दिए गए समस्या कथन के समाधान के बारे में जानेंगे। समस्या कथन - हमें एक सूची दी गई है, हमें आवश्यक व्युत्क्रम की गणना करने और उसे प्रदर्शित करने की आवश्यकता है। सरणी को क्रमबद्ध करने के लिए कितने चरणों की आवश्यकता है, इसकी गणना करके उलटा गणना प्राप्त की जाती है। आइए अब नीचे दिए

  1. पायथन में एक सरणी में अलग-अलग तत्वों की गणना करें

    पायथन में एक सूची में हमारे पास डुप्लिकेट तत्व हो सकते हैं। जब हम सूची की लंबाई की गणना करते हैं तो हमें डुप्लिकेट तत्वों सहित कुल लंबाई मिलती है। लेकिन इस लेख में हम देखेंगे कि किसी सूची में विशिष्ट तत्वों या अद्वितीय तत्वों की कुल संख्या कैसे प्राप्त करें। उदाहरण नीचे के उदाहरण में हम संग्रह मॉड्