Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2 è la nuova handheld PC gaming con processore AMD Ryzen Z2 Extreme (8 core Zen 5/5c, GPU RDNA 3.5 16 CU) e schermo OLED 8,8" 1920x1200 144Hz. È dotata anche di controller rimovibili TrueStrike con joystick Hall effect e una batteria da 74Wh. Rispetto al dispositivo che l'ha preceduta, migliora ergonomia e prestazioni a basse risoluzioni, ma pesa 920g e costa 1.299€ nella configurazione con 32GB RAM/1TB SSD e Z2 Extreme
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
A re:Invent 2025, AWS mostra un’evoluzione profonda della propria strategia: l’IA diventa una piattaforma di servizi sempre più pronta all’uso, con agenti e modelli preconfigurati che accelerano lo sviluppo, mentre il cloud resta la base imprescindibile per governare dati, complessità e lock-in in uno scenario sempre più orientato all’hybrid cloud
Cos'è la bolla dell'IA e perché se ne parla
Cos'è la bolla dell'IA e perché se ne parla
Si parla molto ultimamente di "bolla dell'intelligenza artificiale", ma non è sempre chiaro perché: l'IA è una tecnologia molto promettente e che ha già cambiato molte cose dentro e fuori le aziende, ma ci sono enormi aspettative che stanno gonfiando a dismisura i valori delle azioni e distorcendo il mercato. Il che, com'è facile intuire, può portare a una ripetizione della "bolla dotcom", e forse anche di quella dei mutui subprime. Vediamo perché
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 01-06-2010, 15:07   #1
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3739
[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 18:16.
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 01-06-2010, 15:21   #2
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3739
edit

Ultima modifica di misterx : 01-06-2010 alle 16:48.
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 01-06-2010, 19:29   #3
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3739
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, 20:13   #4
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3739
come non detto, sono passato agli alberi RB

ciao
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 01-06-2010, 23: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, 23: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, 01: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, 02: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, 02: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, 02: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 02:42.
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 02-06-2010, 08: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, 10: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, 11:38   #13
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3739
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 12:09.
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 02-06-2010, 19: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, 22: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, 22: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, 23: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, 23: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 20:09.
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 02-06-2010, 23: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, 23: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


Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'...
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti AWS re:Invent 2025: inizia l'era dell'AI-as-a-Se...
Cos'è la bolla dell'IA e perché se ne parla Cos'è la bolla dell'IA e perché se...
BOOX Palma 2 Pro in prova: l'e-reader diventa a colori, e davvero tascabile BOOX Palma 2 Pro in prova: l'e-reader diventa a ...
FRITZ!Repeater 1700 estende la rete super-veloce Wi-Fi 7 FRITZ!Repeater 1700 estende la rete super-veloce...
SpaceX: un satellite ha fotografato il s...
36 idee regalo con offerte Amazon sotto ...
Sony assume il controllo dei Peanuts: Sn...
DJI Neo scende a 149€ su Amazon, in vers...
Scoperto un nuovo esopianeta che orbita ...
Blue Origin NS-37: successo per la missi...
Potrebbe essere stata rilevata una super...
La cometa interstellare 3I/ATLAS è...
Xiaomi 17 Ultra: l'autonomia non sarà un...
Il processo produttivo a 2 nm di TSMC è ...
L'atteso aggiornamento dei driver della ...
The Elder Scrolls VI nel 2029 e Fallout ...
Il Ryzen 7 9850X3D appare nel catalogo d...
Weekend pre natalizio Amazon, ecco tutte...
Prezzi giù su Oral-B iO: spazzolini elet...
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: 01:29.


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