Minimum yol cəmi

Çətinlik səviyyəsi Mühit
Tez-tez soruşulur Amazon Bloomberg Facebook Goldman Sachs google microsoft
Geyim Dinamik proqramlaşdırmaBaxılıb 111

Sistem dizaynı ilə bağlı müsahibə sualları o qədər açıq ola bilər ki, düzgün hazırlaşmağı bilmək çox çətindir. İndi satın aldıqdan sonra Amazon, Microsoft və Adobe-nin dizayn dövrlərini sındıra bilirəm Bu kitabı. Gündəlik bir yenidən nəzərdən keçirin dizayn sualı və söz verirəm ki, dizayn dövrünü sındıra bilərsiniz.

Minimum yol cəmi problemində verdik “A × b” matris mənfi olmayan rəqəmlərdən ibarətdir. Tapşırığınız tapdığınız bir yola daxil olan bütün rəqəmlərdən ibarət cəmi minimuma endirən soldan sağa yol tapmaqdır.

Qeyd: Zamanın istənilən nöqtəsində yalnız aşağıya və ya sağa hərəkət edə bilərsiniz.

misal

Input

[1,0,2],
[2,0,5],
[1,0,1]

Buraxılış

2

Izahat

Çünki yolu izləyir 1→0→0→0→1, cəmi 2-ə endirən.

Minimum yol cəmiPin

Bu şəkil yuxarı soldan sağa çatmaq üçün izlənilən yolu göstərir

Input

[1,3,1],
[1,5,1],
[4,2,1]

Buraxılış

7

Izahat

Çünki yolu izləyir 1→3→1→1→1, cəmi 7-ə endirən.

Minimum yol cəmiPin

Bu şəkil yuxarı sağdan aşağı sağa çatmaq üçün izlənən yolu göstərir.

Minimum yol cəmi üçün alqoritm

İndi minimum yol cəminin problem ifadəsini başa düşdük. Çox müzakirə etmədən bu problemin həyata keçirilməsi üçün istifadə olunan alqoritmə keçirik.

  1. Giriş dəyərini an array.
  2. Döngə üçün iç içəliyi açın və verilmiş giriş massivinin bütün sətirləri və sütunları keçməyinə qədər işlədin.
    1. Əgər i = = 0 && j = = 0
      • sonra davam edin, bu təkrarlamanı tərk edin və birinə keçin.
    2. Başqa i = = 0 olarsa
      • sonra array [i] [j] = array [i] [j] + arr [i] [j-1];
    3. Başqa bir halda j = = 0
      • arr [i] [j] = arr [i] [j] + arr [i-1] [j];
    4. Daha
      • arr [i] [j] = getMin (arr [i-1] [j] + arr [i] [j], arr [i] [j-1] + arr [i] [j])
    5. Bu dəyərləri iki arasında minimum dəyəri qaytaran getMin funksiyasına keçir.
  3. Qaytarma massivi [satırlar-1] [sütunlar-1];

Izahat

Minimum yol cəmi problemində işimiz bu yolu cığırda gələn bütün tam ədədlərdən ibarət cəmi minimuma endirən bir matrisdə tapmaqdır, buna görə funksiyanın ən kiçik dəyəri qaytarmaq üçün təyin olunduğu bir funksiyanı elan etməliyik. bu funksiyaya ötürülən iki dəyər.

Beləliklə, indi iç içə döngəyə başlayırıq, xarici dövrə dəyərinə qədər düzəldirik (sıra -1) və daxili sütuna qədər sütuna -1 çatırıq.

Addım-addım icra

Beləliklə, minimum yol cəmi problemini anlamaq üçün bir nümunə götürək,

Giriş: {{1,3,4},

{2,0,2},

{2,0,1}};

Hələlik,

  • i = 0, j = 0

Hissə icra edilərsə, davam edəcək və növbəti hissəyə keçəcəkdir.

  • i = 0, j = 1

başqa (i = = 0) icra edərsə və arr [i] [j] = arr [i] [j] + arr [i] [j-1]

arr [0] [1] = 3 + 1 = 4 deməkdir

  • i = 0, j = 2

başqa (i = = 0) icra edərsə və arr [i] [j] = arr [i] [j] + arr [i] [j-1]

arr [0] [2] = arr [0] [2] + arr [0] [1] = 4 +1 = 5 deməkdir

  • i = 1, j = 0

başqa (j = = 0) icra edərsə və arr [i] [j] = arr [i] [j] + arr [i-1] [j]

arr [1] [0] = arr [1] [0] + arr [0] [0] = 2 +1 = 3 deməkdir

  • i = 1, j = 1

başqa bir hissəsi icra edir və getMin (arr [i-1] [j] + arr [i] [j], arr [i] [j-1] + arr [i] [j]) funksiyası zəngdir

