Menu
CoddyTech

Matrix Chain Multiplication

Una catena di matrici è descritta da dims: la matrice i ha dims[i] righe e dims[i+1] colonne, quindi ogni matrice si adatta alla successiva. Moltiplicare una matrice p × q per una matrice q × r richiede p × q × r moltiplicazioni scalari e produce una matrice p × r. Ogni modo di inserire le parentesi dà lo stesso prodotto finale, ma non allo stesso costo. Restituisci il minor numero di moltiplicazioni scalari necessarie per moltiplicare l'intera catena.

Funzione

matrixChainOrder(dims: integer-array) → integer
dimsinteger-array
le dimensioni lungo la catena: la matrice i ha dimensioni dims[i] × dims[i+1]
Restituisceinteger
il minor numero di moltiplicazioni scalari necessarie per moltiplicare l'intera catena

Vincoli

  • 2 ≤ dims.length ≤ 100, quindi la catena contiene tra 1 e 99 matrici.
  • 1 ≤ dims[i] ≤ 100
  • La risposta è al massimo 98 × 106, ben al di sotto del limite di un intero con segno a 32 bit.

Esempi

Input
dims = [4, 10, 3, 12]
Output
264
Spiegazione
Moltiplicare le prime due matrici costa 4 × 10 × 3 = 120 e lascia una matrice 4 × 3, che moltiplicata per la matrice 3 × 12 aggiunge 144: 264. L’altro ordine costa 360 + 480 = 840.
challenge icon

Per approfondire

Puoi anche contare quante diverse parentesizzazioni raggiungono il costo minimo?

Ripristina il codice
def matrixChainOrder(dims):
    # Scrivi il codice qui

Test #1

Test #2

Test #3

Argomento

dims = [4, 10, 3, 12]

Output atteso

264