Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Un fulmine sulla scrivania, Corsair Sabre v2 Pro ridefinisce la velocità nel gaming
Un fulmine sulla scrivania, Corsair Sabre v2 Pro ridefinisce la velocità nel gaming
Questo mouse ultraleggero, con soli 36 grammi di peso, è stato concepito per offrire un'esperienza di gioco di alto livello ai professionisti degli FPS, grazie al polling rate a 8.000 Hz e a un sensore ottico da 33.000 DPI. La recensione esplora ogni dettaglio di questo dispositivo di gioco, dalla sua agilità estrema alle specifiche tecniche che lo pongono un passo avanti
Nokia Innovation Day 2025: l’Europa ha bisogno di campioni nelle telecomunicazioni
Nokia Innovation Day 2025: l’Europa ha bisogno di campioni nelle telecomunicazioni
Dal richiamo di Enrico Letta alla necessità di completare il mercato unico entro il 2028 alla visione di Nokia sul ruolo dell’IA e delle reti intelligenti, il Nokia Innovation Day 2025 ha intrecciato geopolitica e tecnologia, mostrando a Vimercate come la ricerca italiana contribuisca alle sfide globali delle telecomunicazioni
Sottile, leggero e dall'autonomia WOW: OPPO Reno14 F conquista con stile e sostanza
Sottile, leggero e dall'autonomia WOW: OPPO Reno14 F conquista con stile e sostanza
OPPO Reno14 F 5G si propone come smartphone di fascia media con caratteristiche equilibrate. Il device monta processore Qualcomm Snapdragon 6 Gen 1, display AMOLED da 6,57 pollici a 120Hz, tripla fotocamera posteriore con sensore principale da 50MP e generosa batteria da 6000mAh con ricarica rapida a 45W. Si posiziona come alternativa accessibile nella gamma Reno14, proponendo un design curato e tutto quello che serve per un uso senza troppe preoccupazioni.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 01-06-2010, 14:07   #1
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
[ANSI C] - Albero binario di ricerca

ciao,
elimino quanto richiesto in quanto sentivo di essere parecchio fuori strada.

Devo usare gli alberi binari di ricerca e mi è venuta la seguente intutizione: costruisco la mia struttura dati che contiene tutti i dati necessari. Ogni puntatore di queste strutture lo memorizzo nei nodi di un ABR e poi con le consuete funzioni faccio ricerche, riordini eventuali è giusto ?

ciao

p.s.
aggiungo uno scorcio di codice


solitamente la struttura di un albero di ricerca è la seguente:

struct alberodiricerca {
int nodo;
struct alberodiricerca *left, *right, *up;
};


ma sarebbe corretta anche questa ?

struct alberodiricerca {
int chiave;
char *nome;
char *cognome;
char *indirizzo
char *città;
struct alberodiricerca *left, *right, *up;
};

Ultima modifica di misterx : 01-06-2010 alle 17:16.
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 01-06-2010, 14:21   #2
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
edit

Ultima modifica di misterx : 01-06-2010 alle 15:48.
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 01-06-2010, 18:29   #3
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
ciao,
aggiungo anche questa domanda relativa a questo codice:

Codice:
#include <stdio.h>
#include <stdlib.h>

typedef int key;

struct searchtree {
	key v;
	struct searchtree *left, *right, *up;
}; 

typedef struct searchtree searchtree;

searchtree *createsearchtree(void);
...........
...........
searchtree *createsearchtree(void)
{
	return NULL;
}
mi riferisco alla funzione createsearchtree() che ritorna un NULL mentre io mi aspettavo che ritornasse un puntatore alla radice, ma a cosa serve quindi ?

grazie
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 01-06-2010, 19:13   #4
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
come non detto, sono passato agli alberi RB

ciao
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 01-06-2010, 22:33   #5
coocooche
Senior Member
 
L'Avatar di coocooche
 
