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

C++ में 0 की प्रविष्टि के साथ दो सरणियों का अधिकतम डॉट उत्पाद खोजें

मान लीजिए कि हमारे पास m और n आकार के धनात्मक पूर्णांकों के दो सरणियाँ हैं। एम> एन। हमें दूसरी सरणी में शून्य डालकर डॉट उत्पाद को अधिकतम करना होगा। हमें एक बात का ध्यान रखना होगा कि हम दिए गए सरणियों में तत्वों के क्रम को नहीं बदलेंगे। मान लीजिए कि सरणियाँ A =[2, 3, 1, 7, 8] हैं, और दूसरी सरणी B =[3, 6, 7] हैं। आउटपुट 107 होगा। हम दूसरे एरे के पहले और तीसरे स्थान पर 0s डालने के बाद डॉट उत्पाद को अधिकतम कर सकते हैं। तो उत्पाद 2 * 0 + 3 * 3 + 1 * 0 + 7 * 6 + 8 * 7 =107 होगा।

इसे हल करने के लिए, हम डायनेमिक प्रोग्रामिंग दृष्टिकोण का उपयोग करेंगे। तो A का आकार m है, और B का आकार n है। हम क्रम (n + 1)x(m + 1) की गतिशील प्रोग्रामिंग के लिए एक तालिका बनाएंगे, और इसे 0s से भरेंगे। अब बाकी काम करने के लिए इन चरणों का इस्तेमाल करें -

  • 1 से n की सीमा में i के लिए:

    • j के लिए:=i से m

      • j के लिए:=i से m

  • तालिका [i, j]:=अधिकतम (तालिका [i - 1, j - 1] + A [j - 1] * B [i - 1], तालिका [i, j - 1])

उदाहरण

#include <iostream>
using namespace std;
long long int findMaximumDotProd(int A[], int B[], int m, int n) {
   long long int table[n+1][m+1];
   for(int i = 0; i<=n; i++){
      for(int j = 0; j<=m; j++){
         table[i][j] = 0;
      }
   }
   for (int i=1; i<=n; i++)
   for (int j=i; j<=m; j++)
   table[i][j] = max((table[i-1][j-1] + (A[j-1]*B[i-1])) , table[i][j-1]);
   return table[n][m] ;
}
int main() {
   int A[] = { 2, 3 , 1, 7, 8 } ;
   int B[] = { 3, 6, 7 } ;
   int m = sizeof(A)/sizeof(A[0]);
   int n = sizeof(B)/sizeof(B[0]);
   cout << "Maximum dot product: " << findMaximumDotProd(A, B, m, n);
}

आउटपुट

Maximum dot product: 107

  1. सी ++ में एक पेड़ में दो गैर-अंतर्विभाजक पथों का अधिकतम उत्पाद

    इस समस्या में, हमें n नोड्स के साथ एक अप्रत्यक्ष कनेक्टेड ट्री T दिया जाता है। हमारा कार्य C++ में एक ट्री में दो गैर-अंतर्विभाजकपथों के अधिकतम उत्पाद को खोजने के लिए एक प्रोग्राम बनाना है। समस्या का विवरण - एक पेड़ में दो अप्रतिच्छेदी पथों का अधिकतम गुणनफल ज्ञात करना। हम सभी गैर-दिलचस्प पथ खोजेंगे

  1. सी++ में एक सरणी में अधिकतम जीसीडी के साथ जोड़ी खोजें

    मान लीजिए कि हमारे पास सकारात्मक पूर्णांकों की एक सरणी है। हमारा काम सरणी से पूर्णांकों की जोड़ी को खोजना है, जहां GCD मान अधिकतम है। मान लीजिए A ={1, 2, 3, 4, 5}, तो आउटपुट 2 है। जोड़ी (2, 4) में GCD 2 है, अन्य GCD मान 2 से कम हैं। इस समस्या को हल करने के लिए, हम प्रत्येक तत्व के भाजक की गिनती को

  1. सी ++ में उत्पाद के बराबर एलसीएम के साथ अधिकतम लंबाई उपसरणी

    मान लीजिए कि हमारे पास एक सरणी A है। हमें उप-सरणी की अधिकतम लंबाई ज्ञात करनी है, जिसका LCM उस उप-सरणी के तत्वों के गुणनफल के समान है। यदि उस प्रकार का उप-सरणी नहीं मिलता है, तो -1 लौटाएं। मान लीजिए सरणी {6, 10, 21} है, तो लंबाई 2 है, क्योंकि उप-सरणी {10, 21} है, जिसका एलसीएम 210 है, और उत्पाद भी 210