Optimizing Code in Java
Pavlos Kosmetatos
Lead Engineer @Wealthyhood
Entender la complejidad espacial es clave para crear aplicaciones que:
OutOfMemoryErrorLa notación es idéntica a la de complejidad temporal.
Clases comunes de complejidad:
O(1): Constante: independiente del tamañoO(n): Lineal: crece con la entradaO(n²): Cuadrática: crece cuadráticamente con la entradapublic int findMax(int[] array) {
int max = Integer.MIN_VALUE;
for (int value : array) {
if (value > max) {
max = value;
}
}
return max;
}
Tenga nuestro array 10 o 10 millones de enteros, solo usamos memoria para una variable, max
La complejidad espacial es O(1) o constante
public int[] doubleValues(int[] array) {
int[] result = new int[array.length];
for (int i = 0; i < array.length; i++) {
result[i] = array[i] * 2;
}
return result;
}
n elementos, necesitamos espacio para n elementos adicionalesO(n) porque la memoria extra crece linealmente con el tamaño de entradapublic int[][] multiplicationTable(int n) {
int[][] table = new int[n][n];
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
table[i][j] = (i + 1) * (j + 1);
}
}
return table;
}
n es 10, necesitamos 100 celdas; si n es 100, necesitamos 10.000 celdasO(n²)¡La memoria es un recurso finito!
Nuestros ejemplos anteriores con tamaño de entrada 10.000 elementos:
findMax, O(1) -> solo unos pocos bytes extradoubleValues, O(n) -> unos 40 KB de memoria extramultiplicationTable, O(n²) -> alrededor de 400 MB de memoria extra
No lo olvides:

Optimizing Code in Java