Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
vivo X300 Pro rappresenta un'evoluzione misurata della serie fotografica del produttore cinese, con un sistema di fotocamere migliorato, chipset Dimensity 9500 di ultima generazione e l'arrivo dell'interfaccia OriginOS 6 anche sui modelli internazionali. La scelta di limitare la batteria a 5.440mAh nel mercato europeo, rispetto ai 6.510mAh disponibili altrove, fa storcere un po' il naso
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
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 04-05-2011, 17:31   #1
mame83
Member
 
Iscritto dal: Nov 2010
Messaggi: 71
[C]trovare il minimo in un albero binario semplice

Ciao a tutti. Ho il seguente problema : devo cercare in un albero binario semplice(cioè non di ricerca)l elemento piu piccolo utilizzando una funzione ricorsiva.

Codice:
int minimo(nod *radice, int conf)
{
 int min1,min2;
 if (radice!=NULL)
   {
     if(radice->info<conf)
       conf=radice->info;
     min1=minimo(radice->sinistro,conf);
     min2=minimo(radice->destro,conf);
     if (min1>min2)
       return min1;
     else
       return min2;
   }  
}
Dove conf inizializzo ad un valore piu grande che non potrei mai inserire nell albero.
MIN1 e MIN2 sono due variabili che dovrebbero memorizzare il minimo di sinistro e il minimo di destra. Li confronto e il valore piu piccolo sarà il minimo dell albero.
INVECE la funzione mi restitutisce un valore sballato.
Spero che qualcuno mi aiuti grazie
mame83 è offline   Rispondi citando il messaggio o parte di esso
Old 05-05-2011, 09:54   #2
mame83
Member
 
Iscritto dal: Nov 2010
Messaggi: 71
non so piu che fare. vi prego aiutatemi!!!!!
mame83 è offline   Rispondi citando il messaggio o parte di esso
Old 05-05-2011, 10:11   #3
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da mame83 Guarda i messaggi

Codice:
     if (min1>min2)
       return min1;
     else
       return min2;
Qui ritorni il massimo. Ad ogni modo ti consiglio di rivedere l'algoritmo
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 09-05-2011, 12:38   #4
mame83
Member
 
Iscritto dal: Nov 2010
Messaggi: 71
Quote:
Originariamente inviato da sottovento Guarda i messaggi
Qui ritorni il massimo. Ad ogni modo ti consiglio di rivedere l'algoritmo
si va be ho sbagliato a mettere segno. ma non va lo stesso....grazie per la tuo aiuto geniale..........ripeto GENIALE...... ma va va
mame83 è offline   Rispondi citando il messaggio o parte di esso
Old 09-05-2011, 16:36   #5
clockover
Senior Member
 
L'Avatar di clockover
 
Iscritto dal: Oct 2004
Messaggi: 1945
L'algoritmo che hai fatto è fatto molto male.
Dai una condizione if, ma non ritorni nulla nel caso non si verifichi la condizione.

così al volo potresti fare una cosa del tipo
Codice:
int minimo(node *nd){
    int min = nd.val;
    se nd è foglia
        return min
    int tmp = 0;
    //qui meglio distinguere alcuni casi
    if ha entrambi i figli
        int left = minimo(nd->left);
        int right = minimo(nd->right);
        tmp = valore più piccolo tra left e right
    else se ha solo figlio sinistro
        tmp = minimo(nd->left)
    else 
        tmp = minimo(nd->right)
    return valore più piccolo tra tmp e min
dato ch manca un passo base all'inizio della funzione ricorsiva ti consiglio di fare una cosa del genere
Codice:
int mini(node *nd){
    if(nd == NULL)vedi te che vuoi ritornare
    else return minimo(nd);
}
sembra non bello a vedersi ma in questo modo controlli subito la radice dell'albero senza aver bisogno di un passo base all'inizio della funzione minimo. Infatti non hai mai problemi nella funzione minimo di richiamare un nodo NULL dato che effettui sempre dei controlli prima di fare una chiamata...

Il codice non l'ho provato ma dovrebbe funzionare

ps
tratta bene chi ti risponde anche se le risposte possono essere un po scontate... anche perchè è stato l'unico che ti ha risposto ed è stato anche quello che ti ha detto di riguardare il codice dato che comunque era sbagliato
clockover è offline   Rispondi citando il messaggio o parte di esso
Old 09-05-2011, 17:11   #6
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da mame83 Guarda i messaggi
si va be ho sbagliato a mettere segno. ma non va lo stesso....grazie per la tuo aiuto geniale..........ripeto GENIALE...... ma va va
Sempre un piacere avere a che fare con gente gentile..... ripeto GENTILE .... cerca almeno di capire cosa manca:

Codice:
int minimo (node *nd)
{
    int l,r,m;
    return (nd==NULL)?maxint:(((m=(((l=minimo(nd->left))<(r=minimo(nd->right)))?l:r)) < nd->radice) ? m : nd->radice);
}
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 09-05-2011, 17:37   #7
mame83
Member
 
Iscritto dal: Nov 2010
Messaggi: 71
questo messaggio è per tutti. Il codice l ho visto è rivisto tantissime volte senza riuscire a risolvere nulla. Quindi ho deciso di chiedere aiuto, se quindi ricevo come risposta di rivedere il codice è ovvio che una persona si arrabbia (senza offendere nessuno).
mame83 è offline   Rispondi citando il messaggio o parte di esso
Old 09-05-2011, 18:13   #8
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da mame83 Guarda i messaggi
questo messaggio è per tutti. Il codice l ho visto è rivisto tantissime volte senza riuscire a risolvere nulla. Quindi ho deciso di chiedere aiuto, se quindi ricevo come risposta di rivedere il codice è ovvio che una persona si arrabbia (senza offendere nessuno).
Ok, dai... abbiamo sbagliato entrambi

Mio suggerimento:

1 - caso base: nd == NULL. Evita altri casi, altrimenti il codice diventa troppo lungo. Nel caso base ritorni il massimo intero disponibile

2 - se non e' il caso base:
2.1 - chiama ricorsivamente il minimo sul nodo sinistro (non hai bisogno di controllare che sia NULL) e memorizza il risultato nella variabile intera left;
2.2 - chiama ricorsivamente il minimo sul nodo destro e memorizza in right;
2.3 - ritorna il minimo fra left, right ed il contenuto della radice.

le variabili locali ti servono perche' si tratta di un minimo fra tre variabili, che effettuerai a due a due (confronti i primi due elementi, ed il risultato con il terzo).
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 09-05-2011, 18:18   #9
clockover
Senior Member
 
L'Avatar di clockover
 
Iscritto dal: Oct 2004
Messaggi: 1945
Quote:
Originariamente inviato da sottovento Guarda i messaggi
1 - caso base: nd == NULL. Evita altri casi, altrimenti il codice diventa troppo lungo. Nel caso base ritorni il massimo intero disponibile
il fatto è proprio questo... che valori ritorneresti se si verifica il caso base?
se entri nella funzione
Codice:
int minimo(nodo *p){
    if(p == NULL)return cosa?
    ......resto.....
}
infatti nella mia versione dell'algoritmo ho eliminato il caso base proprio per questo motivo
clockover è offline   Rispondi citando il messaggio o parte di esso
Old 09-05-2011, 18:28   #10
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da clockover Guarda i messaggi
il fatto è proprio questo... che valori ritorneresti se si verifica il caso base?
se entri nella funzione
Codice:
int minimo(nodo *p){
    if(p == NULL)return cosa?
    ......resto.....
}
infatti nella mia versione dell'algoritmo ho eliminato il caso base proprio per questo motivo
Ho proposto di ritornare il massimo intero disponibile. La costante opportuna dovrebbe trovarsi in limit.h

Nel caso non ti piaccia come soluzione (si, lo so, non ti piace ) si puo' pensare come condizione iniziale che l'utente NON ti dia un albero vuoto (ci deve essere almeno un nodo) e questo deve essere testato prima di chiamare la funzione ricorsiva.

Dopo di che:
1 - caso base: il nodo e' una foglia (i.e. entrambi i sottoalberi sono NULL).
in tal caso, il minimo e' l'informazione contenuta nella radice.

2 - se il nodo sx non e' NULL,
2.1 - chiama ricorsivamente il minimo() e memorizza il risultato in left;
2.2 - calcola il minimo fra left ed la radice e memorizzalo in res_sx;
Se il nodo sx e' NULL allora res_sx = radice;

3 - se il nodo dx non e' NULL,
3.1 - chiama ricorsivamente minimo() e memorizza il risultato in right;
3.2 - calcola il minimo fra right e la radice e memorizzalo in res_dx;
Se il nodo dx e' NULL allora res_dx = radice;

4 - ritorna il minimo fra res_dx e res_sx;

Mi piace di piu' ritornare il massimo intero
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 09-05-2011, 18:35   #11
clockover
Senior Member
 
L'Avatar di clockover
 
Iscritto dal: Oct 2004
Messaggi: 1945
Quote:
Originariamente inviato da sottovento Guarda i messaggi
Nel caso non ti piaccia come soluzione (si, lo so, non ti piace )
Già

Comunque il risultato è identico! Più che altro io ho puntato al fatto che fare delle chiamate ricorsive costa più che qualche if - else
clockover è offline   Rispondi citando il messaggio o parte di esso
Old 09-05-2011, 18:37   #12
mame83
Member
 
Iscritto dal: Nov 2010
Messaggi: 71
ho provato a farlo cosi mi sembra che funzioni
Codice:
int min(int a, int b, int c)
{
    return a < b ? (a < c ? a : c) : (b < c ? b : c);
}

int tree_min(nod *radice)
{
    /* arrivati alla fine */
    if (radice == NULL) 
        return max;
    
    /* nodo foglia */
    if (radice->sinistro==NULL && radice->destro==NULL) 
        return radice->info;
    
    return  min(tree_min(radice->sinistro),tree_min(radice->destro),radice->info);
}
dove max è una costante preinizializzata.
calcolo il minimo dal basso verso l alto tra sinistro destro e radice.
Che ne pensate???
mame83 è offline   Rispondi citando il messaggio o parte di esso
Old 09-05-2011, 20:55   #13
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da mame83 Guarda i messaggi
ho provato a farlo cosi mi sembra che funzioni
Codice:
int min(int a, int b, int c)
{
    return a < b ? (a < c ? a : c) : (b < c ? b : c);
}

int tree_min(nod *radice)
{
    /* arrivati alla fine */
    if (radice == NULL) 
        return max;
    
    /* nodo foglia */
    if (radice->sinistro==NULL && radice->destro==NULL) 
        return radice->info;
    
    return  min(tree_min(radice->sinistro),tree_min(radice->destro),radice->info);
}
dove max è una costante preinizializzata.
calcolo il minimo dal basso verso l alto tra sinistro destro e radice.
Che ne pensate???
Ne penso bene
Volendo puoi anche eliminare il controllo del nodo foglia, e' gia' fatto nella ricorsione
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria Recensione vivo X300 Pro: è ancora lui il...
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 ...
Il nuovo OnePlus Nord 6 è vicino al debu...
Tesla svela i risultati del Q4: conferma...
Nuova rimodulazione da Fastweb: fino a 3...
La NVIDIA RTX 5090 potrebbe presto costa...
ASUS non produrrà più smar...
CoopVoce sta per lanciare il 5G: ecco qu...
Factorial, azienda di batterie allo stat...
Le specifiche fuori di testa della Yangw...
I numeri incredibili di Xiaomi: nel 2025...
In Cina è pronto il parco fotovol...
Neuralink accelera: produzione di massa ...
Starlink abbassa l'orbita di migliaia di...
Dal MIT una nuova batteria per auto elet...
Adam Mosseri parla di IA su Instagram: l...
Suonerie personalizzate e Tone Store: il...
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: 23:15.


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