Menu
CoddyTech

Matrix Chain Multiplication

Bir matris zinciri dims ile tanımlanır: i matrisi dims[i] satıra ve dims[i+1] sütuna sahiptir; dolayısıyla her matris bir sonrakine uyar. p × q boyutundaki bir matrisi q × r boyutundaki bir matrisle çarpmak p × q × r skaler çarpma işlemi gerektirir ve p × r boyutunda bir matris verir. Parantezleri yerleştirmenin her yolu aynı sonucu verir, ancak maliyetleri aynı değildir. Tüm zinciri çarpmak için gereken en az skaler çarpma sayısını döndürün.

Fonksiyon

matrixChainOrder(dims: integer-array) → integer
dimsinteger-array
zincir boyunca boyutlar: i matrisi dims[i] × dims[i+1] boyutlarındadır
Döndürürinteger
tüm zinciri çarpmak için gereken en az sayıda skaler çarpım

Kısıtlar

  • 2 ≤ dims.length ≤ 100, bu nedenle zincir 1 ile 99 matris içerir.
  • 1 ≤ dims[i] ≤ 100
  • Yanıt en fazla 98 × 106'dır; 32 bitlik işaretli bir tamsayının sınırlarının oldukça içindedir.

Örnekler

Girdi
dims = [4, 10, 3, 12]
Çıktı
264
Açıklama
İlk ikisini çarpmak 4 × 10 × 3 = 120 maliyetlidir ve 4 × 3'lük bir matris bırakır; bunun 3 × 12'lik matrisle çarpılması 144 ekler: 264. Diğer sıralama 360 + 480 = 840 maliyetlidir.
challenge icon

Ek soru

En düşük maliyete ulaşan farklı parantezlemelerin sayısını da sayabilir misin?

Kodu sıfırla
def matrixChainOrder(dims):
    # Kodu buraya yazın

Test #1

Test #2

Test #3

Argüman

dims = [4, 10, 3, 12]

Beklenen Çıktı

264