JAVA estructuras de datos y algoritmos - la matriz dispersa

  necesidades reales 

  •  analizar los problemas

  Debido a que una gran parte del valor de la matriz de dos dimensiones es el valor por defecto 0, y por lo tanto registró una gran cantidad de datos sin sentido .-> matriz dispersa .

 

  1. Introducción básica  

   Cuando una mayoría de los elementos de datos es cero, o un valor con una matriz, la matriz dispersa se puede utilizar para mantener la matriz es un método de procesamiento de matriz dispersa

  1. matriz de registros, un total de varios fila impar, el número de valores diferentes son

  2. Los rangos y valores de los elementos de registro tienen diferentes valores en una matriz de pequeñas, de ese modo para reducir el tamaño del programa

 

Sparse matriz Descripción

  2. Ejemplos de aplicación

  1. El uso de matrices dispersas, similar para retener la matriz bidimensional anterior (tablero de ajedrez, mapas, etc.)
  2. Guardar la matriz dispersa, y se puede volver a restaurar el número original de matriz bidimensional
  3. El análisis de toda idea

 

 3. Añadir mucho más fácil de entender los comentarios

estático public void un principal (String [] args) { 
 2 // crear una matriz bidimensional original de 11 * 11 
 3 @ 0:. No hay piezas 1 representa 2 representa manchas solares cesta 
 4 int chessArr1 [] [] = new int [ .. 11] [11 ]; 
 ... 5 chessArr1 [1] [2] = 1 ; 
 .. 6 chessArr1 [2] [3] = 2 ;  . 7  . 8 // da salida a la original de matriz bidimensional  9 for (int. [] Row: chessArr1) {  10 para (int . datos: Fila) 11 System.out.printf {( "% D \ T" , Data); 12 es } 13 es System.out.println (); 14 } 15 16 // matriz a una matriz dispersa de dos dimensiones 17 / . / 1 número a la navegación de dos dimensiones matriz para obtener datos válidos 18 es int SUM = 0 ;. 19 for (int i = 0;. I <11; I ++ ) {20 es for (int J = 0;. J <11; J ++ ) { 21 Si (chessArr1 [i] [ j]! = 0) SUM 22 es {++ ; 23 es } 24 } 25 } 26 es System.out.println (SUM); // número de datos válidos para crear una matriz dispersa 27 correspondiente al número de filas igual a 1 28 int sparseArr [] [] = new int [suma 1] [3]; // columna de valor es la primera fila un valor RMS segunda fijos valores de la tercera columna 29 a la asignación matriz dispersa // 30 sparseArr [0] [0] = 11; // comportamiento 11 31 sparseArr [0] [1 ] = 11; // como 11 32 sparseArr [0] [2 ] = suma; // primera fila y la tercera columna 3334 es el número de válido // atravesar la matriz bidimensional el almacenamiento de valor distinto de cero (efectiva) sparseArr escasa matriz 35 int count = 0; // * para el primer registro distinto de cero datos pocos 36 for (int i = 0; i <11; i ++) {// 11 línea 37 for (int J = 0;. J <11; J ++ ) {38 es IF (chessArr1 [i] [j] = 0) {// el valor es una matriz de dos dimensiones no es igual a 0 39 COUNT ++ ; 40 sparseArr [COUNT] [0] = i; // fila 41 sparseArr [count] [1] = j; // columna 42 sparseArr [count] [2] = chessArr1 [i] [j]; // tercera columna es el valor 43 } 44 } 45 } 46 forma // entrada la matriz dispersa 47 System.out.println (); 48 System.out.println ( "se obtiene matriz dispersa ~~~~~"); 49 for (int i = 0; I <sparseArr.length; I ++ ) {50 // primera fila, segunda columna es una columna de la tercera corresponde de valores válidos para un valor 51 System.out.printf ( "% d \ T% D \ D% T \ T \ n-", sparseArr [I] [0], sparseArr [I] [1.], sparseArr [I] [2 ]); 52 es } // 53 es matriz dispersa 54 es 55 - -> restaurada a la original matriz bidimensional 56 / ** 57 * 1. la primera fila de la matriz escasa para leer matriz de dos dimensiones para crear los datos originales de la primera línea de acuerdo con el ejemplo anterior, la lectura chessArr2 58 * 2. escasa después de la serie de líneas de datos y el original matriz bidimensional puede ser asignado * 59/60 // leer la primera línea 1. la primera matriz dispersa para crear el original matriz bidimensional tal como se describe chessArr2 61 de acuerdo con los datos de la primera línea / ** estructura matriz dispersa es 62 * 11 11 2 63 * 1 2 1 64 * 2 3 2 65 * / 66 int chessArr2 [] [] = new int [sparseArr [0] [0]] [sparseArr [0] [ 1]]; // primero valor de columna segundo valor de la fila 67 @ 2 después de leer la matriz dispersa de líneas de datos de la segunda línea y asignado a la original matriz bidimensional 68 que a partir de la segunda fila @ ¿Por qué? Debido a que la primera línea es la línea y el valor de 69 (= I int 1;. I <sparseArr.length; I ++ ) {70 chessArr2 [sparseArr [I] [0]] [. SparseArr [I] [1]] = sparseArr [I] [2 ]; 72 . 73} // 3 salidas de recuperación de dos dimensiones matriz después 74System.out.println (); 75 System.out.println ( "el restaurado matriz bidimensional" ); 76 77 for (int [] Row: chessArr1) {78 for (int datos: Fila) 79 {la System.out .printf ( "% D \ T" , Data); 80 } 81 System.out.println (); 82 } 84} 83

 
 
Desviado más difícil de entender chessArr2 [sparseArr [i] [0 ]] [sparseArr [i] [1]] = sparseArr [i] [2]; 
matriz de bucle de matriz establece el valor de la cual se asigna a una única matriz sparseArr chessArr2
. 1 int Fila = sparsearr [I] [0 ] 
2 int COL = sparsearr [I] [I] 
. 3 chessarr [fila] [COL] = sparsearr [I] [2 ] 
. 4 se centra en las columnas y filas en un valor de filas sparsearr y columna para chessarr 

4. La aplicación de los resultados correspondientes a

 

Supongo que te gusta

Origin www.cnblogs.com/Jack-GUO/p/12523611.html
Recomendado
Clasificación