|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Dec 2002
Città: Loano (SV)
Messaggi: 1172
|
[c/c++] utilità degli alberi binari
Qualcuno mi può dire l'utilità di queste strutture? Perchè senza una ragione non riesco a studiarli
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Ad esempio sono utili in algoritmi di ordinamento (heap sort)... Nelle strutture di memorizzazione dei database (BTree, B+Tree)...
Vengono usati anche in alcuni algoritmi di codifica/compressione...codifica di Huffman...algoritmo usato in praticamente tutti i sistemi di compressione delle informazioni... E poi chi più ne ha più ne metta...non è certo una struttura poco usata !!! Ultima modifica di cionci : 09-12-2003 alle 12:16. |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Apr 2002
Città: Vigevano(PV)
Messaggi: 2124
|
filesystem
__________________
Gnu/Linux User
|
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Jan 2003
Città: Lecce
Messaggi: 792
|
Re: utilità degli alberi binari in c/c++
Quote:
è senza dubbio una delle parti più rognose, almeno del mio corso
__________________
Chieftec DA-01WD - Enermax 430W - MSI K8N Neo2 Platinum - A64 3000+ @ 2610 Cooled By K10 Hurican - 512MB Corsair XMS PC3200 XL - PixelView 6600GT - WD Raptor 36GB+Maxtor 80 GB - Pioneer DVR A05 - LiteOn 52X-24X-52X - Acer TM661 "La Famigghia": SetiWarrior di 8° livello |
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Dec 2002
Città: Loano (SV)
Messaggi: 1172
|
ragazzi qualcuno ha qualche guida FATTA BENE sugli alberi? Ci hanno fatto comprare un libro sul c++ dove praticamente non c'è traccia di code, alberi, pile, ecc...
Il 22 ho l'esame |
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Jan 2003
Città: Lecce
Messaggi: 792
|
Quote:
__________________
Chieftec DA-01WD - Enermax 430W - MSI K8N Neo2 Platinum - A64 3000+ @ 2610 Cooled By K10 Hurican - 512MB Corsair XMS PC3200 XL - PixelView 6600GT - WD Raptor 36GB+Maxtor 80 GB - Pioneer DVR A05 - LiteOn 52X-24X-52X - Acer TM661 "La Famigghia": SetiWarrior di 8° livello |
|
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Apr 2002
Città: Vigevano(PV)
Messaggi: 2124
|
Quote:
[email protected] Tnk 1000000000000000000000000000000000000000000000000000
__________________
Gnu/Linux User
|
|
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Jan 2003
Città: Lecce
Messaggi: 792
|
Quote:
cmq dimmi cosa ti interessa che cerco di spedirtelo al + presto
__________________
Chieftec DA-01WD - Enermax 430W - MSI K8N Neo2 Platinum - A64 3000+ @ 2610 Cooled By K10 Hurican - 512MB Corsair XMS PC3200 XL - PixelView 6600GT - WD Raptor 36GB+Maxtor 80 GB - Pioneer DVR A05 - LiteOn 52X-24X-52X - Acer TM661 "La Famigghia": SetiWarrior di 8° livello |
|
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Apr 2002
Città: Vigevano(PV)
Messaggi: 2124
|
Quote:
Tnk 10000000000000000000000000000000000 ancora
__________________
Gnu/Linux User
|
|
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Dec 2002
Città: Loano (SV)
Messaggi: 1172
|
|
|
|
|
|
|
#11 | |
|
Senior Member
Iscritto dal: Apr 2002
Città: Vigevano(PV)
Messaggi: 2124
|
Quote:
__________________
Gnu/Linux User
|
|
|
|
|
|
|
#12 | |
|
Senior Member
Iscritto dal: Jan 2003
Città: Lecce
Messaggi: 792
|
Quote:
ah dimenticavo di dirvi che è tutto in inglese, cmq molto semplice e nn ci sono paroloni
__________________
Chieftec DA-01WD - Enermax 430W - MSI K8N Neo2 Platinum - A64 3000+ @ 2610 Cooled By K10 Hurican - 512MB Corsair XMS PC3200 XL - PixelView 6600GT - WD Raptor 36GB+Maxtor 80 GB - Pioneer DVR A05 - LiteOn 52X-24X-52X - Acer TM661 "La Famigghia": SetiWarrior di 8° livello |
|
|
|
|
|
|
#13 | |
|
Senior Member
Iscritto dal: Dec 2002
Città: Loano (SV)
Messaggi: 1172
|
Quote:
tutto di guadagnato, si impara |
|
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Nov 2000
Messaggi: 279
|
!
__________________
In un arco di tempo abbastanza lungo l'indice di sopravvivenza di ognuno scende a zero |
|
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: Jan 2003
Città: Lecce
Messaggi: 792
|
chiedi a luc@s, è lui che sta smistando
__________________
Chieftec DA-01WD - Enermax 430W - MSI K8N Neo2 Platinum - A64 3000+ @ 2610 Cooled By K10 Hurican - 512MB Corsair XMS PC3200 XL - PixelView 6600GT - WD Raptor 36GB+Maxtor 80 GB - Pioneer DVR A05 - LiteOn 52X-24X-52X - Acer TM661 "La Famigghia": SetiWarrior di 8° livello |
|
|
|
|
|
#16 |
|
Junior Member
Iscritto dal: Sep 2009
Messaggi: 1
|
albero binario
guardate questo programma qualcuno mi sa spiegare bene le istruzioni evidenziate in rosso
#include <iostream> using namespace std; class tree { private: int dato; tree *left; tree *right; public: tree(void); ~tree(void); void set(int numero); int get(void); tree *get_left(void); tree *get_right(void); void point_at_left(tree *where_to_point); void point_at_right(tree *where_to_point); }; tree::tree(void) { dato=1; left=NULL; right=NULL; } tree::~tree(void) { dato=0; left=NULL; right=NULL; } void tree::set(int numero) { dato=numero; } int tree::get(void) { return dato; } tree *tree::get_left(void) { return left; } tree *tree::get_right(void) { return right; } void tree: { left=where_to_point; } void tree: { right=where_to_point; } tree *rootPtr=NULL; void inserisci(tree *startPtr,int numero); void simmetrica(tree *startPtr); void inserisci(tree *startPtr,int numero) { tree *newPtr; if(numero<startPtr->get()) { if ((startPtr->get_left())==NULL) { newPtr=new(tree); newPtr->set(numero); startPtr->point_at_left(newPtr); } else inserisci(startPtr->get_left(),numero); } else if(numero>startPtr->get()) { if((startPtr->get_right())==NULL) { newPtr=new(tree); newPtr->set(numero); startPtr->point_at_right(newPtr); } else inserisci(startPtr->get_right(),numero); } else cout << "Elemento duplicato NON INSERITO" << endl; } void simmetrica(tree *startPtr) { if (startPtr!=NULL) { simmetrica(startPtr->get_left()); cout << "Nodo-> " << startPtr->get() << endl; simmetrica(startPtr->get_right()); } } int main(void) { int elem=9; tree *tempPtr; do{ cout << "Inserisci elemento(-1 per terminare) -> "; cin >> elem; if(elem!=-1) { if(rootPtr==NULL) { tempPtr=new(tree); tempPtr->set(elem); rootPtr=tempPtr; } else inserisci(rootPtr,elem); } }while(elem!=-1); simmetrica(rootPtr); system("pause"); return 0; } Ultima modifica di mardeg : 22-09-2009 alle 20:18. |
|
|
|
|
|
#17 |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Per prima cosa: usa il tag "CODE" per pubblicare del codice, serve per non perdere l'dentazione:
Codice:
[cut]
// definizione metodo "inserisci"
void inserisci(tree *startPtr,int numero)
{
tree *newPtr;
if(numero<startPtr->get())
{
if ((startPtr->get_left())==NULL)
{
newPtr=new(tree);
newPtr->set(numero);
startPtr->point_at_left(newPtr);
}
else
inserisci(startPtr->get_left(),numero);
}
else if(numero>startPtr->get())
{
if((startPtr->get_right())==NULL)
{
newPtr=new(tree);
newPtr->set(numero);
startPtr->point_at_right(newPtr);
}
else
inserisci(startPtr->get_right(),numero);
}
else
cout << "Elemento duplicato NON INSERITO" << endl;
}
// definizione metodo "simmetrica"
void simmetrica(tree *startPtr)
{
if (startPtr!=NULL)
{
simmetrica(startPtr->get_left());
cout << "Nodo-> " << startPtr->get() << endl;
simmetrica(startPtr->get_right());
}
}
[cut]
Parte controllando se l'elemento da inserire è minore o maggiore dell'elemento del nodo indicato (startPtr): se è minore e startPtr non ha un figlio sinistro allora crea un nuovo nodo che contiene l'elemento da inserire e lo collega come figlio sinistro di startPtr; se invece stratPtr ha già un figlio sinistro, "inserisci" chiama ricorsivamente se stesso passando come nodo di riferimento il figlio sinistro di startPtr. Allo stesso modo, se l'elemento da inserire risulta maggiore di startPtr e startPtr non ha un figlio destro allora crea un nuovo nodo che contiene l'elemento da inserire e lo collega come figlio destro di startPtr; se invece stratPtr ha già un figlio destro, "inserisci" chiama ricorsivamente se stesso passando come nodo di riferimento il figlio destro di startPtr. Infine, se l'elemendo da inserire non è ne minore ne maggiore dell'elemento di startPtr, allora "inserisci" non lo inserisce (niente duplicati) e stampa un messaggio. La funzione "simmetrica" invece stampa il valore di tutti i nodi figli a partire da un nodo radice (quello passato come parametro alla funzione) esplorando l'albero con una visita inorder (nodo figlio sinistro, nodo padre, nodo figlio destro). Anche questa funzione è ricorsiva. Per saperne di più sulle modalità di tree traversal, qui c'è qualcosa.
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) Ultima modifica di banryu79 : 23-09-2009 alle 09:42. |
|
|
|
|
|
#18 | |
|
Senior Member
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
|
Quote:
nelle loro varianti hanno anche delle grosse utilitá algoritmiche: esistono infatti gli alberi binari ordinati che permettono nel caso migliore di trovare un'informazione in tempo logaritmico anziché lineare; poi siccome quello é solo il caso migliore, mentre nel caso peggiore il tempo é sempre lineare, esistono gli alberi AVL anche noti come autobilancianti, per i quali il tempo di ricerca é logaritmico in ogni caso. infine esiste una generalizzazione degli alberi AVL che sono gli alberi RB (red-black) e permettono una maggiore efficienza in fase di inserzione e rimozione al costo di potenziali rallentamenti molto contenuti in fase di ricerca. pietá! ![]() per i filesystem si usano tutt'al piu i B-trees. |
|
|
|
|
|
|
#19 |
|
Senior Member
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
|
altra utilitá degli alberi binari: esiste una notazione che permette ad essi di rappresentare alberi N-ari. infatti un albero N-ario puó essere rappresentanto come un grafo in cui ogni nodo fa riferimento al primo dei suoi figli ed ogni figlio da riferimento al prossimo dei suoi fratelli (quindi per memorizzare i figli si usa una lista linkata). di conseguenza ogni nodo fa riferimento ad altri due nodi, il primo figlio e il fratello, e quindi si tratta di un albero binario.
l'algoritmo di traduzione appena descritto é praticamente una biezione tra l'insieme degli alberi binari e quello degli alberi N-ari. |
|
|
|
|
|
#20 |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Che fai fero, necoposting?
Comunque ottime le tue integrazioni, almeno se in futuro qualcuno incapperà nel topic troverà molte indicazioni. A tal proposito, aggiungo alla tua descrizione dei vari tipi di albero un articolo di Robert Sedgewick su una variante che lui chiama Left Leaning Red-Black Trees.
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 20:45.





















