제목 : 동적 프로그래밍 알고리즘 니모닉
죽는다는 소리하지 마 !
매트릭스는 지속적으로 문제를 곱
주제 설명 :
A1 및 아이 + 1 곱셈 감안할 N 행렬 {A1, A2, ...}, I = 1, 2, ..., N-1이다. 이 방법에도 위해 필요 최소한의 행렬 곱 연산을 계산하도록에도, 생성물을 계산 행렬을 계산하는 순서를 결정한다. 예를 들면 :
A1 = {} 30x35
A2 = {35x15}
A3 = {} 15x5
A4 = {5 ×}
A5 = {10x20}
A6 = {20x25}
최종 결과는, ((A1 (A2A3)) ((A4A5) A6))의 15,125 최소 승산 시간.
문제 해결 아이디어 :
속성은 동적 프로그래밍 최적화 하부 속성이다 수있다.
즉, 계산 A : [K + 1 : j는] 및 최선의 순서이다 : 계산 된 최적의 순서로 서브 매트릭스 [I j를 상기 리안 A [K I]에 포함.
재귀 식에 기초 할 수있다이 문제를 해결하는 동적 프로그래밍 알고리즘은 상향식 방식 (즉, 카운트 최소로 시작)를 산출한다.
계산 과정에서 아이의 문제를 저장하는 대답이 해결되었습니다. 각 하위 문제는 단순히 이중 계산, 최종 얻기 다항식 시간 알고리즘을 많이 피하기 위해 확인해야 다시 할 때 한 번만 계산됩니다.
우리는 다음과 같은 공식에 따라 결과를 계산할 수 있습니다. P는 [I-1] i 번째의 행렬의 행의 개수를 나타내고, P [K] 난 나타낸다 : 후 함께 J 수득 : 후의 결과, P [J] 혼합 행렬의 열 (K)의 수는 K + 1 열 수. 이 계산 방법은 실제로 두 행렬 승산 때 횟수를 곱한 합계의 일부이다.
공식 :
도 매트릭스마다 카운트 수의 2 배의 최소 배율 m [I] [J] 기준 :
m[0][1] m[1][2] m[2][3] m[3][4] m[4][5] //m[0][1]表示第一个矩阵与第二个矩阵的最小乘次数
이어서 다시 계산은 행렬 곱셈 (3)의 수를 계산한다 :
m[0][2] m[1][3] m[2][4] m[3][5]
매트릭스는 지속적으로 숫자 4를 곱 :
m[0][3] m[1][4] m[2][5]
매트릭스는 지속적으로 숫자 5를 곱 :
m[0][4] m[1][5]
매트릭스는 지속적으로 6의 수를 곱 :
m[0][5] //即最后我们要的结果