checkIfBalanced()
nel seguente codice restituisce true se l'albero è bilanciato e falso altrimenti. Tuttavia in ogni ricorsione crea un oggetto TreeData. A mio parere, la complessità dello spazio è O (1), poiché dopo che ogni frame dello stack è stato scoppiato, il riferimento dell'oggetto creato su quel frame dello stack è stato perso e la garbage collection. Ho ragione?La complessità dello spazio sulla creazione di un oggetto su ricorsione il metodo
Si prega di notare:
io non sono alla ricerca di suggerimenti per migliorare/cambiare il mio codice. Il seguente esempio di codice è fatto su misura per porre la mia domanda.
Inoltre,
please ignore space-complexity adding stack frames
. Sto cercando la complessità spaziale degli oggetti numero 'TreeData' creati. Mi sembra che in qualsiasi punto ci sarebbero solo 3 oggetti TreeData. Questo è quello che voglio verificare. Grazie.
private static class TreeData {
private int height;
private boolean isBalanced;
TreeData(int height, boolean isBalanced) {
this.height = height;
this.isBalanced = isBalanced;
}
}
public boolean checkIfBalanced() {
if (root == null) {
throw new IllegalStateException();
}
return checkBalanced(root).isBalanced;
}
public TreeData checkBalanced(TreeNode node) {
if (node == null) return new TreeData(-1, true);
TreeData tdLeft = checkBalanced(node.left);
TreeData tdRight = checkBalanced(node.right);
if (tdLeft.isBalanced && tdRight.isBalanced && Math.abs(tdLeft.height - tdRight.height) <= 1) {
return new TreeData(Math.max(tdLeft.height, tdRight.height) + 1, true);
}
return new TreeData(Math.max(tdLeft.height, tdRight.height) + 1, false);
}
così il numero di oggetti di TreeData nella memoria sarebbe solo 1 - quindi, se "ignoro lo spazio di stack" , la complessità sarà O (1)? Quegli oggetti saranno garbage collection se i riferimenti sono spuntati di stack? – JavaDeveloper
@ JavaDeveloper- 1. Se si ignora lo spazio di stack e si considera solo il riferimento corrente, allora sarà presente solo un oggetto TreeData attivo. 2. *** Forse/Forse non ***, non appena la pila espelle tutti i nodi, gli oggetti possono essere O possono non essere raccolti, dipende dalla JVM per indovinare se saranno riutilizzati futuro. Per sicurezza, è necessario farlo manualmente impostando tali oggetti su 'null' in modo che possano ottenere i dati raccolti. Leggere le risposte (in particolare la risposta di Stephen C) -> http://stackoverflow.com/questions/27781116/garbage -collection-in-java-con-recursive-funzione –