Iscritto dal: Nov 2004
Città: Roma
Messaggi: 440
Ciao,
sto studiando pure io le strutture dati in C. Se non lo sapessi e ti puo aiutare, ci sta questo libro che tratta per bene le strutture dati ed è conosciuto:
Codice HTML:
Addison Wesley - Algorithms In C di Sedgewick
__________________
Ho fatto affari con: Dasutera77,Fran123,Zibaldone, blade1983, cianuro, nemoRS, DDA, Dexter, Dax86+,...
coocooche è offline   Rispondi citando il messaggio o parte di esso
Old 01-06-2010, 22:43   #6
Fibrizio
Member
 
L'Avatar di Fibrizio
 
Iscritto dal: Oct 2009
Città: In una città
Messaggi: 67
Quote:
Originariamente inviato da misterx Guarda i messaggi
ciao,
elimino quanto richiesto in quanto sentivo di essere parecchio fuori strada.

Devo usare gli alberi binari di ricerca e mi è venuta la seguente intutizione: costruisco la mia struttura dati che contiene tutti i dati necessari. Ogni puntatore di queste strutture lo memorizzo nei nodi di un ABR e poi con le consuete funzioni faccio ricerche, riordini eventuali è giusto ?

ciao

p.s.
aggiungo uno scorcio di codice


solitamente la struttura di un albero di ricerca è la seguente:

struct alberodiricerca {
int nodo;
struct alberodiricerca *left, *right, *up;
};


ma sarebbe corretta anche questa ?

struct alberodiricerca {
int chiave;
char *nome;
char *cognome;
char *indirizzo
char *città;
struct alberodiricerca *left, *right, *up;
};

cosa sarebbe up? gli alberi binari si costruiscono con due rami, né più né meno, se no il criterio di ordinamento(ricerca non funziona.
Fibrizio è offline   Rispondi citando il messaggio o parte di esso
Old 02-06-2010, 00:16   #7
fero86
Senior Member
 
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
Quote:
Originariamente inviato da Fibrizio Guarda i messaggi
cosa sarebbe up? gli alberi binari si costruiscono con due rami, né più né meno, se no il criterio di ordinamento(ricerca non funziona.
"up" é evidentemente il puntatore al padre, un campo che nel 99% dei casi indica una pessima implementazione
a partire dal fatto che se introduci quel campo introduci anche la possibilitá di stati inconsistenti della struttura dati: affinché la struttura sia consistente dovrebbe esserci uno e un solo nodo che ha up = NULL e in tutti gli altri nodi il nodo puntato da up dovrebbe puntare al nodo stesso o con left o con right. troppo complicato da gestire.
fero86 è offline   Rispondi citando il messaggio o parte di esso
Old 02-06-2010, 01:12   #8
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
Quote:
Originariamente inviato da fero86 Guarda i messaggi
"up" é evidentemente il puntatore al padre, un campo che nel 99% dei casi indica una pessima implementazione
a partire dal fatto che se introduci quel campo introduci anche la possibilitá di stati inconsistenti della struttura dati: affinché la struttura sia consistente dovrebbe esserci uno e un solo nodo che ha up = NULL e in tutti gli altri nodi il nodo puntato da up dovrebbe puntare al nodo stesso o con left o con right. troppo complicato da gestire.
Scusa, perché? La radice avrà un genitore nullo, tutti gli altri verranno aggiornati di conseguenza durante gli inserimenti o le rimozioni, non vedo il problema. Quella di avere un puntatore al nodo padre è una prassi comune e sicuramente utile, tanto che sono sicuro sia riportata dalla stragrande maggioranza dei testi introduttivi agli algoritmi e alle strutture dati.
Tanto per fare un esempio, senza avere un riferimento al nodo padre, se io ti chiedessi di scrivere una routine che riceve in input un generico nodo di un albero binario di ricerca e mi restituisce in output 1) il nodo suo successore, o 2) un valore nullo, se questo non esiste, come faresti?

