Obra: Resolução de problemas/Optimal array multiplication sequence
Matéria: Matemática
Nível: médio
otimização de multiplicação de matrizes dadas as matrizes número de colunas de número de linhas de possível calcular matriz usando seguinte definição as dimensões da matriz gerada serão número de linhas igual ao de número de colunas igual ao de sejam então de dimensões de dimensões matriz calculada terá dimensões no processo deste cálculo deverão ser feitas multiplicações conforme definição agora vejamos caso de três matrizes de dimensões respectivamente como multiplicação de matrizes uma operação associativa podemos calcular ou resultado será mesmo em ambos os casos diferênça está no custo do cálculo de cada uma das alternativas na primeira dela serão necessárias operações enquanto que na segunda exemplificando considere para caso acima teremos para para pode se ver que cálculo de bem menos custoso efetua menos operações portanto preferível questão então como definir melhor sequência de multiplicação para um grupo de matrizes qualquer este problema possui duas características interessantes sub estrutura ótima sobreposição de sub problemas ou seja solução ótima para problema pode ser encontrada partir da solução ótima de suas partes sub problemas mesmo sub problema pode ser usado para resolver vários problemas maiores assim sendo programação dinâmica uma boa técnica ser usada para solucioná lo abordagem usada será bottom up onde são solucionados os sub problemas mais básicos partir deles os demais subproblemas em ordem crescente de complexidade até atingir solução do problema dado definida técnica de programação ser usada próximo passo será escolha das estruturas de dados devido repetição das dimensões em matrizes vizinhas número de colunas na primeira sempre igual ao número de linhas da segunda podemos armazenar as dimensões de matrizes em um vetor de posições de modo que as dimensões da matriz possam ser recuperadas em além disso serão usadas duas matrizes quadradas de dimensões usada para armazenar quantidade de multiplicações necessárias em cada sub problema dimensões usada para identificar qual parentização utilizada em cada sendo deve ser armazenado menor custo para se calcular multiplicação das matrizes desta forma custo total para multiplicação de todas matrizes deverá aparecer em ao final do algoritmo cada com deve armazenar um valor usado para localizar posição da multiplicação mais externa ser feita na multiplicação das matrizes indica que devemos multiplicar resultado da multiplicação das matrizes com resultado da multiplicação das matrizes primeiro passo para solução do problema calcular custo da multiplicação das matrizes vizinhas estes valores serão armazenados na diagonal principal da matriz da seguinte forma for em seguida matriz deve ser percorrida diagonalmente preenchendo as demais posições até obter se valor de para cada posição da matriz deve ser localizada melhor posição para multiplicação das matrizes correspondes partir dos resultados já calculados cada atualização de deve ser feita atualização correspondente em código se
resultados já calculados cada atualização de deve ser feita atualização correspondente em código seguir demonstra preenchimento de for tudo pronto agora só falta exibir resultado chamada da função parenthesize exibe multiplicação parentizada void parenthesize int int if printf parenthesize sij printf parenthesize sij printf else printf