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;
…
}
…
}
- En el algoritmo de coincidencia del patrón de fuerza bruta cuando todos los caracteres en el patrón son únicos, entonces la fuerza bruta se puede implementar en la complejidad Big-oh (n) donde n es la longitud de la cadena (referencia: introducción a los algoritmos). ¿Alguien puede ayudarme con el algoritmo? Gracias por adelantado
- ¿Por qué el algoritmo de búsqueda binaria no es adecuado para usar en una tabla con punteros?
- ¿Cuál es el tema del proyecto de buena implementación para estudiantes junior que toman CSE 101 (Algoritmo)?
- ¿Por qué obtener más puntos de datos soluciona el problema de la alta variación en un algoritmo de aprendizaje automático?
- Cómo entender el análisis amortizado del algoritmo
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.