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

C++ में किसी सरणी की न्यूनतम समायोजन लागत ज्ञात करें

अवधारणा

सकारात्मक पूर्णांकों के दिए गए सरणी के संबंध में, हम सरणी में प्रत्येक तत्व को प्रतिस्थापित करते हैं ताकि सरणी में आसन्न तत्वों के बीच का अंतर किसी दिए गए लक्ष्य से कम या बराबर हो। अब, समायोजन लागत को कम करने का हमारा कार्य, वह है नए और पुराने मूल्यों के बीच अंतर का योग। इसलिए, हमें मूल रूप से Σ|A[i] – Anew . को कम करने की आवश्यकता है [i]| जहाँ 0 ≤ i ≤ n-1, n को A[] और Anew के आकार के रूप में दर्शाया गया है [] को लक्ष्य से कम या उसके बराबर आसन्न अंतर वाले सरणी के रूप में दर्शाया गया है। मान लें कि सरणी के सभी तत्व स्थिर M =100 से छोटे हैं।

इनपुट

arr = [56, 78, 53, 62, 40, 7, 26, 61, 50, 48], target = 20

आउटपुट

Minimum adjustment cost is 35

विधि

समायोजन लागत को कम करने के लिए Σ|A[i] – Aनया [i]|, सरणी में सभी अनुक्रमणिका i के लिए, हमें याद है कि |A[i] – Anew [i]|जितना संभव हो शून्य के करीब होना चाहिए। यह भी ध्यान दिया जाना चाहिए कि,

|ए[i] - ए<उप>नया [i+1] ]| ≤ लक्ष्य।

यहाँ, इस समस्या को डायनेमिक प्रोग्रामिंग (DP) द्वारा हल किया जा सकता है।

मान लें कि dp1[i][j] A[i] को j में बदलने पर न्यूनतम समायोजन लागत का प्रतिनिधित्व करता है, तो DP संबंध को -

द्वारा परिभाषित किया जाता है

dp1[i][j] =min{dp1[i - 1][k]} + |j ​​- A[i]|

सभी k के लिए ऐसा |k - j| ≤ लक्ष्य

इस मामले में, 0 i n और 0 j ≤ M जहां n सरणी में तत्वों की संख्या है और M =100। तो, सभी kvalues ​​​​इस तरह से माना जाता है कि max(j – target, 0) ≤ k ≤ मिनट (एम, जे + लक्ष्य) अंत में, सरणी की न्यूनतम समायोजन लागत न्यूनतम होगी {dp1[n - 1][j]} सभी 0 j ≤ M.

के लिए

उदाहरण

// C++ program to find minimum adjustment cost of an array
#include <bits/stdc++.h>
using namespace std;
#define M1 100
//Shows function to find minimum adjustment cost of an array
int minAdjustmentCost(int A1[], int n1, int target1){
   // dp1[i][j] stores minimal adjustment cost on changing
   // A1[i] to j
   int dp1[n1][M1 + 1];
   // Tackle first element of array separately
   for (int j = 0; j <= M1; j++)
      dp1[0][j] = abs(j - A1[0]);
   // Perform for rest elements of the array
   for (int i = 1; i < n1; i++){
      // Now replace A1[i] to j and calculate minimal adjustment
      // cost dp1[i][j]
      for (int j = 0; j <= M1; j++){
         // We initialize minimal adjustment cost to INT_MAX
         dp1[i][j] = INT_MAX;
         // We consider all k such that k >= max(j - target1, 0)
         and
         // k <= min(M1, j + target1) and take minimum
      for (int k = max(j-target1,0); k <= min(M1,j+target1);
         k++)
         dp1[i][j] = min(dp1[i][j], dp1[i - 1][k] + abs(A1[i] -j));
      }
   }
   //Now return minimum value from last row of dp table
   int res1 = INT_MAX;
   for (int j = 0; j <= M1; j++)
      res1 = min(res1, dp1[n1 - 1][j]);
   return res1;
}
// Driver Program to test above functions
int main(){
   int arr1[] = {56, 78, 53, 62, 40, 7, 26, 61, 50, 48};
   int n1 = sizeof(arr1) / sizeof(arr1[0]);
   int target1 = 20;
   cout << "Minimum adjustment cost is "
   << minAdjustmentCost(arr1, n1, target1) << endl;
   return 0;
}

आउटपुट

Minimum adjustment cost is 35

  1. C++ में सरणी के न्यूनतम और अधिकतम तत्वों को खोजने के लिए पुनरावर्ती कार्यक्रम

    हमें इनपुट के रूप में एक पूर्णांक सरणी Arr[] दी गई है। लक्ष्य पुनरावर्ती विधियों का उपयोग करके सरणी के बीच अधिकतम और न्यूनतम तत्वों को खोजना है। चूंकि हम रिकर्सन का उपयोग कर रहे हैं, हम पूरे सरणी को तब तक पार करेंगे जब तक हम लंबाई =1 तक नहीं पहुंच जाते हैं, फिर ए [0] लौटाते हैं जो बेस केस बनाता है।

  1. सी++ में 3-डी सरणी में न्यूनतम योग पथ

    हमें एक क्यूब दिया गया है जिसे क्यूब [लंबाई] [चौड़ाई] [ऊंचाई] के रूप में 3-डी सरणी का उपयोग करके बनाया जा सकता है। कार्य न्यूनतम योग पथ की गणना करना है जो घन को पार करके प्राप्त किया जाएगा और इसलिए परिणाम प्रिंट करें। आइए इसके लिए विभिन्न इनपुट आउटपुट परिदृश्य देखें - में - इंट क्यूब [लंबाई] [चौड

  1. C++ में प्रत्येक कार्तीय निर्देशांक को जोड़ने के लिए न्यूनतम लागत ज्ञात करने का कार्यक्रम

    मान लीजिए कि हमारे पास 2D कार्टेशियन निर्देशांक बिंदुओं (x, y) की एक सूची है। हम (x0, y0) और (x1, y1) को जोड़ सकते हैं, जिसकी लागत |x0 - x1| + |y0 - y1|। यदि हमें किसी भी संख्या में बिंदुओं को जोड़ने की अनुमति दी जाती है, तो हमें आवश्यक न्यूनतम लागत का पता लगाना होगा जैसे कि प्रत्येक बिंदु एक पथ से