Optimalizace kódu v Javě
Pavlos Kosmetatos
Lead Engineer @Wealthyhood
Porozumění prostorové složitosti je klíčové pro vývoj aplikací, které:
OutOfMemoryErrorNotace je stejná jako u časové složitosti.
Některé běžné třídy složitosti:
O(1): Konstantní – nezávislá na velikosti vstupuO(n): Lineární – roste s velikostí vstupuO(n²): Kvadratická – roste kvadraticky s velikostí vstupupublic int findMax(int[] array) {
int max = Integer.MIN_VALUE;
for (int value : array) {
if (value > max) {
max = value;
}
}
return max;
}
Ať má naše pole 10 nebo 10 milionů prvků, využíváme paměť pouze pro jednu proměnnou, max
Prostorová složitost je O(1), tedy konstantní
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 prvků, potřebujeme prostor pro n dalších prvkůO(n), protože potřebná paměť roste lineárně s velikostí vstupupublic 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 rovno 10, potřebujeme 100 buněk; pokud je n rovno 100, potřebujeme 10 000 buněkO(n²)Paměť je omezený zdroj!
Naše předchozí příklady pro vstup o velikosti 10 000 prvků:
findMax, O(1) -> jen několik bajtů navícdoubleValues, O(n) -> přibližně 40 KB navícmultiplicationTable, O(n²) -> přibližně 400 MB navíc
Nezapomeňte:

Optimalizace kódu v Javě