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

मैट्रिक्स चेन मल्टीप्लिकेशन

यदि मैट्रिक्स की एक चेन दी गई है, तो हमें मैट्रिक्स को गुणा करने के सही क्रम के लिए न्यूनतम संख्या ढूंढनी है।

हम जानते हैं कि मैट्रिक्स गुणन साहचर्य है, इसलिए चार मैट्रिक्स ABCD के लिए, हम A(BCD), (AB)(CD), (ABC)D, A(BC)D जैसे क्रम में गुणा कर सकते हैं। इन क्रमों की तरह, हमारा कार्य यह ढूंढना है कि कौन सा क्रम गुणा करने के लिए कुशल है।

दिए गए इनपुट में एक ऐरे है, मान लें arr[] = {1, 2, 3, 4}। इसका मतलब है कि मैट्रिक्स का क्रम (1 x 2), (2 x 3), (3 x 4) है।

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

इनपुट: इनपुट मैट्रिक्स के क्रम
{1, 2, 3, 4}। इसका मतलब मैट्रिक्स हैं {(1 x 2), (2 x 3), (3 x 4)}।

आउटपुट: इन तीन मैट्रिक्स को गुणा करने के लिए आवश्यक न्यूनतम ऑपरेशन्स की संख्या। यहां परिणाम 18 है।

एल्गोरिदम

matOrder(array, n)

इनपुट: मैट्रिक्स की सूची, सूची में मैट्रिक्स की संख्या
आउटपुट: न्यूनतम मैट्रिक्स गुणन संख्या

शुरुआत
    n x n आकार की minMul टेबल परिभाषित करें, शुरू में सभी 0s से भरें
    length := 2 से n तक, करें
        i := 1 से n-length तक, करें
            j := i + length - 1
            minMul[i, j] := ∞
            k := i से j-1 तक, करें
                q := minMul[i, k] + minMul[k+1, j] + array[i-1]*array[k]*array[j]
                यदि q < minMul[i, j], तो minMul[i, j] := q
            पूर्ण
        पूर्ण
    पूर्ण
    वापस minMul[1, n-1]
अंत

उदाहरण (C++ कोड)

#include <iostream>
using namespace std;

int matOrder(int array[], int n) {
    int minMul[n][n];
    
    for (int i = 1; i < n; i++)
        minMul[i][i] = 0;
    
    for (int length = 2; length < n; length++) {
        for (int i = 1; i < n-length+1; i++) {
            int j = i + length - 1;
            minMul[i][j] = INT_MAX;
            for (int k = i; k <= j-1; k++) {
                int q = minMul[i][k] + minMul[k+1][j] + array[i-1]*array[k]*array[j];
                if (q < minMul[i][j])
                    minMul[i][j] = q;
            }
        }
    }
    return minMul[1][n-1];
}

int main() {
    int arr[] = {1, 2, 3, 4};
    int size = 4;
    cout << "Minimum number of matrix multiplications: " << matOrder(arr, size);
}

आउटपुट

Minimum number of matrix multiplications: 18
  1. C++ में मैट्रिक्स का जिगजैग (या विकर्ण) ट्रैवर्सल C++ में मैट्रिक्स का जिगजैग (या विकर्ण) ट्रैवर्सल

    इस समस्या में, हमें एक 2D मैट्रिक्स दिया गया है। हमारा कार्य मैट्रिक्स के सभी तत्वों को विकर्ण क्रम में प्रिंट करना है। समस्या को समझने के लिए एक उदाहरण लेते हैं, 1 2 3 4 5 6 7 8 9 आउटपुट - 1 4 2 7 5 3 8 6 9 आइए उस पैटर्न को देखें जो मैट्रिक्स को जिगजैग या विकर्ण रूप में प्रिंट

  1. C++ में स्पाइरल मैट्रिक्स III (Spiral Matrix III) C++ में स्पाइरल मैट्रिक्स III (Spiral Matrix III)

    मान लीजिए हमारे पास R पंक्तियों और C स्तंभों वाला एक 2-आयामी ग्रिड है, हम (r0, c0) से शुरू करते हैं और पूर्व की ओर मुख किए होते हैं। यहां, ग्रिड का उत्तर-पश्चिम कोना पहली पंक्ति और स्तंभ पर है, और दक्षिण-पूर्व कोना अंतिम पंक्ति और स्तंभ पर है। हम इस ग्रिड में हर स्थिति को देखने के लिए दक्षिणावर्त स

  1. - पायथन प्रोग्राम: दो मैट्रिक्स का गुणन

    दो यूजर इनपुट मैट्रिक्स दी गई हैं। हमारा कार्य दो मैट्रिक्स का गुणन प्रदर्शित करना है। इन समस्याओं में हम नेस्टेड लिस्ट कॉम्प्रिहेंशन का उपयोग करते हैं।एल्गोरिदमचरण 1: दो मैट्रिक्स इनपुट करें। चरण 2: प्रत्येक पंक्ति और प्रत्येक कॉलम के माध्यम से इटरेट करने के लिए नेस्टेड फॉर लूप्स। चरण 3: एक रिजल्टे