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

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


अवधारणा

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

इनपुट

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

आउटपुट

न्यूनतम समायोजन लागत 35 है

विधि

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

|A[i] – A_new[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। तो, सभी k मानों पर इस तरह विचार किया जाता है कि max(j - लक्ष्य, 0) ≤ k ≤ min(M, j + लक्ष्य) अंत में, सरणी की न्यूनतम समायोजन लागत min{dp1[n - 1][j]} होगी सभी 0 ≤ j ≤ M के लिए।

उदाहरण

// सरणी की न्यूनतम समायोजन लागत ढूंढने के लिए C++ प्रोग्राम #include <bits/stdc++.h> using namespace std; #define M1 100 // सरणी की न्यूनतम समायोजन लागत ढूंढने के लिए फ़ंक्शन दिखाता है int minAdjustmentCost(int A1[], int n1, int target1){    // dp1[i][j] A1[i] को j में बदलने पर न्यूनतम समायोजन लागत संग्रहीत करता है    int dp1[n1][M1 + 1];    // सरणी के पहले तत्व को अलग से संभालें    for (int j = 0; j <= M1; j++)       dp1[0][j] = abs(j - A1[0]);    // सरणी के शेष तत्वों के लिए करें    for (int i = 1; i < n1; i++){       // अब A1[i] को j से प्रतिस्थापित करें और न्यूनतम समायोजन       // लागत dp1[i][j] की गणना करें       for (int j = 0; j <= M1; j++){          // हम न्यूनतम समायोजन लागत को INT_MAX से प्रारंभ करते हैं          dp1[i][j] = INT_MAX;          // हम सभी k पर विचार करते हैं जैसे कि k >= max(j - target1, 0)          और          // k <= min(M1, j + target1) और न्यूनतम लेते हैं       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));       }    }    // अब dp टेबल की अंतिम पंक्ति से न्यूनतम मान लौटाएं    int res1 = INT_MAX;    for (int j = 0; j <= M1; j++)       res1 = min(res1, dp1[n1 - 1][j]);    return res1; } // उपरोक्त फ़ंक्शन का परीक्षण करने के लिए ड्राइवर प्रोग्राम 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 << "न्यूनतम समायोजन लागत है "    << minAdjustmentCost(arr1, n1, target1) << endl;    return 0; }

आउटपुट

न्यूनतम समायोजन लागत है 35

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

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

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

    हमें एक घन दिया गया है जिसे 3-D सरणी के रूप में cube[length][breadth][height] का उपयोग करके बनाया जा सकता है। कार्य घन को ट्रैवर्स करके प्राप्त होने वाले न्यूनतम योग पथ की गणना करना है और परिणाम प्रिंट करना है। विभिन्न इनपुट-आउटपुट परिदृश्य देखते हैं: इनपुट: int cube[length][breadth][height] = { {

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

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