Menu
CoddyTech

Matrix Chain Multiplication

Uma cadeia de matrizes é descrita por dims: a matriz i tem dims[i] linhas e dims[i+1] colunas, então cada matriz se encaixa na próxima. Multiplicar uma matriz p × q por uma matriz q × r requer p × q × r multiplicações escalares e resulta em uma matriz p × r. Todas as formas de colocar os parênteses dão o mesmo produto final, mas não com o mesmo custo. Retorne o menor número de multiplicações escalares necessário para multiplicar toda a cadeia.

Função

matrixChainOrder(dims: integer-array) → integer
dimsinteger-array
os tamanhos ao longo da cadeia: a matriz i tem dimensões dims[i] × dims[i+1]
Retornainteger
o menor número de multiplicações escalares necessárias para multiplicar toda a cadeia

Restrições

  • 2 ≤ dims.length ≤ 100, portanto, a cadeia contém entre 1 e 99 matrizes.
  • 1 ≤ dims[i] ≤ 100
  • A resposta é no máximo 98 × 106, bem dentro do limite de um inteiro de 32 bits com sinal.

Exemplos

Entrada
dims = [4, 10, 3, 12]
Saída
264
Explicação
Multiplicar as duas primeiras custa 4 × 10 × 3 = 120 e resulta em uma matriz 4 × 3, que, multiplicada pela matriz 3 × 12, acrescenta 144: 264. A outra ordem custa 360 + 480 = 840.
challenge icon

Para ir além

Você também consegue contar quantas formas diferentes de parentetizar atingem o custo mínimo?

Redefinir código
def matrixChainOrder(dims):
    # Escreva o código aqui

Teste #1

Teste #2

Teste #3

Argumento

dims = [4, 10, 3, 12]

Saída Esperada

264