Optimizarea codului în Java
Pavlos Kosmetatos
Lead Engineer @Wealthyhood
Înțelegerea complexității spațiale este esențială pentru aplicații care:
OutOfMemoryErrorNotația este identică cu cea pentru complexitatea temporală.
Clase de complexitate frecvente:
O(1): Timp constant - independent de dimensiunea intrăriiO(n): Timp liniar - crește odată cu dimensiunea intrăriiO(n²): Timp pătratic - crește pătratic cu dimensiunea intrăriipublic int findMax(int[] array) {
int max = Integer.MIN_VALUE;
for (int value : array) {
if (value > max) {
max = value;
}
}
return max;
}
Indiferent dacă tabloul are 10 sau 10 milioane de elemente, folosim memorie doar pentru o singură variabilă, max
Complexitatea spațială este O(1) sau spațiu constant
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 elemente, avem nevoie de spațiu pentru încă n elementeO(n), deoarece memoria suplimentară crește liniar cu dimensiunea intrăriipublic 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 este 10, avem nevoie de 100 de celule; dacă n este 100, avem nevoie de 10.000O(n²)Memoria este o resursă limitată!
Exemplele anterioare, pentru o dimensiune de intrare de 10.000 de elemente:
findMax, O(1) -> câțiva octeți suplimentaridoubleValues, O(n) -> aproximativ 40 KB memorie suplimentarămultiplicationTable, O(n²) -> aproximativ 400 MB memorie suplimentară
De reținut:

Optimizarea codului în Java