Відмова від відповідальності: Наступний метод не був жорстко підтверджений як оптимальний. Надається неофіційний доказ.
Проблема зводиться до пошуку найбільш ефективного замовлення при розгляді площі товару.
Наприклад, дивлячись наприклад , нам потрібно лише оптимально вирішити оскільки це поширюється на . Користувальна інформація про замовлення не додається шляхом повторного об'єднання . Інтуїція тут полягає в тому, що оскільки проблема оптимального впорядкування може бути вирішена знизу вгору, більш високі впорядкування, що складаються з більшої кількості елементів, що використовують однакові матриці, не мають значення.(ABC)50(ABC)2ABCABCABC
Пошук найкращого впорядкування зводиться до проблеми множення матричного ланцюга. Знайшовши оптимальне впорядкування, застосуйте експоненцію до триплета (загалом n-кортеж) у впорядкуванні.ABCABC
Наприклад, якщо оптимальне впорядкування для квадрата дорівнює , рішення початкової задачі .A(B(CA))BCA(B(CA))49BC
Підсумовуючи це:
1) Першим кроком у вирішенні є вирішення .
2) Розв’язування найкраще підходить як екземпляр задачі множення матричного ланцюга.
3) Використання впорядкування n-кортежу з розчину в (2) дасть нам рішення для (1) як деякий аромат (зауважте, що будь-який інший також слід застосовувати групування з розв’язування (2).(A1A2⋯An)m(A1A2⋯An)2
(A1A2⋯An)2
GA1⋅A2⋅Gm−1⋅An
Неформальне доведення
Розглядаючи найпростіший випадок з використанням двох матриць , зазначимо, що і мають розмірність і відповідно. Будь-який продукт, що використовує і має один із таких розмірів:(AB)nABX×YY×XAB
X×Y
Y×X
Y×Y
X×X
Ми маємо або або .X<YY≤X
Припущення 1a): має розмір , і це впорядкування гарантується оптимальним при підході знизу вгору. Будь-яка інша конфігурація і є однаково хорошою, або гіршою. Таким чином, задача оптимально вирішується як .X<Y
ABX×XAB(AB)n
Припущення 1b): має розмірність . Це оптимальне розташування для всіх продуктів , пов'язаних і . Таким чином, рішення оптимально знайдено як .Y≤X
BAY×YABA(BA)n−1B
Це завершує доказ, і ми лише розглянули два впорядкування, знайдені в , проблему квадрата.ABAB
Використовуючи більше матриць, аргумент подібний. Можливо, можливий індуктивний доказ? Загальна ідея полягає в тому, що розв’язуючи МСМ для квадрата, знайдемо оптимальний розмір для операцій з усіма розглянутими матрицями.
Приклад:
julia> a=rand(1000,2);
julia> b=rand(2,1000);
julia> c=rand(1000,100);
julia> d=rand(100,1000);
julia> e=rand(1000,1000);
julia> @time (a*b*c*d*e)^30;
0.395549 seconds (26 allocations: 77.058 MB, 1.58% gc time)
# Here I use an MCM solver to find out the optimal ordering for the square problem
julia> Using MatrixChainMultiply
julia> matrixchainmultiply("SOLVE_SQUARED", a,b,c,d,e,a,b,c,d,e)
Operation: SOLVE_SQUARED(A...) = begin # none, line 1:
A[1] * (((((A[2] * A[3]) * (A[4] * (A[5] * A[6]))) * (A[7] * A[8])) * A[9]) * A[10])
end
Cost: 6800800
# Use the ordering found, note that exponentiation is applied to the group of 5 elements
julia> @time a*(((((b*c)*(d*(e*a)))^29*(b*c))*d)*e);
0.009990 seconds (21 allocations: 7.684 MB)
# I also tried using the MCM for solving the problem directly
julia> @time matrixchainmultiply([30 instances of a,b,c,d,e]);
0.094490 seconds (4.02 k allocations: 9.073 MB)