viernes, 30 de diciembre de 2011

Multiplicación de matrices:





Multiplicación de matrices
Definición de matriz: En matemáticas, una matriz es un arreglo bidimensional de números, y en su mayor generalidad de elementos de un anillo. Las matrices se usan generalmente para describir sistemas de ecuaciones lineales, sistemas de ecuaciones diferenciales o representar una aplicación lineal (dada una base). Las matrices se describen en el campo de la teoría de matrices.

Pueden sumarse, multiplicarse y descomponerse de varias formas, lo que también las hace un concepto clave en el campo del álgebra lineal.
(Por wikipedia).

Mas informacion sobre multiplicacion de matrices aqui.

Hosting

Codigo:

//Autor: Rey Salcedo Padilla
class MultiplicacionMatrices{
 
 //Me extrae una fila dada de una matriz en forma de vector (arreglo)
 public static int []filaMatriz(int [][]matriz, int fila){
  int []arregloAuxiliar = new int[matriz[fila].length];
  for(int i = 0; i < arregloAuxiliar.length; i++){
   arregloAuxiliar[i] = matriz[fila][i];
  }
  return arregloAuxiliar;
 }
 
 //Me extrae una columna dada de una matriz en forma de vector (arreglo)
 public static int []columnaMatriz(int [][]matriz, int columna){
  int []arregloAuxiliar = new int[matriz.length];
  for(int i = 0; i < arregloAuxiliar.length; i++){
   arregloAuxiliar[i] = matriz[i][columna];
  }
  return arregloAuxiliar;
 }
 
 //Me devuelve el valor de una celda segun la multiplicacion de dos matrices
 public static int valorCelda(int [][]matrizA, int [][]matrizB, int fila, int columna){
  int suma = 0;
  /*
  Tomo la fila de la primera matriz y la columna de la segunda matriz,
  para posteriormente multiplicar celda por celda
   */
  int []filaMatrizA = filaMatriz(matrizA, fila);
  int []columnaMatrizB = columnaMatriz(matrizB, columna);  
  
   for(int i = 0; i < filaMatrizA.length; i++){
    
    /*
     * Aqui valido que la longitud de ambos vectores sean iguales,
     * en terminos mas acordes, que el numero de columnas de la primera matriz,
     * sea igual al numero de filas de la segunda matriz    
    */
    
    if(filaMatrizA.length == columnaMatrizB.length){
    suma += filaMatrizA[i] * columnaMatrizB[i];
    }else{
     System.out.println("El numero de columnas de la primera matriz es diferente al numero de filas de la segunda matriz");
     break;   
    }      
   }  
    
  return suma;
   }
   
   //Me devuelve una matriz, producto de la multiplicacion de dos matrices
 public static int [][]multiplicacionMatriz(int [][]matrizA, int [][]matrizB){
  int [][]matrizAuxiliar = new int[matrizA.length][matrizA[0].length];
  for(int i = 0; i < matrizA.length; i++){
   for(int j = 0; j < matrizA[i].length; j++){
    matrizAuxiliar[i][j] = valorCelda(matrizA, matrizB, i, j);     
   }
  }
  return matrizAuxiliar; 
 }
 //imprime los valores de una matriz
 public static void imprimirMatriz(int [][]matriz){
  System.out.println("-------------------------------");
  for(int i = 0; i < matriz.length; i++){
   for(int j = 0; j < matriz[i].length; j++){
    System.out.print(matriz[i][j]+"\t");
   }
   System.out.println();
  }
  System.out.println("-------------------------------");
 }
 
