Advertisement
spacerose

лаба7 аод яерновик

Nov 16th, 2020
151
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.18 KB | None | 0 0
  1. class Main {
  2.      /*
  3.      * Возвращает ответ на задачу об оптимальном перемножении матриц, используя
  4.      * динамическое программирование.
  5.      * Асимптотика решения - O(N^3) время и O(N^2) память.
  6.      *
  7.      * @param p массив размеров матриц, см.статью
  8.      * @return минимальное количество скалярных умножений, необходимое для решения задачи
  9.      */
  10.     public static int multiplyOrder(int[] p) {
  11.         int n = p.length - 1;
  12.         int[][] dp = new int[n][n];
  13.        
  14.         for (int i = 0; i < n; ++i) {
  15.             dp[i][i] = 0;
  16.         }
  17.        
  18.         for (int l = 1; l < n; ++l) {
  19.             for (int i = 0; i < n - l; ++i) {
  20.                 int j = i + l;
  21.                 dp[i][j] = Integer.MAX_VALUE;
  22.                 for (int k = i; k < j; ++k) {
  23.                     dp[i][j] = Math.min(dp[i][j],
  24.                                         dp[i][k] + dp[k + 1][j] + p[i] * p[k + 1] * p[j + 1]);
  25.                 }
  26.             }
  27.         }
  28.         return dp[0][n - 1];
  29.     }
  30.    
  31.     public static void main(String[] args) {
  32.         int[] test = { 10, 100, 5, 50 };
  33.         System.out.println(Main.multiplyOrder(test));
  34.     }
  35. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement