Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Main {
- /*
- * Возвращает ответ на задачу об оптимальном перемножении матриц, используя
- * динамическое программирование.
- * Асимптотика решения - O(N^3) время и O(N^2) память.
- *
- * @param p массив размеров матриц, см.статью
- * @return минимальное количество скалярных умножений, необходимое для решения задачи
- */
- public static int multiplyOrder(int[] p) {
- int n = p.length - 1;
- int[][] dp = new int[n][n];
- for (int i = 0; i < n; ++i) {
- dp[i][i] = 0;
- }
- for (int l = 1; l < n; ++l) {
- for (int i = 0; i < n - l; ++i) {
- int j = i + l;
- dp[i][j] = Integer.MAX_VALUE;
- for (int k = i; k < j; ++k) {
- dp[i][j] = Math.min(dp[i][j],
- dp[i][k] + dp[k + 1][j] + p[i] * p[k + 1] * p[j + 1]);
- }
- }
- }
- return dp[0][n - 1];
- }
- public static void main(String[] args) {
- int[] test = { 10, 100, 5, 50 };
- System.out.println(Main.multiplyOrder(test));
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement