동적 프로그래밍 알고리즘 니모닉


제목 : 동적 프로그래밍 알고리즘 니모닉

죽는다는 소리하지 마 !

매트릭스는 지속적으로 문제를 곱

주제 설명 :

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]    //即最后我们要的结果

코드

추천

출처www.cnblogs.com/fofade/p/10977660.html