ciao
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 02-06-2010, 01:19   #9
Fibrizio
Member
 
L'Avatar di Fibrizio
 
Iscritto dal: Oct 2009
Città: In una città
Messaggi: 67
Quote:
Originariamente inviato da DanieleC88 Guarda i messaggi
Scusa, perché? La radice avrà un genitore nullo, tutti gli altri verranno aggiornati di conseguenza durante gli inserimenti o le rimozioni, non vedo il problema. Quella di avere un puntatore al nodo padre è una prassi comune e sicuramente utile, tanto che sono sicuro sia riportata dalla stragrande maggioranza dei testi introduttivi agli algoritmi e alle strutture dati.
Tanto per fare un esempio, senza avere un riferimento al nodo padre, se io ti chiedessi di scrivere una routine che riceve in input un generico nodo di un albero binario di ricerca e mi restituisce in output 1) il nodo suo successore, o 2) un valore nullo, se questo non esiste, come faresti?

ciao

a questo sopperisce il criterio di ricerca che sottostà all'albero, per cui il riferimento al genitore è perfettamente inutile.
Fibrizio è offline   Rispondi citando il messaggio o parte di esso
Old 02-06-2010, 01:39   #10
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
In che modo?

Io ti domando di fare una cosa di questo tipo. Hai un albero come questo:
Codice:
              4
         /         \
     2               5
  /     \           /    \
1        3      6       7
Sei nella situazione in cui conosci solo il puntatore ad un nodo che sai appartenere all'albero, una cosa del tipo:
Codice:
node_t *ptr;
che, nell'esempio che ti faccio io, punta alla foglia con chiave 3.
Come scrivi - senza avere riferimenti al nodo genitore - un algoritmo che mi dia un puntatore al nodo che è successivo (in una visita in-order) a quello ricevuto in input? Nel mio caso vorrei restituisse un puntatore alla radice con chiave 4.

ciao
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!

Ultima modifica di DanieleC88 : 02-06-2010 alle 01:42.
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 02-06-2010, 07:24   #11
fero86
Senior Member
 
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
Quote:
Originariamente inviato da DanieleC88 Guarda i messaggi
Scusa, perché? La radice avrà un genitore nullo, tutti gli altri verranno aggiornati di conseguenza durante gli inserimenti o le rimozioni, non vedo il problema. Quella di avere un puntatore al nodo padre è una prassi comune e sicuramente utile, tanto che sono sicuro sia riportata dalla stragrande maggioranza dei testi introduttivi agli algoritmi e alle strutture dati.
é naturale che la possibilitá di gestire la struttura dati esiste e che la speranza sia quella di non sbagliare mai e di non portarla mai in stato inconsistente, ma l'uomo inevitabilmente sbaglia e una struttura dati come quella é inutilmente complessa nel senso che ci sono molte piu possibilitá di inconsistenza e che é comunque possibile trovare implementazioni alternative dove i nodi non hanno il puntatore al padre.



Quote:
Tanto per fare un esempio, senza avere un riferimento al nodo padre, se io ti chiedessi di scrivere una routine che riceve in input un generico nodo di un albero binario di ricerca e mi restituisce in output 1) il nodo suo successore, o 2) un valore nullo, se questo non esiste, come faresti?
non lo faccio e basta perché é una porcheria
o, come dicevo sopra, una pessima implementazione.
quando si espone un'interfaccia d'uso per uno strato di software la correttezza di design richiede che si esponga tutto in maniera opaca: non esiste che tu rifili al programmatore finale i puntatori alle tue strutture dati interne e che li rivuoi pure indietro
con un design del genere la validazione dell'input diventa impossibile.