və getMin (arr [0] [1]) + arr [1] [1], arr [1] [0] + arr [1] [1]) = (1 + 2, 3 + 2)

ən kiçik dəyəri qaytaran arr 3-də [1] [1] => arr [1] [1] = 3

  • i = 1, j = 2

başqa bir hissəsi icra edir və getMin (arr [i-1] [j] + arr [i] [j], arr [i] [j-1] + arr [i] [j]) funksiyası zəngdir

və getMin (arr [0] [2]) + arr [1] [2], arr [1] [1] + arr [1] [2]) = (5 + 2, 3 + 2)

ən kiçik dəyəri 5-ə gətirən arr [1] [2] => arr [1] [2] = 5.

arr [1] [2] = 5.

  • i = 2, j = 0

başqa (j = = 0) icra edərsə və arr [i] [j] = arr [i] [j] + arr [i-1] [j]

arr [2] [0] = arr [2] [0] + arr [1] [0] = 2 +2 = 4 deməkdir

arr [2] [2] = 4.

  • i = 2, j = 1

başqa bir hissəsi icra edir və getMin (arr [i-1] [j] + arr [i] [j], arr [i] [j-1] + arr [i] [j]) funksiyası zəngdir

və getMin (arr [1] [1]) + arr [2] [1], arr [2] [0] + arr [2] [1]) = (3 + 0, 4 + 0)

ən kiçik dəyəri 3-ə gətirən arr [2] [1] => arr [2] [1] = 3.

arr [1] [2] = 3.

  • i = 2, j = 2

başqa bir hissəsi icra edir və getMin (arr [i-1] [j] + arr [i] [j], arr [i] [j-1] + arr [i] [j]) funksiyası zəngdir

və getMin (arr [1] [2]) + arr [2] [2], arr [2] [1] + arr [2] [2]) = (5 + 1, 3 + 1)

ən kiçik dəyəri 4-ə gətirən arr [2] [2] => arr [2] [2] = 5.

arr [2] [2] = 4.

Və 2 olan arr [2] [4] -i qaytaracaq və minimum cəmi yolunu təyin edən çıxış dəyərimizdir.

Çıxış: 4

Minimum Yol Cəmi üçün C ++ Proqramı

#include<iostream>
using namespace std;

int getMin(int val1, int val2)
{
    return val1 < val2 ? val1 : val2;
}
int getMinimumSum(int arr[3][3])
{
    for(int i=0; i<3; i++)
    {
        for(int j=0; j<3; j++)
        {
            if(i==0 && j == 0)
            {
                continue;
            }
            else if(i==0)
            {
                arr[i][j] = arr[i][j] + arr[i][j-1];
            }
            else if(j==0)
            {
                arr[i][j] = arr[i][j] + arr[i-1][j];
            }
            else
            {
                arr[i][j] = getMin(arr[i-1][j]+arr[i][j], arr[i][j-1]+arr[i][j]);
            }
        }
    }
    return arr[2][2];
}
int main()
{
    int inputArray[3][3] = {{1,3,4},
                            {2,0,2},
                            {2,0,1}};
                            
    cout<<"Length of minimum path sum: "<<getMinimumSum(inputArray);
    return 0;
}
Length of minimum path sum: 4

Minimum Yol Cəmi üçün Java Proqramı

class MinimumPathSum {
  private static int getMin(int val1, int val2) {
    return val1<val2 ? val1 : val2;
  }
  private static int getMinimumSum(int[][] arr) {
    for (int i = 0; i<arr.length; i++) {
      for (int j = 0; j<arr[i].length; j++) {
        if (i == 0 && j == 0) {
          continue;
        } else if (i == 0) {
          arr[i][j] = arr[i][j] + arr[i][j - 1];
        } else if (j == 0) {
          arr[i][j] = arr[i][j] + arr[i - 1][j];
        } else {
          arr[i][j] = getMin(arr[i - 1][j] + arr[i][j], arr[i][j - 1] + arr[i][j]);
        }
      }
    }
    int r = arr.length - 1;
    int c = arr[0].length - 1;
    return arr[r][c];
  }
  public static void main(String[] args) {
    int[][] inputArray = {{1, 3, 4},
                {2, 0, 2},
                {2, 0, 1}};

    System.out.println("Length of minimum path sum: " + getMinimumSum(inputArray));
  }
}
Length of minimum path sum: 4

Minimum Yol Cəmi üçün Mürəkkəblik Analizi

Zamanın mürəkkəbliyi

O (m * n) hara "M""N" matrisdəki minimum yol cəmi məsələsində verilən sətir və sütun nömrələridir.

Kosmik Mürəkkəblik

O (1) çünki minimum yol cəmi üçün yanaşmanı tətbiq edərkən heç bir köməkçi yer istifadə etmirik.

References

Crack Sistemi Dizayn Müsahibələri
Translate »