Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice
Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice
DJI Mini 5 Pro porta nella serie Mini il primo sensore CMOS da 1 pollice, unendo qualità d'immagine professionale alla portabilità estrema tipica di tutti i prodotti della famiglia. È un drone C0, quindi in un peso estremamente contenuto e che non richiede patentino, propone un gimbal rotabile a 225 gradi, rilevamento ostacoli anche notturno e autonomia fino a 36 minuti. Caratteristiche che rendono il nuovo drone un riferimento per creator e appassionati
ASUS Expertbook PM3: il notebook robusto per le aziende
ASUS Expertbook PM3: il notebook robusto per le aziende
Pensato per le necessità del pubblico d'azienda, ASUS Expertbook PM3 abbina uno chassis particolrmente robusto ad un pannello da 16 pollici di diagonale che avantaggia la produttività personale. Sotto la scocca troviamo un processore AMD Ryzen AI 7 350, che grazie alla certificazione Copilot+ PC permette di sfruttare al meglio l'accelerazione degli ambiti di intelligenza artificiale
Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo
Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo
Abbiamo provato per diversi giorni una new entry del mercato italiano, la Gowow Ori, una moto elettrica da off-road, omologata anche per la strada, che sfrutta una pendrive USB per cambiare radicalmente le sue prestazioni
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 15-04-2008, 22:27   #1
stratosfe
Junior Member
 
Iscritto dal: Apr 2008
Messaggi: 25
[JAVA] Algoritmo albero binario..!

Ragazzi ho provato a buttar giù un pò di codice x il metodo di visita dell albero ma nn riesco ad implementare il metodo ke ricevendo due Alberi binari restituisce true se tutti gli elementi dell'albero A sono presenti nell'Albero B...! potete dare un okkiata e darmi qualke consiglio con kodice?

Metodo di visita dell'Albero:
private void visita(AlberoB A,int livello,int i) {
if (i==livello) {
System.out.println(a.val());
return;
}
i++;
if (a.sin()!=null) {
visita(a.sin(),livello,i);
if (a.des()!=null) {
visita(a.des(),livello,i);
}
}
stratosfe è offline   Rispondi citando il messaggio o parte di esso
Old 15-04-2008, 23:28   #2
Albi89
Senior Member
 
Iscritto dal: May 2004
Città: Napoli
Messaggi: 773
Penso che la procedura sia abbastanza semplice.
Partendo da un algoritmo per la visita ordinata, per ogni elemento esegui una ricerca con una funzione che ritorna true se l'elemento è presente nel secondo albero.
Se non viene mai riportato false, la tua funzione ritornerà true, altrimenti al primo false saprai che il predicato originario, ossia la presenza nel secondo albero di tutti gli elementi del primo, è senza dubbio falso
__________________
If builders built buildings the way programmers wrote programs, then the first woodpecker that came along would destroy civilization.
--Gerald Weinberg
Albi89 è offline   Rispondi citando il messaggio o parte di esso
Old 15-04-2008, 23:32   #3
stratosfe
Junior Member
 
Iscritto dal: Apr 2008
Messaggi: 25
e kome faccio??! Il primo albero lo devo mettere in una LinkedList e scorrerlo kon un iteratore?? La mia difficoltà è questa..! nn puoi buttare un pò di codice su questa funzione di verifica?
stratosfe è offline   Rispondi citando il messaggio o parte di esso
Old 15-04-2008, 23:42   #4
Albi89
Senior Member
 
Iscritto dal: May 2004
Città: Napoli
Messaggi: 773
Quote:
Originariamente inviato da stratosfe Guarda i messaggi
e kome faccio??! Il primo albero lo devo mettere in una LinkedList e scorrerlo kon un iteratore?? La mia difficoltà è questa..! nn puoi buttare un pò di codice su questa funzione di verifica?
Non conosco affatto il linguaggio Java, ma cercherò comunque di esprimere quello che è l'approccio che userei...

Anzitutto definire una struttura nodo, composta da un elemento, un puntatore al nodo di sinistra e un puntatore al nodo di destra (ovviamente nulli se non sono presenti nodi discendenti).

Poi, una funzione booleana in_albero che accetta come parametro un puntatore a struttura nodo: se il tuo albero è ordinato la funzione deve soltanto scorrere l'albero "svoltando" opportunamente a destra e a sinistra: quando e se incontra un puntatore nullo, significa che l'elemento non è presente.

Detto ciò, la nostra funzione di confronto deve semplicemente essere un ritocco a una classica funzione di visita ordinata, solitamente strutturata in maniera ricorsiva del tipo "Stampa a sinistra, mostra a schermo elemento, stampa a destra", dove stampa a... significa richiamare la funzione passando come parametro il puntatore al nodo di sinistra/destra.
La funzione opportunamento modificata accetta come parametro anche un secondo nodo principale e, al posto del "mostra a schermo elemento", esegue un in_albero (la funzione di ricerca di prima) passando come elemento l'elemento corrente del primo albero, e come albero il secondo albero in cui vogliamo verificare la presenza dell'elemento.

Penso che, conoscendo il linguaggio sicuramente meglio di me, non dovresti avere problemi a buttare giù il codice che ti serve
__________________
If builders built buildings the way programmers wrote programs, then the first woodpecker that came along would destroy civilization.
--Gerald Weinberg
Albi89 è offline   Rispondi citando il messaggio o parte di esso
Old 15-04-2008, 23:55   #5
stratosfe
Junior Member
 
Iscritto dal: Apr 2008
Messaggi: 25
Ok grazie mille!!! x fare questo metodo ho a disposizione le interfaccie int val() ke restituisce la radice dell albero; Albero sin() ke restituisce il sottoalbero di sinistra e Albero des(); gli alberi nn sono ordinati kmq..! Molte grazie..!! vediamo se riesko a farlo girare..!!
stratosfe è offline   Rispondi citando il messaggio o parte di esso
Old 16-04-2008, 00:03   #6
stratosfe
Junior Member
 
Iscritto dal: Apr 2008
Messaggi: 25
Un ultima kosa!! La struttura Nodo la posso eliminare visto ke l esercizio mi da già quei metodi dell interfaccia ke ti ho scritto prima?
stratosfe è offline   Rispondi citando il messaggio o parte di esso
Old 16-04-2008, 12:06   #7
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2780
Ma il testo dell'esercizio qual è? Da qualche parte la classe Nodo dovrebbe essere definita (penso sia definita nell'esercizio).
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 16-04-2008, 13:32   #8
stratosfe
Junior Member
 
Iscritto dal: Apr 2008
Messaggi: 25
Ekko la traccia :
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 maggiore(AlberoBinario a, AlberoBinario b);
che restituisce vero se e solo se tutti i valori contenuti nell’albero a sono contenuti
anche nell’albero b. (si ricorda che si possono implementare tutti i metodi di
appoggio che si ritiene utili per l’implementazione del metodo maggiore.
stratosfe è offline   Rispondi citando il messaggio o parte di esso
Old 16-04-2008, 15:14   #9
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2780
Mmm quindi tu sai che un'implementazione di un albero binario ha sicuramente quei metodi e tu, sempre in quella implementazione, devi aggiungere il metodo maggiore. Giusto?
In quel caso puoi anche non tenere conto dell'esistenza dei nodi e fare tutto con quello che ti è stato fornito. Solo una cosa, visto che tutte le operazioni che dovrai eseguire nel metodo le farai sui due parametri puoi anche dichiarare il metodo static.
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 16-04-2008, 16:11   #10
stratosfe
Junior Member
 
Iscritto dal: Apr 2008
Messaggi: 25
Si solo con quello ke mi è stato fornito..! Guarda io ti scrivo il codice ke ho generato io solo ke mi fa il confronto tra gli elementi dei due alberi nelle stesse posizioni..! io lo dovrei fare anke x posizioni diverse e nn mi viene..!! tu mi sai aiutare? intanto ti scrivo il codice :

static boolean maggiore(AlberoBinario a, AlberoBinario b) {
if (a!=null&&b!=null)
return true;
if (a.val()==b.val())
return true;
return maggiore(a.destro(),b.destro()) && maggiore(a.sinistro(),b.sinistro());
}
stratosfe è offline   Rispondi citando il messaggio o parte di esso
Old 16-04-2008, 16:31   #11
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da stratosfe Guarda i messaggi
Si solo con quello ke mi è stato fornito..! Guarda io ti scrivo il codice ke ho generato io solo ke mi fa il confronto tra gli elementi dei due alberi nelle stesse posizioni..! io lo dovrei fare anke x posizioni diverse e nn mi viene..!! tu mi sai aiutare? intanto ti scrivo il codice :

static boolean maggiore(AlberoBinario a, AlberoBinario b) {
if (a!=null&&b!=null)
return true;
if (a.val()==b.val())
return true;
return maggiore(a.destro(),b.destro()) && maggiore(a.sinistro(),b.sinistro());
}
Se posso permettermi... segui il consiglio che ti e' stato dato, sia dal testo sia da qualcun altro, qui nel forum: spezza il problema.
1 - scrivi una funzione che controlla se un dato elemento e' presente in un albero binario;
2 - utilizza la funzione precedente, scandendo tutti gli elementi dell'albero di partenza, per vedere se sono presenti in quello di arrivo. Se non ne trovi almeno uno, ritorni false altrimenti true.

Le due funzioni, cosi' separate, sono semplicissime da realizzare
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 16-04-2008, 16:35   #12
stratosfe
Junior Member
 
Iscritto dal: Apr 2008
Messaggi: 25
Ma per vedere se l'elemento è presente in un albero come posso fare?? Devo passare uno dei due alberi ad una Lista?
stratosfe è offline   Rispondi citando il messaggio o parte di esso
Old 16-04-2008, 16:50   #13
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da stratosfe Guarda i messaggi
Ma per vedere se l'elemento è presente in un albero come posso fare?? Devo passare uno dei due alberi ad una Lista?
No, dai!

Scrivi un metodo chiamato
boolean isNodeInTree (int v, AlberoBinario tree)

il quale fa una ricerca dell'elemento v nell'albero tree.
La ricerca e' semplicemente una visita all'albero. Immagino che ti abbiano gia' spiegato tanti algoritmi per la visita di un albero. Usa quello che ti piace di piu' oppure, se l'albero e' un albero binario di ricerca, puoi sfruttare la ricerca dicotomica ed essere piu' veloce (il tuo testo non specifica se sei in questa condizione).
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 16-04-2008, 16:59   #14
stratosfe
Junior Member
 
Iscritto dal: Apr 2008
Messaggi: 25
No nnè di ricerca..!! Posso usare la visita anticipata quindi..! la funzione ke mi hai scritto tu riceve come parametri l'intero v ke dovrebbe essere l'elemento di uno dei due alberi, giusto? ma se è kosi come faccio a passare l'intero se ho un albero?
stratosfe è offline   Rispondi citando il messaggio o parte di esso
Old 16-04-2008, 17:04   #15
stratosfe
Junior Member
 
Iscritto dal: Apr 2008
Messaggi: 25
La funzione isNodeTree l ho fatta kosi..

boolean isNodeTree (int v,AlberoBinario tree) {
if (tree==null)
return false;
if (tree.val()==v)
return true;
return isNodeTree(tree.destro(),v)|| isNodeTree(tree.sinistro(),v);

è giusto?
stratosfe è offline   Rispondi citando il messaggio o parte di esso
Old 16-04-2008, 19:00   #16
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2780
Quote:
Originariamente inviato da stratosfe Guarda i messaggi
La funzione isNodeTree l ho fatta kosi..

boolean isNodeTree (int v,AlberoBinario tree) {
if (tree==null)
return false;
if (tree.val()==v)
return true;
return isNodeTree(tree.destro(),v)|| isNodeTree(tree.sinistro(),v);

è giusto?
Sì è giusto. Hai fatto però un errore alla fine quando fai la chiamata ricorsiva, hai messo i parametri al contrario (ma te l'avrebbe detto anche il compilatore).
Anche questo metodo lo puoi dichiarare static.
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 16-04-2008, 20:51   #17
stratosfe
Junior Member
 
Iscritto dal: Apr 2008
Messaggi: 25
Ok e fatto questo metodo ora come faccio a fare il metodo maggiore ke alla fine è quello ke mi serve? static boolean maggiore(AlberoBinario A,AlberoBinario B) {..} ..!
Devo fare la visita?
stratosfe è offline   Rispondi citando il messaggio o parte di esso
Old 16-04-2008, 23:00   #18
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2780
Fai come ti hanno già detto: fai una visita di un albero (anticipata, posticipata... non importa) per ogni nodo che stai visitando richiami isNodeTree sull'altro albero, se questo torna false devi tornare false, altrimenti continui la visita. Se arrivi alla fine della visita torni true.
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 16-04-2008, 23:10   #19
stratosfe
Junior Member
 
Iscritto dal: Apr 2008
Messaggi: 25
Quindi finendo st esercizio sarebbe kosi..!
static boolean presente (AlberoB albero,int v) {
if(albero==null)
return false;
if(albero.val()==v)
return true;
return presente(albero.destro(),v) || presente (albero.sinistro(),v);
}

static boolean maggiore (AlberoB A,AlberoB B) {
if (A==null && B==null)
return true;
return presente(A.sinistro(),B) || presente (A.destro(),B) || presente(A.val(),B);
return true;
}

è giusto? se nn lo è dove sbaglio?
stratosfe è offline   Rispondi citando il messaggio o parte di esso
Old 16-04-2008, 23:16   #20
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2780
Quote:
Originariamente inviato da stratosfe Guarda i messaggi
Codice:
static boolean maggiore (AlberoB A,AlberoB B) {
   if (A==null && B==null)
      return true;
   return presente(A.sinistro(),B) || presente (A.destro(),B) || presente(A.val(),B);
   return true;
}
è giusto? se nn lo è dove sbaglio?
Usa il tag CODE per favore.
Questo codice non ha senso perché:
1) Dov'è che fai la visita?
2) L'ultimo return che hai messo è irraggiungibile
3) A presente come secondo parametro devi passare un int, non un AlberoB
4) Hai provato a compilarlo? Avresti evitato i punti 2 e 3
wingman87 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice Recensione DJI Mini 5 Pro: il drone C0 ultra-leg...
ASUS Expertbook PM3: il notebook robusto per le aziende ASUS Expertbook PM3: il notebook robusto per le ...
Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo Test ride con Gowow Ori: elettrico e off-road va...
Recensione OnePlus 15: potenza da vendere e batteria enorme dentro un nuovo design   Recensione OnePlus 15: potenza da vendere e batt...
AMD Ryzen 5 7500X3D: la nuova CPU da gaming con 3D V-Cache per la fascia media AMD Ryzen 5 7500X3D: la nuova CPU da gaming con ...
'Vibe coding? Sì, ma non toccate ...
Cloudflare si scusa e spiega cos'è...
Obbligati ad acquistare una scheda madre...
GTA VI su PC? La data non c'è, ma...
Monopattini elettrici, a un anno dal dec...
Tesla Robotaxi, autista di sicurezza si ...
Samsung Galaxy S26: svelate le combinazi...
Microsoft Ignite: arriva Edge for Busine...
OPPO e Lamine Yamal uniscono sport e tec...
Microsoft, NVIDIA e Anthropic siglano un...
SpaceX potrebbe comunicare alla NASA rit...
Scoperte cavità sotterranee scava...
OnePlus anticipa l'arrivo di due nuovi p...
DJI lancia Osmo Action 6: la prima actio...
NASA: conferenza stampa sulla cometa int...
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: 07:04.


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