Este artículo estudia principalmente el contenido relacionado con la submatriz más grande en las matrices de programación de Java, como se detalla a continuación.
Conocer a una buena persona puede cambiar su vida; conocer un buen libro, ¿no?
Recientemente, tuve muchas ideas cuando leí " The Optimal Solutions para el algoritmo y las preguntas de la estructura de datos del Sr. Zuo Chengyun para el algoritmo y las preguntas de la estructura de datos de la Guía de entrevistas del código del programador " . Se recomienda que los bloggers que tengan pasatiempos en esta área también vayan a ver.
El algoritmo de la matriz más grande de la matriz basada en pila explicada en el libro es muy clásico, pero el blogger tiene una capacidad limitada y no ha podido comprender a fondo la esencia del algoritmo. Sin embargo, según esta idea, el blogger presentó un algoritmo simple para lidiar con este tipo de problema, que se resume de la siguiente manera.
Idea central
Echemos un vistazo a una foto primero, y podemos entenderla.
Como se muestra en la figura, cada ronda es una operación, y nuestro núcleo es la operación interna para cada ronda.
Calcule la longitud máxima de cada capa continuamente e ininterrumpida
En otras palabras, somos la matriz más importante para calcular las rondas de abajo a arriba, y luego podemos calcular el área de la submatriz máxima continua que se puede obtener en esta ronda para cada ronda. Luego, solo necesita comparar los datos más grandes para cada ronda y regresar para encontrar el área de la submatriz continua más grande de la matriz.
Código
De acuerdo, con las ideas básicas anteriores, podemos comenzar a escribir código. (Aunque no creo que lo haya dicho muy claramente, por favor perdóname).
paquete stack_and_queue;/*** @author guo pu <br>* Calcule el área del área rectangle continua más grande basada en la matriz*/clase pública maxrectangle {public static void main (string [] args) {entero [] arr = {2, 1, 3, 5, 7, 6, 4}; integer maxrectangle = Maxrectanglelea (arr); system.out.println ("El área del área rectángulo continuo más grande en la matriz es:" + maxrectangle);}/*** @param arr* @return el área máxima del área de rectángulo continuo en la matriz*/privado está intenso maxrectangea (integer [] {intent [] resultado de la matriz*/privado está en el static integer maxrectangea (integer [] {intent = el resultado de la matriz. int [arr.length]; // calcule la matriz atravesando la longitud continua de abajo hacia arriba hacia arriba para (int i = 1; i <= arr.length; i ++) {// El valor temporal de la longitud continua acumulada en la ronda actual se implementa int temple = 0; // registro la longitud máxima continua en la altura de esta ronda intent ° intent. Desde el subíndice de la primera capa causará la pérdida de la parte anterior de los datos para (int j = 1; j <= arr.length; j ++) {if (arr [j - 1]> = i) {templen += 1; templen_max = Templen;} else {Templen = 0;}} Result [i - 1] = I * Templen_Max; // System. i + "La longitud máxima continua e ininterrumpida de la capa es:" + templen_max);} // Encuentre el número con el valor numérico más grande en la matriz de conjunto de resultados, es decir, el área del dominio rectangular más grande en el área de continuidad encontrada int maxarea = 0; para (int i = 0; i <result.length; i ++) {maxarea = maxarea = maxarea = 0; para (int i = 0; i <result.length; i ++) {maxarea = maxarea = maxarea = 0; para (int i = 0; i <result.length; i ++) {maxarea = maxarea = maxarea = 0; para (int i = 0; i <result.length; i ++) {maxareain = maxarea = maxarea Maxarea: resultado [i];} // Devuelve el área del campo rectángulo continuo máximo obtenido devolviendo Maxarea;}}Los comentarios en el código también son relativamente completos, por lo que no entraré en demasiados detalles.
prueba
La siguiente es una prueba de la matriz. Primero, probemos con la matriz que se muestra en la imagen al comienzo de este artículo.
Entero [] arr = {2,1,3,5,7,6,4} ・・・・El área del área rectangular continua más grande en la matriz es: 16
Luego modificamos los valores de los elementos en la matriz para probar más para ver si los resultados son correctos.
Entero [] arr = {2,1,3,1,7,6,4} ・・・・El área del área rectangular continua más grande en la matriz es: 12
Después de que el propio blogger lo probó, el algoritmo funciona normalmente. :)
Parte de optimización
Hablando de la parte de optimización, lo primero que podemos ver es encontrar el valor máximo en la matriz establecida de resultados en el último paso.
De hecho, podemos aplicar otra variable para registrar el área de la submatriz más grande de la ronda hasta ahora. Sin embargo, esta optimización no juega un papel importante, y no hay una mejora significativa en la complejidad del tiempo.
Otro punto, creo que el mejor punto de entrada es agregar un juicio al realizar cálculos para cada ronda para decidir si se debe hacer un recorrido hacia abajo antes de la ronda actual. Si los elementos en la matriz fluctúan enormemente, el nivel de optimización sigue siendo muy bueno.
Resumir
Este pequeño algoritmo es más exquisito, y lo único que es más defectuoso es que la complejidad del tiempo es un poco más intensa. Si los lectores buscan un algoritmo con una complejidad de tiempo relativamente baja, tome un desvío.
Es bastante bueno si solo quieres encontrar un resultado. Al menos es mucho más eficiente que el método violento de computación.
Lo anterior es todo el contenido de este artículo sobre la solución simple a la submatriz máxima en las matrices de programación Java. Espero que sea útil para todos. Los amigos interesados pueden continuar referiéndose a otros temas relacionados en este sitio. Si hay alguna deficiencia, deje un mensaje para señalarlo. ¡Gracias amigos por su apoyo para este sitio!