Tema 14: Matrices.
1.- Definición.
En programación se denomina matriz, vector (de una sola dimensión) o formación (en inglés array)1 a una zona de almacenamiento contiguo que contiene una serie de elementos del mismo tipo, los elementos de la matriz.2 Desde el punto de vista lógico una matriz se puede ver como un conjunto de elementos ordenados en fila (o filas y columnas si tuviera dos dimensiones).
2.- Matriz Simétrica.
En este ejemplo vamos a calcular una matriz simétrica con Java. Una matriz simétrica es aquella donde la matriz es igual a la matriz transpuesta.
A = At
Así que lo primero que tenemos que saber es como calcular la matriz transpuesta con Java (At). Es decir, convertir sus filas en columnas.
Hemos creado una clase Matriz.java la cual contiene múltiples operaciones. Entre las cuales encontrarás la de transponer una matriz con Java.
public static int[][] transponer(int[][] matriz) { int[][] nuevaMatriz = new int[matriz[0].length][matriz.length]; for (int x=0; x < matriz.length; x++) { for (int y=0; y < matriz[x].length; y++) { nuevaMatriz[y][x] = matriz[x][y]; } } return nuevaMatriz; }
Creamos la matriz de la cual queremos saber si es simétrica.
int[][] m1 = {{1,2,3},{2,3,1},{3,1,2}};
E invocamos para obtener la matriz transpuesta el método anterior:
int[][] m2 = Matriz.transponer(m1);
Ahora tendremos que comparar si m1 y m2 son iguales. Para ello recuerda que no podemos utilizar ni el operador igual ni el método equals. Si no que tenemos que utilizar el método .deepEquals.
public static boolean equals(int[][] m1, int[][] m2) { return true; else return false; }
En nuestra clase Matriz.java también hemos creado este método que podrás utilizar.
Así que lo último que hacemos para saber si es una matriz simétrica con Java será compararlas.
if (Matriz.equals(m1, m2)) else
3.- Matriz transpuesta.
Lo primero para poder transponer una matriz en Java será definir la matriz mediante un array bidimensional. En nuestro caso vamos a utilizar una matriz de números enteros:
int[][] matriz = {{1,2,3},{4,5,6},{7,8,9},{10,11,12}};
Lo siguiente será crear la nueva matriz. Hay que tener en cuenta que el valor de la dimensión de filas de la matriz transpuesta será el de las columnas de la matriz y el valor de las columnas de la matriz transpuesta será el de las filas de la matriz original.
int[][] matrizT = new int[matriz[0].length][matriz.length];
Como se puede ver nos apoyaos en el atributo .length para saber el tamaño de las filas y columnas de la matriz.
Ahora nos apoyamos en bucles para poder recorrer la matriz e ir haciendo la transposición. Como en otros casos utilizamos dos bucles anidados que representen las coordenadas x,y
for (int x=0; x < matriz.length; x++) { for (int y=0; y < matriz[x].length; y++) { ... } } }
Ahora pasamos a la asignación. A la hora de pasar las filas a columnas vemos que el orden es el siguiente.
0,0 -> 0,0 0,1 -> 1,0 0,2 -> 2,0 1,0 -> 0,1 1,1 -> 1,1 1,2 -> 2,1 ...
Es decir que estamos cambiando las coordenadas x,y de la matriz original en las coordenadas y,x de la segunda. Por lo tanto la asignación será, si estamos recorriendo la matriz original.
matrizT[y][x] = matriz[x][y];
Quedando el código del bucle:
for (int x=0; x < matriz.length; x++) { for (int y=0; y < matriz[x].length; y++) { matrizT[y][x] = matriz[x][y]; } }
Comentarios
Publicar un comentario