per la visita ordinata di un albero in cui i nodi non hanno il puntatore al padre la soluzione migliore é esporre una funzione che visita tutti i nodi in ordine e per ogni nodo richiama una funzione di callback specificata dal programmatore finale. in alternativa il programmatore finale puó specificare un qualche dato che identifichi il nodo "corrente" della visita (ma non il puntatore al nodo stesso!), ad esempio l'indice del nodo nell'ordinamento, ma in questo modo la soluzione diventa inefficiente perché ad ogni passo in avanti devi ritrovare il nodo identificato da quell'indice; la cosa puó essere resa piu efficiente se si possono fare assunzioni, per esempio che l'albero sia completo e abbia altezza nota, oppure che avrá un certo numero massimo di nodi poiché in questo caso é possibile allocare staticamente un array ordinato di puntatori ai nodi che permette di ritrovare immediatamente il nodo i-esimo dell'ordinamento.



Quote:
ciao
ah, gli effetti della VICIUS-ite, ancora a distanza di anni
fero86 è offline   Rispondi citando il messaggio o parte di esso
Old 02-06-2010, 09:51   #12
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
Quote:
Originariamente inviato da fero86 Guarda i messaggi
é naturale che la possibilitá di gestire la struttura dati esiste e che la speranza sia quella di non sbagliare mai e di non portarla mai in stato inconsistente, ma l'uomo inevitabilmente sbaglia e una struttura dati come quella é inutilmente complessa nel senso che ci sono molte piu possibilitá di inconsistenza e che é comunque possibile trovare implementazioni alternative dove i nodi non hanno il puntatore al padre.
Nah, ti assicuro che l'ho implementato di persona con i puntatori al padre (sia nel caso di alberi normalissimi che alberi binari di ricerca che alberi AVL), e non aggiunge un grado di complicazione così elevato.

Quote:
Originariamente inviato da fero86 Guarda i messaggi
non lo faccio e basta perché é una porcheria
o, come dicevo sopra, una pessima implementazione.
quando si espone un'interfaccia d'uso per uno strato di software la correttezza di design richiede che si esponga tutto in maniera opaca: non esiste che tu rifili al programmatore finale i puntatori alle tue strutture dati interne e che li rivuoi pure indietro
con un design del genere la validazione dell'input diventa impossibile.
Be', guarda, se scrivi il codice in C hai per forza di cose una struttura ben poco opaca, perché o ricorri a puntatori a strutture (che quindi esporranno i loro dati all'utente) o fai un giro contorto che - quello sì - complica in una maniera spropositata l'implementazione.
E magari ti taglia fuori anche la possibilità di scrivere funzioni che nella pratica sono semplicissime (vedasi la funzione "successivo" che ti dicevo prima).

Quote:
Originariamente inviato da fero86 Guarda i messaggi
per la visita ordinata di un albero in cui i nodi non hanno il puntatore al padre la soluzione migliore é esporre una funzione che visita tutti i nodi in ordine e per ogni nodo richiama una funzione di callback specificata dal programmatore finale. in alternativa il programmatore finale puó specificare un qualche dato che identifichi il nodo "corrente" della visita (ma non il puntatore al nodo stesso!), ad esempio l'indice del nodo nell'ordinamento, ma in questo modo la soluzione diventa inefficiente perché ad ogni passo in avanti devi ritrovare il nodo identificato da quell'indice; la cosa puó essere resa piu efficiente se si possono fare assunzioni, per esempio che l'albero sia completo e abbia altezza nota, oppure che avrá un certo numero massimo di nodi poiché in questo caso é possibile allocare staticamente un array ordinato di puntatori ai nodi che permette di ritrovare immediatamente il nodo i-esimo dell'ordinamento.
Be', ti sei risposto da solo: diventa o 1) macchinoso, o 2) inefficiente, o 3) limitante.
E poi non vedo il problema: esulando dal linguaggio C, metti che passiamo al C++, se invece di avere una struttura nodo (di cui posso leggere e modificare tutti i campi) avessi avuto una classe nodo, dove i riferimenti a figli, nipoti, cugini e padri sono in campi privati?
Lì i "design issues" scompaiono senza alcun problema.