 //imprime el procedimiendo de la 'matriz de recorrido' de una matriz
 public static void main(String []args){
  /*
  Nota importante:
  - Sean las matrices A y B; A tenga el mismo número de columnas que B de filas para que  exista A*B
  - Sean las matrices B y A; B tenga el mismo número de columnas que A de filas para que  exista A*B
  */
  int [][]matrizA ={{1,0,0,1},
        {1,4,0,1},
        {1,9,0,11},
        {1,5,6,0}};
        
  int [][]matrizB ={{11,0,0,1},
        {1,8,0,1},
        {0,9,0,5},
        {1,7,6,0}};
  
  System.out.println("Matriz A");      
  imprimirMatriz(matrizA);
  
  System.out.println("Matriz B");      
  imprimirMatriz(matrizB);
  
  System.out.println("Matriz A * Matriz B");   
  imprimirMatriz(multiplicacionMatriz(matrizA,matrizB));
  
  
  //Note que si A y B son diferentes A*B diferente de B*A (A*B <> B*A)
  System.out.println("Matriz B * Matriz A");   
  imprimirMatriz(multiplicacionMatriz(matrizB,matrizA));
 }

}


Comenta acerca del código.




jueves, 8 de diciembre de 2011

Implementacion de una lista simple enlazada.


Tal vez le interese leer también sobre pilas y colas
Definición auspiciada por Wikipedia: una lista enlazada es una de las estructuras de datos fundamentales, y puede ser usada para implementar otras estructuras de datos. Consiste en una secuencia denodos, en los que se guardan campos de datos arbitrarios y una o dos referencias (punteros) al nodo anterior o posterior.




Generalmente se usa una lista enlazada cuando no sabemos de antemano en numero de datos u objetos que queremos almacenar; personalmente uso en estos caso como lista un ArrayList.
Humildemente implemento en tres clases una lista sin hace uso de ninguna librería especificada por la sentencia import; espero les guste y les sirva.

//Autor: Rey Salcedo
 public class Nodo{

 private Object dato;
 private Nodo nodo;
 
 public Nodo(){
  dato = null;
  Nodo nodo = null;
 }
 public Nodo(Object dato){
  this();
  this.dato = dato;  
 }
 public void setDato(Object dato){
  this.dato = dato;
 }
 
 public Object getDato(){
  return dato;
 }
 
 public void setNodo(Nodo nodo){
  this.nodo = nodo;
 }
 
 public Nodo getNodo(){
  return nodo;
 } 
}


//Autor: Rey Salcedo
 public class Lista{
 private Nodo cabecera;
 private int tamaño;
 
 public Lista(){
  tamaño = 0;
  cabecera = new Nodo();
 }
 
 public int getTamaño(){
  return tamaño;
 }
 
 public boolean addDato(Object dato){
  Nodo nodoUltimo = getUltimoNodo();
  if(dato != null && nodoUltimo != null){
   nodoUltimo.setNodo(new Nodo(dato));
   tamaño ++;
   return true;
  }else{
   return false;
  }
 }
 
 private Nodo getUltimoNodo(){
  Nodo nodoUltimo = null;
  if(cabecera != null){
   nodoUltimo = cabecera;
   while(nodoUltimo.getNodo() != null){
    nodoUltimo = nodoUltimo.getNodo();
   }
  }
  return nodoUltimo;
 } 
 
 public Object getDato(int pos){
  Nodo nodoUltimo = null;
  int contador = 0;
  Object dato = null;
  if(cabecera != null){
   nodoUltimo = cabecera;
   do{
    nodoUltimo = nodoUltimo.getNodo();
    if(contador == pos){
     dato = nodoUltimo.getDato();
     break;
    }else{
     contador++;
    }   
   }while(nodoUltimo.getNodo() != null);
  }
  return dato;
 }
}


//Autor: Rey Salcedo
 public class Main{
 public static void main(String []args){
  Lista lista = new Lista();
  
  //Adjuntando datos
  lista.addDato("Hola");
  lista.addDato("mundo");
  lista.addDato("aqui");
  lista.addDato("estoy");
  
  System.out.println("-------Imprimiendo datos-------");
  
  for(int i = 0;i < lista.getTamaño();i ++){
   System.out.println(lista.getDato(i));
  }
 }
}

Tal vez también te interese: Implementacion de pila y cola.

Entrada destacada

Matriz de adyacencia para un grafo

"La matriz de adyacencia es una matriz cuadrada que se utiliza como una forma de representar relaciones binarias."; aunque pa...