İki matrisin vurulması

Çətinlik səviyyəsi Asan
Tez-tez soruşulur Amazon alma Facebook Arzu
Geyim MatrisBaxılıb 653

Problem bəyanat

“İki matrisin vurulması” məsələsində iki matris verdik. Bu matrisləri çoxaltmalı və nəticəni və ya sonu yazmalıyıq matris. Burada lazımlı və kifayət şərt A-dakı sütunların sayı B matrisindəki sətirlərin sayına bərabər olmalıdır, əgər bu şərt doğru deyilsə, onda bu matrisləri çoxaltmaq olmaz.

Giriş Formatı

Dörd tam dəyər r1, c1, r2, c2 olan ilk sətir. Burada r1 və c1 birinci matrisin sətir və sütunlarının sayını göstərir. Və r2, c2, ikinci matrisin sətir, sütun sayını göstərir.

Sonrakı c1 tam dəyərlərini ehtiva edən r1 sətirləri.

Və sonrakı c2 tam dəyərlərini ehtiva edən r2 sətirləri.

Çıxış formatı

Çarpmadan sonra son matrisanı hər sətir yeni sətirdən başlayacaq və hər sətirdə boşluqla ayrılmış hər bir elementi çap edin.

Məhdudiyyətlər

  • 1 <= r1, c1, r2, c2 <= 2000.
  • 1 <= | m [i] [j] | <= 10 ^ 9, burada m matrisdir və elementin satırdakı və j sütundakı mövqeyi.

misal

4 4 4 4
1 1 1 1
1 6 7 6
6 3 7 12
4 4 4 4
1 1 1 1
2 2 2 2
3 3 3 3
4 9 1 7
10 15 7 13
58 88 40 76
81 141 45 117
40 60 28 52

Explanation: Yuxarıda göstərilən nümunədə, A matrisinin birinci cərgəsindəki bütün müvafiq elementləri B matrisinin birinci sütunundakı elementlərlə vuraraq əlavə edərək əlavə olaraq ilk elementi əldə etdik. Eynilə, çıxışın birinci cərgəsindəki ikinci element üçün birinci A matris satırını və B matrisinin ikinci sütununu götürməliyik. Bu şəkildə, çıxış matrisindəki bütün elementləri əldə etdik.

Aşağıda matrisin vurulması üçün təsadüfi nümunə verilmişdir.

İki matrisin vurulması

İki matrisin vurulması alqoritmi

1. Sadəcə üç döngə işlədin.
2. I dəyişkənli A matrisindəki hər sıra üçün döngə.
3. Yuxarıdakı döngənin içərisində j dəyişən B matrisindəki hər sütun üçün döngə.
4. Yuxarıda göstərilən iki döngənin içərisində k dəyişkənli A matrisindəki hər bir sıra elementi və B matrisindəki hər sütun elementi, yəni dəyişən k, A [i] [k] və B [k] [j] içərisində.
5. hər bir sıra elementinin məhsulunu A-dakı hər sütun elementi ilə A-da tapacağıq, yəni A [i] [k] * B [k] [j] və bütün məhsulları əlavə edib yeni C matrisində saxlayırıq, yəni C [i] [j].
6. matris C vurma nəticəsidir.

Həyata keçirilməsi

İki matrisin vurulması üçün C ++ proqramı

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int r1,c1,r2,c2;
    cin>>r1>>c1>>r2>>c2;
    int a[r1][c1];
    int b[r2][c2];
    if(c1!=r2)
    {
        cout<<"We can’t multiply these matrices.";
    }
    else
    {
    for(int i=0;i<r1;i++)
    {
        for(int j=0;j<c1;j++)
        {
            cin>>a[i][j];
        }
    }
    for(int i=0;i<r2;i++)
    {
        for(int j=0;j<c2;j++)
        {
            cin>>b[i][j];
        }
    }
    int c[r1][c2];
    for(int i=0; i <r1; i++)
    {
        for(int j=0; j<c2; j++)
        {
            int sum = 0;
            for(int k=0;k<c1;k++)
            {
                sum += a[i][k] * b[k][j];
            }
            c[i][j] = sum;
            cout<<c[i][j]<<"  ";
        }
        cout<<endl;
    }
    }
    return 0;
}

İki Matrisin Çarpılması üçün Java Proqramı

import java.io.*; 
import java.util.Scanner;

class TutorialCup
{
    // Function to print Matrix 
    static void print_matrix(int output[][], int r, int c) 
    { 
        for(int i=0;i<r;i++) 
        { 
            for(int j=0;j<c;j++)
            {
                System.out.print(output[i][j] + " "); 
            }
            System.out.println(); 
        } 
    } 
    // Function to multiply two matrices a[][] and b[][] 
    static void multiply(int r1, int c1, int r2, int c2, int a[][], int b[][]) 
    { 
        int i, j, k; 
        // Check if multiplication is Possible 
        if(r2!=c1) 
        { 
            System.out.println("\nWe can’t multiply these matrices."); 
            return; 
        } 
        // Matrix to store the result 
        //The product matrix will be of size row1 x col2 
        int c[][] = new int[r1][c2];  
        // Multiply the two marices 
        for(i=0;i<r1;i++) 
        { 
            for(j=0;j<c2;j++) 
            { 
                for(k=0;k<r2;k++) 
                {
                    c[i][j]+=a[i][k]*b[k][j];
                } 
            } 
        } 
        print_matrix(c,r1,c2); 
    } 
    // Driver code 
    public static void main(String[] args) 
    { 
        int r1,c1,r2,c2;
        Scanner inp = new Scanner(System.in);
        r1 = inp.nextInt();
        c1 = inp.nextInt();
        r2 = inp.nextInt();
        c2 = inp.nextInt();
        int a[][] = new int[r1][c1];
        for(int i=0;i<r1;i++)
        {
            for(int j=0;j<c1;j++)
            {
                a[i][j]=inp.nextInt();
            }
        }
        int b[][] = new int[r2][c2];
        for(int i=0;i<r2;i++)
        {
            for(int j=0;j<c2;j++)
            {
                b[i][j]=inp.nextInt();
            }
        }
        multiply(r1,c1,r2,c2,a,b); 
    } 
}
2 3 3 2
1 2 3
4 5 6
7 8
9 10
11 12
58 64 
139 154

İki matrisin vurulması üçün mürəkkəblik analizi

Zamanın mürəkkəbliyi

O (n ^ 3) burada n maksimum r1, c2 və r2-dir. Burada sadəcə üç döngə r1 dəfə, ikinci döngə c2 dəfə və son döngə r2 dəfə işləyir.

Kosmik Mürəkkəblik

O (m * m) burada m maksimum r1 və c2-dir. Burada matrislərin vurulmasının nəticəsini saxlamaq üçün əlavə yer yaradırıq. Burada, girişin ilk matrisi almaq üçün r1 * c1 ölçüsünü, ikinci matrisin daxil olması üçün r2 * c2 ölçüsünü elan etdik.

arayış

Translate »