|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Aug 2010
Messaggi: 138
|
[Java] Algoritmi
Ragazzi oggi ho fatto l'esame di algoritmi, dove oltre alla varia teoria dovevo scrivere anche un metodo sugli alberi binari.
Volevo sapere se secondo voi è giusto: Codice:
Si consideri la seguente interfaccia che descrive alberi binari in cui la parte
informativa di ogni nodo sia un intero.
public interface AlberoBinario{
int val();
AlberoBinario sin();
AlberoBinario des();
}
Implementare il metodo
boolean Verifica(AlberoBinario a);
che restituisce :
*true , se almeno 2 foglie dell'albero hanno valore maggiore o uguale a 0
*false altrimenti
Codice:
public boolean Verifica(AlberoBinario a){
int c=CalcolaFogliePositive( a );
if(c>=2)return true;
return false;
}
public static int CalcolaFogliePositive( AlberoBinario a ){
if(a!=null){
if(a.destro()==null && a.sinistro()==null) {
if(a.val()>0) return 1;
else return 0;
}
else return CalcolaFogliePositive(a.destro()) + CalcolaFogliePositive(a.sinistro());;
}//if iniziale
else return 0;
}
Secondo voi è giusto? |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2010
Città: Frosinone
Messaggi: 416
|
sì
ps: spaziale direi O(logn) però.. è ricorsiva.. se si intende lo spazio che occupa nello stack è O(logn) Ultima modifica di tuccio` : 03-09-2010 alle 22:36. |
|
|
|
|
|
#3 | |
|
Member
Iscritto dal: Aug 2010
Messaggi: 138
|
Quote:
perché O(logn)?? .. deve comunque aprire tutti i nodi dell'albero per arrivare a "tutte le foglie".. ?? se mi spieghi perchè è O(log n) mi fai un gran favore.....ho la correzione a giorni |
|
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2782
|
Quote:
Se non è bilanciato, o se comunque non ci sono assunzioni in tal senso, il caso peggiore è che l'altezza dell'albero sia proprio n e quindi la complessità O(n) sarebbe corretta. |
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Apr 2010
Città: Frosinone
Messaggi: 416
|
ah be' sì ovviamente se non è bilanciato è O(n)
|
|
|
|
|
|
#6 |
|
Member
Iscritto dal: Aug 2010
Messaggi: 138
|
raga scusate.. ma per bilanciato cosa intendete:
che sia un albero binario e quindi ogni nodo ha al più due figli? o che sia un albero "BinarioBilanciato" e l'altezza del sotto alberoSinistro e sotto alberoDestro di ogni nodo differisca al più di "una unità"?? Ultima modifica di Gin&&Tonic : 04-09-2010 alle 10:28. |
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Feb 2007
Città: Verona
Messaggi: 1060
|
Quote:
__________________
|
|
|
|
|
|
|
#8 | |
|
Member
Iscritto dal: Aug 2010
Messaggi: 138
|
Quote:
o semplicemente binario?? |
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Apr 2010
Città: Frosinone
Messaggi: 416
|
deve esserci un limite all'altezza, come nei b-alberi o negli avl, perché una visita DFS ricorsiva può tenere, al più, nello stack tutte le chiamate del cammino dalla radice a una foglia
se è un semplice alberio binario, e non è specificato niente, tutti i nodi interni potrebbero avere tutti e soli figli sinistri, praticamente degenerando in una lista.. l'altezza quindi sarebbe limitata solo da n |
|
|
|
|
|
#10 |
|
Member
Iscritto dal: Aug 2010
Messaggi: 138
|
Ok nella mia traccia parlava solo di alberi binari( non era specificato il "bilanciamento tra i vari nodi") , perciò la complessità è O(n) .
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 19:45.




