Quote:
Originariamente inviato da fero86 Guarda i messaggi
ah, gli effetti della VICIUS-ite, ancora a distanza di anni

In realtà l'ho presa come abitudine non perché la usasse VICIUS, ma perché dà un tono più cordiale alla discussione. In questo forum c'è troppa gente che si vanta di conoscenze che non ha e scatena flame ad ogni occasione che può. A me invece interessa solo discutere.

ciao
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 02-06-2010, 10:38   #13
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
ciao,
una dritta più che altro.
Devo inserire in un albero RB un certo numero di dati ed inizialmente la chiave è il codice di riconoscimento del dispositivo che inserisco nell'albero:

chiave, dato1, dato2, dato3 etc.....

Sapendo che gli alberi RB sono una estensione degli ABR e che quindi le chiavi vengono memorizzate in ordine, mi chiedevo se ad esempio si ha la richiesta di visualizzare l'intero albero ordinato per dato2 che non è chiave, se ha senso costruire un albero binario temporaneo usando come chiave dato2 e quindi fare una visita inorder partendo dalla foglia più a sx

grazie

ciao


approfitto per chedervi secondo voi cosa fa questa parte di codice di un RB

Codice:
void inord(rbnode *p, rbnode *nil, void (*op)(rbnode *))
{
	if(p != nil) {
        	inord(p->left,nil,op);
		(*op)(p);
        	inord(p->right,nil,op);
	}
}

/****************************************************************************/

void inorder(rbtree *p, void (*op)(rbnode *))
{
	inord(p->root, p->nil, op);
}

a me sembra che visiti l'albero in ordine ma mi chiedo se per stampare le chiavi contenute bell'albero devo aggiungere codice oppure c'è un modo per evitare di toccare tali funzioni già fatte

Ultima modifica di misterx : 02-06-2010 alle 11:09.
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 02-06-2010, 18:39   #14
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
Quote:
Originariamente inviato da misterx Guarda i messaggi
Sapendo che gli alberi RB sono una estensione degli ABR e che quindi le chiavi vengono memorizzate in ordine, mi chiedevo se ad esempio si ha la richiesta di visualizzare l'intero albero ordinato per dato2 che non è chiave, se ha senso costruire un albero binario temporaneo usando come chiave dato2 e quindi fare una visita inorder partendo dalla foglia più a sx
Mi sembra troppo complicato da fare... Io terrei traccia del numero di nodi presente nell'albero, creerei un'array con un numero uguale di elementi, e lo riempirei con una visita in-order. Poi lo ordinerei in base a dato2.
Verrebbe un tempo O(n) per la creazione dell'array, più O(n·log(n)) per l'ordinamento dell'array (dove n è il numero di nodi dell'albero), quindi per un costo totale di O(n·log(n)).

Quote:
Originariamente inviato da misterx Guarda i messaggi
mi chiedo se per stampare le chiavi contenute bell'albero devo aggiungere codice oppure c'è un modo per evitare di toccare tali funzioni già fatte
Devi scrivere una funzione che stampi il valore del nodo e passarla come secondo argomento ad "inorder()".

P.S.: un consiglio, quando hai:
Quote:
Originariamente inviato da misterx Guarda i messaggi
Codice:
void inord(rbnode *p, rbnode *nil, void (*op)(rbnode *))
{
	if(p != nil) {
        	inord(p->left,nil,op);
		(*op)(p);
        	inord(p->right,nil,op);
	}
}
quel (*op)(p) è un appesantimento sintattico inutile, funzionerà anche senza l'asterisco:
Codice:
void inord(rbnode *p, rbnode *nil, void (*op)(rbnode *))
{
	if(p != nil) {
        	inord(p->left,nil,op);
		op(p);
        	inord(p->right,nil,op);
	}
}
Mi sembra molto più leggibile.
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 02-06-2010, 21:43   #15
Fibrizio
Member
 
