Impesud Technology

Design, Programming and Computer…


About me - Buy our products - Contact me - I love Perú

  • About Me

    • Erick Jara

    • Erick is a IT Consultant and student at University of Milano-Bicocca (Italy), who loves technology, programming, blogging, Perù and Italy and all things Windows, Linux and Solaris.
    • More about me
    • Contact me
  • Recent Comments

    • George on SayWhat: adding amusing cartoon speech bubbles to a picture
    • Algoritmi in Java: Implementazione dinamica di una Pila usando un Array | Impesud Technology on Algoritmi in Java: Implementazione dinamica di una Pila usando una Lista
    • stefania on Applet: Login in Java
    • eddypedro on Guida di Google AdSense in italiano
    • lula on New Wordpress Plugin in my Blog: Buy Me a Beer
  • Categories

    • Advertisement (2)
    • Blogger (2)
    • Browsers (4)
    • Curiosities (3)
    • Design (4)
    • Economy (1)
    • Events (2)
    • Films (23)
    • Flash Games (2)
    • Google (15)
    • Hacking (3)
    • Hardware (6)
    • Linux (3)
    • Live Video (2)
    • Mac OSX (1)
    • MSN Messenger (5)
    • News (33)
    • Open Source (4)
    • Poetries (4)
    • Politics (2)
    • Programming (2)
      • Java (12)
      • Python (1)
      • Ruby (1)
      • Visual Basic for Applications (1)
      • Visual Studio (1)
    • Security (2)
    • Software (9)
    • Special Day (1)
    • Sun Solaris (1)
    • Technology (13)
    • Travels (2)
    • Twitter (2)
    • Video Games (3)
    • Videobloggers (3)
    • Web Marketing (10)
    • Web Tools (28)
    • Windows Vista (5)
    • Wordpress (8)
  • Archives

    • June 2008 (1)
    • May 2008 (9)
    • April 2008 (2)
    • March 2008 (4)
    • January 2008 (2)
    • December 2007 (2)
    • November 2007 (9)
    • October 2007 (8)
    • September 2007 (5)
    • August 2007 (5)
    • July 2007 (14)
    • June 2007 (18)
    • May 2007 (19)
    • April 2007 (19)
    • March 2007 (21)
    • February 2007 (11)
    • January 2007 (9)
    • December 2006 (1)
  • Essere Blogger è un lavoro durissimo.Offrimi una birra,please (Solo $2)

  • Network Blogs

    • Impesud Technology
    • Impesud TV
  • Recent Posts

    • Algoritmi in Java: Alberi - Parte 1
    • Algoritmi in Java: Implementazione dinamica di una Coda usando un Array
    • Algoritmi in Java: Implementazione dinamica di una Coda usando una Lista
    • Algoritmi in Java: Implementazione dinamica di una Pila usando un Array
    • Algoritmi in Java: Implementazione dinamica di una Pila usando una Lista
    • Algoritmi in Java: Esercizi di Ricorsione - Parte 2
    • Algoritmi in Java: Esercizi di Ricorsione - Parte 1
    • Trasformando Windows XP in Mac OS X
    • Installando Sun Solaris 10 in VMware WorkStation 6.0 - Parte 1
    • La simpática videoblogger Malevolia
  • Advertisers



Algoritmi in Java: Alberi - Parte 1

05-Jun-08

E finalmente dopo aver spiegato le definizioni e codici delle pile e code, siamo arrivato al tema degli alberi. Prima di iniziare vi darò alcune definizioni principali e le spiegherò nel modo più semplice possibile:

  • Albero: Struttura formata da un primo elemento detto radice a cui sono collegati uno o più sottoalberi.
  • SottoAlbero: Struttura formata da un primo elemento detto radice a cui sono collegati uno o più sottoalberi.
  • Nodi: Sono gli elementi fondamentali di un albero. Si dividono in nodi interni e foglie.
  • Nodi Interni: Sono i nodi che sono collegati a uno o più discendenti (figli).
  • Foglie: Sono i nodi che non sono collegati a nessun discendente.
  • Ramo: E' il legame che lega un nodo con un suo discendente.
  • Padre: E' il nodo interno a cui è collegato almeno un altro elemento detto discendente o figlio.
  • Figlio: Sono i nodi che non si possono raggiungere attraverso i collegamenti a partire da un nodo interno. Ogni nodo interno ha almeno un figlio. Il numero massimo di Figlio dipende dalla tipologia dell'Albero.
  • Path (Percorso): Sono i rami che bisogna percorrere per raggiungere un elemento partendo dalla radice.
  • Livello: E' il numero di rami che bisgona percorrere per raggiungere un elemento partendo dalla radice. E' la lunghezza del percorso.
  • Altezza (Profondità): E' il massimo numero di rami che bisogna percorrere per una foglia. E' il percorso più lungo.

Esistono diverse tipologie di alberi (albero binario, albero ternario, albero quadernario...albero n-ario) ma quello che ci interessa in particolare sono gli alberi binari. Dentro a questa tipologia si trovano gli alberi binari di ricerca.

Alberi Binari di Ricerca:

E' un albero binario con una particolarità: Per tutti i nodi i valori contenuti nel sottoalbero sinistro sono minori dei valori contenuti nel sottoalbero destro.

Albero Binario di Ricerca

Visita di un Albero:

E' l'accesso alle informazioni passando per ogni nodo una sola volta. Si utilizza un procedimento di tipo ricorsivo.

  • Visita Anticipata o Pre-Ordine: Stampa la radice, dopodichè effettua una visita anticipata nel sottoalbero sinistro e poi nel sottoalbero destro. Facendo questo tipo di visita nell'albero precedente abbiamo: 8-4-2-6-12-10-13
  • Visita Simmetrica o In-Ordine: Effettua una visita simmetrica nel sottoalbero sinistro, dopodichè stampa la radice e poi effettua una visita simmetrica nel sottoalbero destro. Facendo questo tipo di visita nell'albero precedente abbiamo: 2-4-6-8-10-12-13
  • Visita Posticipata o Post-Ordine: Effettua una visita posticipata nel sottoalbero sinistro, dopodichè effettua una visita posticipata nel sottoalbero destro e poi stampa la radice. Facendo questo tipo di visita nell'albero precedente abbiamo: 2-6-4-10-13-12-8

In seguito pubblico un esempio che abbiamo elaborato con Carlos Alva:

PLAIN TEXT
JAVA:
  1. public class Tree {
  2.     Tree left,right,root;
  3.     int val;
  4.     Tree(int v,Tree a,Tree b){
  5.         val=v;
  6.         left=a;
  7.         right=b;
  8.     }
  9.     Tree(int n){
  10.         this.val=n;
  11.         this.left=null;
  12.         this.right=null;       
  13.     }
  14.     int getval(){
  15.         return this.val;
  16.     }
  17.     Tree getleft(){
  18.         return this.left;
  19.     }
  20.     Tree getright(){
  21.         return this.right;
  22.     }
  23.     public void Add(Tree T, int n){
  24.             if(n<T.val){
  25.                 if(T.left==null){
  26.                     Tree t=new Tree(n);
  27.                     T.left=t;
  28.                     T.left.root=T;
  29.                 }else{
  30.                 Add(T.left,n);
  31.                 }
  32.             }else {
  33.                 if(T.right==null){
  34.                     Tree t=new Tree(n);
  35.                     T.right=t;
  36.                     T.right.root=T;
  37.                 }else{
  38.                 Add(T.right,n);
  39.                 }
  40.             }
  41.     }
  42. }

>

PLAIN TEXT
JAVA:
  1. import java.util.*;
  2.  
  3. public class Stampa {
  4.  
  5.     public static void Preordine(Tree t){
  6.        
  7.         if(t!=null){
  8.             System.out.print(t.val+" ");
  9.             Preordine(t.left);
  10.             Preordine(t.right);
  11.         }
  12.     }
  13.         public static void Inordine(Tree t){
  14.  
  15.             if(t!=null){
  16.                 Inordine(t.left);
  17.                 System.out.print(t.val+" ");
  18.                 Inordine(t.right);
  19.         }   
  20.     }
  21.         public static void Postordine(Tree t){
  22.             if(t!=null){
  23.                 Postordine(t.left);
  24.                 Postordine(t.right);
  25.                 System.out.print(t.val+" ");
  26.         }      
  27.     }
  28.  
  29.     public static void main(String[] args) {
  30.         Tree t=new Tree(72);
  31.         int x[]={51,30,19,3,27,45,69,74,99,80};
  32.         for(int i=0;i<=x.length-1;i++){
  33.         t.Add(t,x[i]);
  34.         }
  35.         Stampa.Preordine(t);
  36.         Stampa.Inordine(t);
  37.         Stampa.Postordine(t);
  38.         }
  39. }

Per oggi penso che sia sufficiente come prima parte, nella seconda spiegherò altri metodi che potranno essere aggiunti all'albero di ricerca. Se avete dubbi, domande potete contattarmi quando volete :D , sia lasciando un commento o andando all'area Contact-me

If you liked this post, buy me a beer - Si te ha gustado este artículo,cómprame una cervezita - Se ti è piaciuto questo articolo, comprami una birra

Popularity: 23% [?]

Share This

Filed in Java | Permalink | Comments (0) »

Algoritmi in Java: Implementazione dinamica di una Coda usando un Array

27-May-08

Continuo ancora a pubblicare gli algoritmi in Java, giacchè spero di "affrontarli" il meglio possibile nel prossimo esame. Facendo questo "sforzo sopraumano" spero di poter anche aiutarvi a capirli :D . Con questo articolo chiudo il tema dell'implementazioni di pile e code.

PLAIN TEXT
JAVA:
  1. /* AUTORE: Erick Jara :D */
  2.  
  3. public class UsaCodaconArray
  4. {
  5.     public static void main(String[] args){
  6.         CodaconArray c = new CodaconArray(5);
  7.         CodaconArray c1 = new CodaconArray(5);
  8.         System.out.println("La coda e' vuota? " + c.codavuota());
  9.         System.out.println("La coda e' piena? " + c.codapiena());
  10.         c.enqueue(4);                           // Inserisco 4 nella coda dell'oggetto c
  11.         c.enqueue(6);                           // Inserisco 6 nella coda dell'oggetto c
  12.         c.enqueue(7);                           // Inserisco 7 nella coda dell'oggetto cc
  13.         c1.enqueue(8);                  // Inserisco 8 nella coda dell'oggetto c1
  14.         c1.enqueue(10);         // Inserisco 10 nella coda dell'oggetto c1
  15.         System.out.println("Coda 1: "+c.toString());    // Stampo i valori presenti nell'oggetto c: 4 - 6 - 7 - 0 - 0
  16.         System.out.println("Coda 2: "+c1.toString());   // Stampo i valori presenti nell'oggetto c1: 8 - 10 - 0 - 0 - 0
  17.         System.out.println(c.top());                    // Visualizzo primo elemento in testa dell'oggetto c
  18.         c.dequeue();                                    //Tolgo l'elemento in testa  -> Nuova struttura dell'oggetto c: 6 - 7
  19.         System.out.println(c.top());                    // Visualizzo primo elemento in testa dell'oggetto c
  20.         c.dequeue();                                    //Tolgo l'elemento in testa -> Nuova struttura dell'oggetto c: 7
  21.         System.out.println(c.top());                    // Visualizzo primo elemento in testa dell'oggetto c
  22.         System.out.println(c1.top());               // Visualizzo primo elemento in testa dell'oggetto c1
  23.     }
  24. }
PLAIN TEXT
JAVA:
  1. public class CodaconArray
  2. {
  3.      private int[] elementi;
  4.      private int numElementi;
  5.      private int head;  // testa
  6.      private int tail;  // coda
  7.     public CodaconArray(int capacita)
  8.     {
  9.         numElementi = capacita;
  10.         elementi = new int[capacita];
  11.         head = 0;
  12.         tail = 0;
  13.     }
  14.     public void enqueue(int n){
  15.         if (codapiena()) System.out.println("Coda piena, non e' possibile inserire un elemento");
  16.             else {elementi[tail] = n;     // inserisce n in coda
  17.               tail = (tail+1)%numElementi;  // punta al prox elem libero
  18.               }
  19.         return;
  20.         /* Algoritmo Accoda(Q,x)
  21.         Q[Tail[Q]]=x
  22.         IF Tail[Q]=Length[Q]
  23.         THEN Tail[Q]=1
  24.         ELSE Tail[Q]=Tail[Q]+1 */
  25.     }
  26.     public void dequeue(){
  27.         if (!codavuota()) head = (head+1)%numElementi;
  28.             else {System.out.println("Coda vuota, non e' possibile cancellare nulla");
  29.             }
  30.         return;
  31.         /* Algoritmo Estrai-da-Coda(Q)
  32.         x=Q[Head[Q]]
  33.         IF Head[Q]=Length[Q]
  34.         THEN Head[Q]=1
  35.         ELSE Head[Q]=Head[Q]+1
  36.         return x */
  37.     }
  38.     public int top(){
  39.         if (!codavuota()) return(elementi[head]);
  40.         else { System.out.println("Coda vuota, non e' possibile trovare il primo elemento");
  41.                return(-1);
  42.          }
  43.     }
  44.     public boolean codavuota(){
  45.         return(head==tail);
  46.     }
  47.     public boolean codapiena(){
  48.         return((tail+1)%numElementi==head); // lascia sempre una posizione vuota nel vettore
  49.     }
  50.     public String toString()  {
  51.         String temp="(CODA)[INIZIO]-";
  52.         for ( int i = 0; i <numElementi; i++ )
  53.             temp+=elementi[i] + "-";
  54.         return temp+"[FINE]";
  55.     }
  56. }

If you liked this post, buy me a beer - Si te ha gustado este artículo,cómprame una cervezita - Se ti è piaciuto questo articolo, comprami una birra

Popularity: 24% [?]

Share This

Filed in Java | Permalink | Comments (0) »

Algoritmi in Java: Implementazione dinamica di una Coda usando una Lista

27-May-08

Una coda è una struttura dati che utilizza la disciplina FIFO ( First In First Out ). Anche le code possono essere implementate, come le pile, o in modo illimitato, con delle liste concatenate, o in modo limitato, con un array o vettore. In questo caso vedremo solo l’utilizzo di una coda illimitata.
Le operazioni che si possono eseguire su una coda sono quindi le seguenti:

  • enqueue (x) : inserisce l’elemento x in fondo alla coda;
  • dequeue ( ) : elimina l’elemento in testa alla coda senza ritornarlo;
  • front ( ) : restituisce l’elemento in testa alla coda senza rimuoverlo;
  • isEmpty ( ) : indica se la coda è vuota;

Per il momento pubblico il codice della implementazione dinamica di una coda usando una lista, il prossimo articolo corrisponderà a quello con l'implementazione usando un array.

PLAIN TEXT
JAVA:
  1. class Nodo{
  2.     private int dato;
  3.     private Nodo next;
  4.     public void enqueue(int n)
  5.     {
  6.         next = new Nodo(n);
  7.     }
  8.     public Nodo dequeue(Nodo primo)
  9.     {
  10.         primo = primo.next;
  11.         return primo;
  12.     }
  13.     public int front()
  14.     {
  15.         return dato;
  16.     }
  17.     public Nodo(int n)
  18.     {
  19.       dato = n;
  20.       next = null;
  21.     }
  22. }
PLAIN TEXT
JAVA:
  1. /*
  2. Queue (Coda)
  3. 1) Una Coda è un insieme dinamico in cui l’elemento rimosso dall’operazione di cancellazione è predeterminato.
  4. 2) In una Coda questo elemento è l’elemento che per più tempo è rimasto nell’insieme.
  5. 3) Una Coda implementa una lista di tipo “first in,first out” (FIFO)
  6. 4) Possiede una testa (Head) ed una coda (Tail).
  7. 5) Quando si aggiunge un elemento, viene inserito in coda al posto referenziato da Tail.
  8. 6) Quando si estrae un elemento, viene estratto dalla testa.
  9. */
  10.  
  11. class Coda
  12. {
  13.      private Nodo head;
  14.      private Nodo tail;
  15.     public Coda()
  16.     {
  17.         head = null;
  18.         tail = null;
  19.     } 
  20.     public void enqueue(int n){   //  Inserimento: enqueue (x)
  21.         if (vuota()) {          // inserisce l’elemento x in fondo alla coda
  22.             head = new Nodo(n);
  23.             tail = head;
  24.         }
  25.         else {
  26.             tail.enqueue(n);
  27.         }
  28.     }
  29.     public void dequeue(){        // Cancellazione: dequeue ( )     
  30.     if (!vuota()) {      // cancella l’elemento in testa alla coda senza ritornarlo
  31.         head = head.dequeue(head);
  32.             if (head==null)
  33.             tail = null;
  34.         }
  35.         else System.out.println("Coda vuota, non e' possibile cancellare nulla");
  36.     }
  37.     public int front(){     // Visualizzazione primo elemento: front ( )
  38.         if (!vuota()) {                 // restituisce l’elemento in testa alla coda senza rimuoverlo
  39.                 return(head.front());
  40.             }
  41.         else {
  42.             System.out.println("Coda vuota, non e' possibile trovare il primo elemento");
  43.             return(-1);
  44.          }
  45.     }
  46.     public boolean vuota(){    // Altre operazioni: Coda-Vuota()
  47.         return(tail==null);    // verifica se la Coda è vuota (ritorna True se la Coda è vuota)
  48.     }
  49.     public static void main(String[] args){
  50.         Coda c = new Coda();
  51.         Coda c1 = new Coda();
  52.         c.enqueue(5);
  53.         c.enqueue(3);
  54.         System.out.println(c.front());
  55.         c1.enqueue(9);
  56.         c1.enqueue(6);
  57.         c.dequeue();
  58.         System.out.