¿Cuál es la forma más rápida (estructura de datos) para buscar la matriz multidimensional?

Mucho dependerá del tamaño / tipo de matriz / matriz y el tipo de operación que desea realizar. Por lo general, a menudo querrá acceder a elementos en un patrón secuencial que se puede hacer de manera bastante eficiente simplemente usando matrices.

He estado trabajando en un paquete de Java para trabajar con matrices pequeñas de 2 en 2, hasta 4 por 4 y enfocado en la velocidad más rápida posible. Para estos, acabo de usar un objeto con un campo para cada elemento. Entonces la clase para un 3 por matriz libre sería

clase Mat33 {
doble a11, a12, a13,
a21, a22, a23,
a31, a32, a33;
// Agrega otra matriz también esta
anular agregar (Mat33 que) {
this.a11 + = that.a11;
this.a12 + = that.a12;

}

}

Esto significa que hay mucho código repetitivo para escribir. He probado la velocidad y creo que esto es un poco más rápido que otras formas de escribir el código, creo que porque el compilador puede usar un modo de direccionamiento más eficiente. Para la velocidad, desea eliminar la mayor cantidad posible de creación de objetos, por lo que el método add modifica el objeto actual en lugar de crear un nuevo objeto. La desventaja de esto es que solo puede funcionar con tamaños de matriz fijos.

El valor predeterminado sería usar matrices de matrices.

double mat[][]

bucle de una manera es mucho más rápido que el otro. Esto puede hacer que la multiplicación de matrices sea complicada. Dependiendo de cómo el sistema implemente estos, su matriz de datos puede no ser contigua. Si se asigna dinámicamente usando algo como

double mat [] [] = new double [nrows] [];
para (int i = 0; i <nrows; ++ i) {
mat [i] = nuevo doble [ncols];
}

entonces las columnas individuales pueden separarse ampliamente en la memoria. Este método también requiere una doble indirección.

Otra estrategia es usar una matriz larga y una función de indexación.

clase Matrix {
datos dobles []; int filas, cols;
double get (int row, col) {
devolver datos [fila + col * filas];
}

}

La función de búsqueda es bastante rápida de calcular. Puede extender esta estrategia a matrices dispersas y matrices multidimensionales.

su pregunta no está muy bien especificada, pero suponiendo que lo que realmente quiere decir es “¿qué estructura de datos para una matriz multidimensional permitirá las búsquedas más rápidas?”, entonces la respuesta es una matriz lineal simple, ya que puede realizar algunas multiplicaciones y adiciones para calcular la ubicación de la matriz directamente.

Sin embargo, hay problemas con esto, por ejemplo, en casos de datos dispersos grandes, bien podría necesitar demasiada memoria para ser práctico, en cuyo caso debe buscar estructuras alternativas.

No existe una respuesta única que cumpla con todos los requisitos posibles, por lo que debe ser mucho más específico sobre lo que desea.

Si la matriz es escasa, las listas enlazadas ahorrarían espacio, pero para la búsqueda en ayunas, una matriz multidimensional es la más adecuada.

More Interesting

¿Cómo se puede hacer un sistema como Google AdWords y AdSense?

¿Cuál será el código C si quiero imprimir todos los elementos ingresados ​​en orden inverso sin usar matrices?

¿Cuáles son los problemas resueltos por los algoritmos hash?

Cómo demostrar que el camino más corto posible entre dos puntos es una línea recta

¿Cómo debo definir el orden de mi cromosoma en mi algoritmo genético?

¿Cuál es la diferencia entre la implementación de HPLC y FTIR?

¿Cuál es el proceso de un algoritmo de red neuronal convolucional para un OCR?

¿Cuál es el algoritmo que utilizan los ferrocarriles indios para la confirmación de un boleto de espera? ¿Cuál es la mejor manera de confirmar un boleto cuando hay una gran lista de espera?

¿Cuáles son algunas implementaciones reales de algoritmos altamente utilizados o patrones de diseño que ha utilizado en el desarrollo web front-end?

Cómo resolver este problema de integración definitiva

¿Dónde puedo encontrar las preguntas solo sobre búsqueda y clasificación?

¿Qué es un algoritmo para una solución aproximada al problema del vendedor ambulante?

Cómo calcular la suma de dígitos de cada número entre 1 y n

¿Son las estructuras de datos y los requisitos previos de algoritmos para la arquitectura y organización de computadoras en un curso típico de CS? Estoy aprendiendo por mi cuenta, ¿cuál debería aprender primero? ¿Puedo aprenderlos en paralelo?

¿Cuál sería un algoritmo eficiente para ordenar millones de líneas de cadenas / enteros en un archivo?