L'Avatar di Fibrizio
 
Iscritto dal: Oct 2009
Città: In una città
Messaggi: 67
Quote:
Originariamente inviato da DanieleC88 Guarda i messaggi
In che modo?

Io ti domando di fare una cosa di questo tipo. Hai un albero come questo:
Codice:
              4
         /         \
     2               5
  /     \           /    \
1        3      6       7
Sei nella situazione in cui conosci solo il puntatore ad un nodo che sai appartenere all'albero, una cosa del tipo:
Codice:
node_t *ptr;
che, nell'esempio che ti faccio io, punta alla foglia con chiave 3.
Come scrivi - senza avere riferimenti al nodo genitore - un algoritmo che mi dia un puntatore al nodo che è successivo (in una visita in-order) a quello ricevuto in input? Nel mio caso vorrei restituisse un puntatore alla radice con chiave 4.

ciao
basta guardare wikiedia, che riporta l'esempio del Lingaggio C
http://it.wikipedia.org/wiki/Albero_binario
Fibrizio è offline   Rispondi citando il messaggio o parte di esso
Old 02-06-2010, 21:49   #16
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
Su quella pagina vedo solo un'infarinatura abbastanza confusa di alberi, condita con con un codice C illeggibile e pieno di commenti al limite del ridicolo... ma non c'è la risposta alla mia domanda.
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 02-06-2010, 22:00   #17
Fibrizio
Member
 
L'Avatar di Fibrizio
 
Iscritto dal: Oct 2009
Città: In una città
Messaggi: 67
Quote:
Originariamente inviato da DanieleC88 Guarda i messaggi
Su quella pagina vedo solo un'infarinatura abbastanza confusa di alberi, condita con con un codice C illeggibile e pieno di commenti al limite del ridicolo... ma non c'è la risposta alla mia domanda.
essendo impossibile che tu conosca solo il nodo e non tutto l'albero la tua domanda è priva di senso, per questo ti ho rimandato alla pagina di wikipedia dove ci sono per lo meno le basi.
Fibrizio è offline   Rispondi citando il messaggio o parte di esso
Old 02-06-2010, 22:08   #18
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
Credimi, non c'è bisogno di insegnarmi le basi...
E la mia domanda non è affatto priva di senso. Pur conoscendo l'albero per intero (che non è scontato come pensi, dipende dall'implementazione), ripeto, come determini il successivo di un nodo avendo a disposizione un riferimento a quel preciso nodo e non sapendo dove è dentro un albero? Dovresti fare una intera visita per poter dire qual è che lo segue? Ok, ma in questo modo fai un bel salto di complessità da un tempo O(log(n)) ad O(n), con n il numero di nodi dell'albero. Ed è un salto gravissimo: se io ho un albero con 1024 nodi, nel primo caso ti determino il successivo in al massimo 10 passi, nel secondo potrei aver anche bisogno di farne 1024...

ciao
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!

Ultima modifica di DanieleC88 : 04-06-2010 alle 19:09.
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 02-06-2010, 22:20   #19
Fibrizio
Member
 
L'Avatar di Fibrizio
 
Iscritto dal: Oct 2009
Città: In una città
Messaggi: 67
Quote:
Originariamente inviato da DanieleC88 Guarda i messaggi
Credimi, non c'è bisogno di insegnarmi le basi...
E la mia domanda non è affatto priva di senso. Pur conoscendo l'albero per intero (che non è scontato come pensi, dipende dall'implementazione), ripeto, come determini il successivo di un nodo avendo a disposizione un riferimento a quel preciso nodo e non sapendo dove è dentro un albero? Dovresti fare una intera visita per poter dire qual è che lo segue? Ok, ma in questo modo fai un bel salto di complessità da un tempo O(log(n)) ad O(n), con n il numero di nodi dell'albero. Ed è un salto gravissimo: se io ho un albero con 1024 nodi, nel primo caso ti determino il successivo in al massimo 20 passi, nel secondo potrei aver anche bisogno di farne 1024...

ciao

le possibilità sono:

1. non fai l'albero, l'albero binario serve principalmente per fare ricerca o rispondere a determinate esigenze algoritmiche, operando la ricerca a priori (grazie alla strutturazione) anziché a posteriori
2. utilizzi altri sistemi: vettori, matrici, map

come ti ho detto quello che chiedi non ha senso. se non ti fidi, come d'altronde mi auguro per te, ti consiglio di fare un po' di prove e ti renderai conto che gli alberi servono solo per fare ricerche con un certo criterio, delegando all'inserimento il tempo che perderebbe l'algoritmo nella ricerca in uno schema "disordinato".
Fibrizio è offline   Rispondi citando il messaggio o parte di esso
Old 02-06-2010, 22:42   #20
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
Quote:
Originariamente inviato da Fibrizio Guarda i messaggi
le possibilità sono:

1. non fai l'albero, l'albero binario serve principalmente per fare ricerca o rispondere a determinate esigenze algoritmiche, operando la ricerca a priori (grazie alla strutturazione) anziché a posteriori
2. utilizzi altri sistemi: vettori, matrici, map
E... non mi hai risposto...
Quote:
Originariamente inviato da Fibrizio Guarda i messaggi
come ti ho detto quello che chiedi non ha senso. se non ti fidi, come d'altronde mi auguro per te, ti consiglio di fare un po' di prove e ti renderai conto che gli alberi servono solo per fare ricerche con un certo criterio, delegando all'inserimento il tempo che perderebbe l'algoritmo nella ricerca in uno schema "disordinato".
È talmente senza senso che ciò che ti ho chiesto lo puoi trovare ad esempio a p.259 di Introduction to Algorithms (seconda edizione), di Cormen, Leiserson, Rivest, Stein. (Il Rivest in questione è uno degli autori di RSA ed MD5, tanto per farti capire il calibro.)
Anzi, ti dirò di più, è una richiesta talmente senza senso che è un passo essenziale per la cancellazione di un nodo da un albero binario di ricerca. Ma magari non ti fidi, provaci anche tu.

ciao
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Un fulmine sulla scrivania, Corsair Sabre v2 Pro ridefinisce la velocità nel gaming Un fulmine sulla scrivania, Corsair Sabre v2 Pro...
Nokia Innovation Day 2025: l’Europa ha bisogno di campioni nelle telecomunicazioni Nokia Innovation Day 2025: l’Europa ha bisogno d...
Sottile, leggero e dall'autonomia WOW: OPPO Reno14 F conquista con stile e sostanza Sottile, leggero e dall'autonomia WOW: OPPO Reno...
Destiny Rising: quando un gioco mobile supera il gioco originale Destiny Rising: quando un gioco mobile supera il...
Plaud Note Pro convince per qualità e integrazione, ma l’abbonamento resta un ostacolo Plaud Note Pro convince per qualità e int...
iPhone 17 Pro Max e iPhone 17 Pro pronti...
La FIA avrà tolleranza zero nel 2...
Speciale 6 top bestseller Amazon: da 25,...
La super batteria di Panasonic è ...
Google lancia il Chrome del futuro: &egr...
Offerte FRITZ! a partire da 28€: ecco su...
Meta apre gli smart glasses agli svilupp...
La vera bussola digitale per le PMI &egr...
Colpo da 900 milioni: NVIDIA compra CEO ...
Apollo: il laser australiano che abbatte...
Battlefield 6: svelate le modalità...
Steam dice addio ai 32 bit: la fine del ...
LG OLED evo C5 scontati: il meglio della...
Intel e NVIDIA insieme? Le GPU Arc conti...
Nothing Phone (3a) Pro 12GB/256GB + pi&u...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 10:00.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v