تفریق دو ماتریس


سطح دشواری ساده
اغلب در Capgemini MAQ o9 راه حل
صف ماتریس برنامه نویسی مدرسه

بیان مسأله

در مسئله "تفریق دو ماتریس" ، ما دو ماتریس a و b داده ایم. ما باید فینال را پیدا کنیم ماتریس پس از کسر ماتریس b از ماتریس a. اگر ترتیب برای هر دو ماتریس یکسان باشد ، در این صورت فقط ما می توانیم آنها را کم کنیم در غیر این صورت نمی توانیم.

قالب ورودی

اولین خط شامل چهار عدد صحیح r1 ، c1 ، r2 ، c2 است. جایی که r1 و c1 تعداد ردیف ها و ستون های ماتریس اول را نشان می دهد. و r2 ، c2 تعداد ردیف ها ، ستون های ماتریس دوم را نشان می دهد.

خطوط r1 بعدی حاوی مقادیر صحیح c1 است.

و خطوط r2 بعدی حاوی مقادیر صحیح c2 است.

فرمت خروجی

ماتریس نهایی را پس از تفریق به گونه ای چاپ کنید که هر سطر از خط جدید شروع شود و هر عنصر با فاصله در هر سطر جدا شود.

محدودیت ها

  • 1 <= r1 ، c1 ، r2 ، c2 <= 5000.
  • 1 <= | m [i] [j] | <= 10 ^ 9 که m ماتریس و موقعیت عنصر در ردیف دوم و ستون j است.

مثال

2 2 2 2
2 8
0 9
5 6
11 3
-3 2
-11 6

شرح: ما می توانیم تفریق ماتریس ها را با کم کردن ورودی های مربوطه در ماتریس C و D پیدا کنیم.

تفریق دو ماتریس

تفریق دو ماتریس

تفریق دو ماتریس

تفریق دو ماتریس

الگوریتم تفریق دو ماتریس

1. برای هر ردیف در دو ماتریس

1.1 عناصر مربوطه را در ماتریس B با عناصر ماتریس A کم کنید.

1.2 نتیجه را در همان موقعیت ماتریس کمکی ذخیره کنید.

2. به ردیف بعدی بروید و مراحل 1.1 و 1.2 را تا پایان ماتریس دنبال کنید.

3. ماتریس کمکی را چاپ کنید.

پیاده سازی

برنامه C ++ برای کسر دو ماتریس

#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];
    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];
        }
    }
    if(c1!=c2 || r1!=r2)
    {
        cout<<"We can’t subtract these matrices.";
    }
    else
    {
    int c[r1][c2];
    for(int i=0;i<r1;i++)
    {
        for(int j=0;j<c2;j++)
        {
            c[i][j]=a[i][j]-b[i][j];
            cout<<c[i][j]<<"  ";
        }
        cout<<endl;
    }
    }
    return 0;
}

برنامه جاوا برای تفریق دو ماتریس

import java.io.*; 
import java.util.Scanner;
class TutorialCup
{ 
    // 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();
            }
        }
        if(r1!=r2 && c1!=c2) 
        { 
            System.out.println("\nWe can’t subtract these matrices."); 
        } 
        else
        {
            int c[][] = new int[r1][c1];
            for(int i=0;i<r1;i++)
            {
                for(int j=0;j<c1;j++)
                {
                    c[i][j]=a[i][j]-b[i][j];
                    System.out.print(c[i][j] + " ");
                }
                System.out.println();
            }
        }
    } 
}
2 2 2 2
2 8 
0 9 
5 6 
11 3
-3  2  
-11  6

تحلیل پیچیدگی برای کسر دو ماتریس

پیچیدگی زمان

O (n ^ 2) که n حداکثر r1 و c1 است. در اینجا ما به سادگی دو حلقه را اجرا می کنیم حلقه اول r1 بار اجرا می شود و حلقه دوم c1 بار اجرا می شود.

پیچیدگی فضا

O (m ^ 2) که در آن m حداکثر r1 و c1 است. در اینجا ما فضای اضافی را برای ذخیره نتیجه تفریق ماتریس ها ایجاد می کنیم. در اینجا ما همچنین اندازه r1 * c1 را برای گرفتن ماتریس اول و اندازه r2 * c2 را برای ورودی ماتریس دوم اعلام کردیم.

ارجاع