Advertisement
ArCiGo

P2 MatrixChain

Oct 20th, 2013
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.00 KB | None | 0 0
  1. /*
  2.  * To change this template, choose Tools | Templates
  3.  * and open the template in the editor.
  4.  */
  5.  
  6. /**
  7.  *
  8.  * @author ArCiGo
  9.  */
  10. public class matrixChain {
  11.  
  12.     public static int[][] matrixChainM(int[] r, int[][] m, int[][] s) {
  13.  
  14.         int n;              /*longitud del arreglo - 1*/
  15.         int i, l, k;        /*indices de los ciclos*/
  16.         int j, q;           /*guarda las operaciones*/
  17.         int infinity = 1000000;
  18.  
  19.         n = r.length;
  20.  
  21.         for (i = 1; i < n; i++) {
  22.             m[i][i] = 0;
  23.         }
  24.         for (l = 2; l < n; l++) {
  25.             for (i = 1; i < (n - l + 1); i++) {
  26.                 j = i + l - 1;
  27.                 m[i][j] = infinity;
  28.                 for (k = i; k <= (j - 1); k++) {
  29.                     q = m[i][k] + m[k + 1][j] + r[i - 1] * r[k] * r[j];
  30.                     if (q < m[i][j]) {
  31.                         m[i][j] = q;
  32.                         s[i][j] = k;
  33.                     }
  34.                 }
  35.             }
  36.         }
  37.         return m;
  38.     }
  39.  
  40.     public static int[][] matrixChainS(int[] r, int[][] m, int[][] s) {
  41.  
  42.         int n;              /*longitud del arreglo - 1*/
  43.         int i, l, k;        /*indices de los ciclos*/
  44.         int j, q;           /*guarda las operaciones*/
  45.         int infinity = 1000000;
  46.  
  47.         n = r.length;
  48.  
  49.         for (i = 1; i < n; i++) {
  50.             m[i][i] = 0;
  51.         }
  52.         for (l = 2; l < n; l++) {
  53.             for (i = 1; i < (n - l + 1); i++) {
  54.                 j = i + l - 1;
  55.                 m[i][j] = infinity;
  56.                 for (k = i; k <= (j - 1); k++) {
  57.                     q = m[i][k] + m[k + 1][j] + r[i - 1] * r[k] * r[j];
  58.                     if (q < m[i][j]) {
  59.                         m[i][j] = q;
  60.                         s[i][j] = k;
  61.                     }
  62.                 }
  63.             }
  64.         }
  65.         return s;
  66.     }
  67.  
  68.     public static int matrixChainMultiplication(int[] v, int[][] s, int i, int j) {
  69.  
  70.         int x, y;
  71.  
  72.         if (j < i) {
  73.             x = matrixChainMultiplication(v, s, i, s[i][j]);
  74.             y = matrixChainMultiplication(v, s, s[i][j] + 1, j);
  75.             return x * y;
  76.         } else {
  77.             return v[i];
  78.         }
  79.     }
  80.    
  81.     public static void matrixChainParentization(int[][] s, int i, int j){
  82.        
  83.         if(i==j){
  84.             System.out.print("A"+i);
  85.         }
  86.         else{
  87.             System.out.print("(");
  88.             matrixChainParentization(s, i, s[i][j]);
  89.             matrixChainParentization(s, s[i][j] + 1, j);
  90.             System.out.print(")");
  91.         }
  92.     }
  93.  
  94.     public static int[][] matrixMultiplication(int[][] x, int[][] y) {
  95.  
  96.         int[][] z = new int[x.length][y.length];
  97.         int acum;
  98.  
  99.         for (int i = 0; i < x.length; i++) {
  100.             for (int j = 0; j < y.length; j++) {
  101.                 acum = 0;
  102.                 for (int k = 0; k < z.length; k++) {
  103.                     acum += (x[i][k] * y[k][j]);
  104.                 }
  105.                 z[i][j] = acum;
  106.             }
  107.         }
  108.         return z;
  109.     }
  110.  
  111.     public static void main(String[] args) {
  112.  
  113.         int r[] = {3, 2, 4, 1};
  114.         int m[][] = new int[4][4];
  115.         int s[][] = new int[4][4];
  116.  
  117.         int v;
  118.  
  119.         System.out.println("Matriz m");
  120.         m = matrixChainM(r, m, s);
  121.         for (int i = 1; i < m.length; i++) {
  122.             for (int j = 1; j < m.length; j++) {
  123.                 System.out.print(" " + m[i][j] + " ");
  124.             }
  125.             System.out.println("");
  126.         }
  127.  
  128.         System.out.println("Matriz s");
  129.         s = matrixChainS(r, m, s);
  130.         for (int i = 1; i < s.length; i++) {
  131.             for (int j = 1; j < s.length; j++) {
  132.                 System.out.print(" " + s[i][j] + " ");
  133.             }
  134.             System.out.println("");
  135.         }
  136.  
  137.         v = matrixChainMultiplication(r, s, 1, 6);
  138.         System.out.println("Menor número de multiplicaciones: " + v);
  139.        
  140.         System.out.println("Parentsesizacion: ");
  141.         matrixChainParentization(s,1,3);
  142.     }
  143. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement