Proggetto in java aiutooo!!

paolo171
Qualcuno mi puo fare questo progetto di algoritmi in java... non so proprio come farlo grazie in anticipo!!
Negli alberi può capitare di non sapere a priori il numero dei figli di ciascun nodo. Per la loro memorizzazione e' possibile associare ad ogni nodo dell'albero generico un puntatore al suo primo figlio e un puntatore al fratello successivo. Dopo aver realizzato opportunamente una classe NodoPFFS, utilizzarla per la realizzazione di una classe AlberoPFFS che implementi i metodi per le seguenti operazioni caratteristiche degli alberi:

01) restituire il numero di nodi presenti nell'albero;
02) restituire il numero dei figli di un nodo;
03) restituire il contenuto di un nodo;
04) cambiare il contenuto di un nodo;
05) inserire la radice in un albero vuoto e restituirla;
06) inserire un nodo nuovo v come figlio di un nodo u già presente nell’albero e restituirlo;
07) inserire una nuova radice in un albero non vuoto in modo che la vecchia radice sia sua figlia e restituirla;
08) restituire la radice dell'albero, o null se esso e' vuoto;
09) restituire il padre di un nodo o null se esso e' la radice;
10) restituire la lista, eventualmente vuota, dei figli di un nodo;
11) inserire nell'albero un sottoalbero B in modo che la radice di B sia figlia di un nodo u dell'albero;
12) attraversare l'albero in profondità per realizzare una visita anticipata e restituire la lista dei nodi così visitati;
13) attraversare l'albero in ampiezza per realizzare una visita per livelli e restituire la lista dei nodi così visitati;

Fornire inoltre un metodo main testALberiPFFS per testare i metodi implementati.

In una relazione scritta illustrare ciascun metodo, senza tralasciare di discuterne il costo.
Commentare inoltre le scelte fatte per le variabili di ciascuna classe e per eventuali strutture dati utilizzate.
La relazione inoltre deve contenere il listato del codice sviluppato.

Risposte
_luca.barletta
"paolo17":
Qualcuno mi puo fare questo progetto di algoritmi in java... non so proprio come farlo grazie in anticipo!!


[mod="LucaB"]
Questa richiesta è totalmente in contrasto con le finalità di questo forum.
Ti consiglio di rileggere il regolamento.
[/mod]

giozh
qual'è la parte che non capisci dell'esercizio???? almeno metti qualche classe che hai già fatto tu (magari commentata) che così ti possiamo aiutare meglio. anche perchè dubito che c'è chi ti possa fare l'esercizio completo, dato che richiede un pò di tempo!

paolo171
L'inizio magari.... non so come iniziare almeno mi faccio un idea grazieeee...!!

apatriarca
Compra il seguente libro e troverai tutto quello che ti serve per questo esercizio e molto altro: http://www.ibs.it/code/9788871921693/se ... -java.html

paolo171
ok grazieeeee mille!!

giozh
intanto ti puoi fare una classe nodo, che rappresenta il nodo generico, che conterrà un elemento che rappresenta il valore che assegnerai al nodo, e metterai una list di nodi figli .
aggiungi i vari metodi di restituzione del valore del nodo, di quanti figli ha un nodo (chiamando semplicemente il size sulla lista di figli), un metodo per aggiungere un nodo figlio, e per rimuoverlo. la classe albero invece avrà semplicemente il riferimento al nodo radice, e in piu i vari metodi per contare quanti nodi ha un albero etc etc...

paolo171
public class Nodo {

private T elemento;
private Nodo next;

public Nodo(){
elemento=null;
next=null;
}
public Nodo(T e, Nodo n){
elemento=e;
next=n;
}
public T getElemento(){
return elemento;
}
public Nodo getNext(){
return next;
}
public void setElemento(T e){
elemento=e;
}
public void setNext(Nodo n){
next=n;
}
}
così va bene come inizio??

giozh
consiglio, usa i tag code, che è meglio, e poi usa l'indentazione, almeno il codice è piu leggibile (ora con questa classetta non c'è problema, ma con programmi piu grandi l'indentazione serve eccome)...
allora la classe che hai fatto ora non ti aiuta molto a fare un albero, perchè hai solo il riferimento ad un unico nodo. in questo caso ottieni una lista di oggetti nodi e non un albero. devi conservare una List (arraylist, linkedlist o quello che ti pare) di nodo. al costruttore che inizializza tutto a null non è molto utile, sarebbe preferibile passargli solo l'elemento T e inizializzare la lista che ti ho detto sopra. ovviamente di conseguenza il set next e il get next non vanno bene. scusa la domanda un pò diretta, ma sai almeno com'è fatto un albero (binario o n-ario che sia)???

paolo171
ho iniziato da poco a programmare e a studiare quindi molte cose non mi sono chiare...!! grazie comunque per la risposta!!

giozh
allora prima leggiti com'è fatto un albero, e poi riprova a scrivere la classe

apatriarca
Che tu abbia iniziato da poco è abbastanza chiaro, ma hai visto gli alberi a lezione? Prima di lanciarti nella implementazione ti consiglio di leggere con attenzione il testo. Questo genere di esercizi sono spesso molto precisi e in pratica forniscono molte informazioni su come il prof vuole che l'esercizio venga risolto.


Per la loro memorizzazione e' possibile associare ad ogni nodo dell'albero generico un puntatore al suo primo figlio e un puntatore al fratello successivo. Dopo aver realizzato opportunamente una classe NodoPFFS, ...

A parte l'uso improprio del termine puntatore per un progetto in Java, qui ti sta dicendo che nella tua classe nodo dovrai avere una variabile che faccia riferimento al primo figlio e uno che faccia riferimento al prossimo fratello. Inoltre la classe nodo dovrà chiamarsi NodoPFFS. Dopo aver letto questa parte dovresti quindi scrivere meccanicamente qualcosa come il seguente:
public class NodoPFFS<T> {

    private T valore;
    private NodoPFFS<T> primoFiglio;
    private NodoPFFS<T> prossimoFratello;

    // qui inserisci tutti i getter e setter che desideri..
}

Nota che altri campi come il numero dei figlio potrebbero essere molto utili.

@giozh: non sono certo che sia permesso l'uso delle liste in questo caso. Secondo me il prof desidera che venga implementata anche quella. Ma il testo è secondo me ambiguo in alcune parti. Molte dei metodi che ha elencato hanno infatti senso più nella classe nodo che nell'albero, ma sono elencate tutte insieme.

giozh
infatti da quello che ho capito io, quello è un elenco di operazioni che possono essere svolte su un albero nella sua interezza e su ogni specifico nodo. credo stia allo studente capire quale metodo va scritto in quale classe

paolo171
Grazie a tutti.... purtroppo sono all'inizio molte cose non mi sono chiare mi toccherà studiare un bel po... e voi mi avete aiutato abbastanza, davvero Grazie di cuore!!!

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.