La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Esercitazione sull’ ordinamento 20 maggio 2003

Presentazioni simili


Presentazione sul tema: "Esercitazione sull’ ordinamento 20 maggio 2003"— Transcript della presentazione:

1 Esercitazione sull’ ordinamento 20 maggio 2003 www.dis.uniroma1.it/~donato donato@dis.uniroma1.it

2 Tipi Wrapper semplici / 1 I tipi semplici, come int e char, non fanno parte della gerarchia degli oggetti; vengono passati per valore e non possono essere passati per riferimento. Alcune classi gestiscono solo oggetti (Vector): abbiamo bisogno di una rappresentazione oggetto dei tipi semplici

3 Tipi Wrapper semplici /2 Java offre classi che corrispondono a ciascuno dei tipi semplici. In pratica, queste classi incapsulano (wrap), i tipi semplici all’interno di una classe. Tali classi sono definite all’interno di java.lang.

4 Number La classe astratta Number è la superclasse delle classi BigDecimal, BigInteger, Byte, Double, Float, Integer, Long, and Short. Le sottoclasse di Number devono fornire metodi per convertire il valore del tipo numerico rappresentato in byte, double, float, int, long, e short.

5 Integer /1 La classe Integer incapsula il valore del tipo primitivo int in un oggetto. Un oggetto di tipo Integer contiene un unico campo il cui tipo è int. Costruttori Integer(int value) Integer(String s)

6 Integer /2 Acuni metodi: byte byteValue() int intValue(); long longValue(); String toString(); Metodi simili per le classi Float, Double e Long. Esistono wrapper anche per le classi char e boolean

7 Il nostro wrapper: BaseObject / 1 // Wrapper class for use with generic data structures. public class BaseObject implements Comparable { private int key; public BaseObject(int k) { this.setKey(k); } public void setKey(int k) { key = k; } public int intValue(){ return key; }

8 Il nostro wrapper: BaseObject / 2 public int compareTo(Object bo) { if(!(bo instanceof BaseObject)) throw new ClassCastException(); if(this.key == ((BaseObject)bo).key) return 0; else if(this.key < ((BaseObject)bo).key) return -1; else return 1; } public String toString() { return "" + key + " "; }

9 Il nostro wrapper: BaseObject / 3 public void visit() { System.out.print(this.toString()); } /** * Implements the equals method. * @param anotherBaseObject the second BaseObject. * @return true if the objects are equal, false otherwise. * @exception ClassCastException if anotherBaseObject is not * a BaseObject. */ public boolean equals(BaseObject anotherBaseObject) { return this.key == anotherBaseObject.key; }

10 L’interfaccia comparable Questa interfaccia impone un ordinamento totale sugli oggetti di ciascuna classe che la implementa. Questo ordinamento viene considerato come l’ordinamento naturale della classe ed il metodo compareTo definisce il metodo di confronto. I wrapper di tipi numerici in Java implementano l’interfaccia Comparable. Anche BaseObject!

11 La classe java.util.Random La classe Random è un generatore di numeri pseudo- casuali, così definiti perché non sono altro che sequenze uniformemente distribuite. Definisce i seguenti costruttori: Random(): crea un generatore di numeri casuali. Il suo seme è inizializzato con un valore basato sul tempo corrente: System.currentTimeMillis() Random (long seme): crea un generatore di numeri casuali usando il seme dichiarato. Metodi: int nextInt(int n):Restituisce un valore intero uniformemente distribuito tra 0 (incluso) e lo specificato valore n (escluso), a partire dalla sequenza random corrente.

12 Selection Sort Si cerca il valore più basso e si mette in prima posizione. Si prosegue sui rimanenti elementi in maniera iterativa. Costo = Numero scambi: Caso peggiore (elemento maggiore in prima posizione resto del vettore ordinato): N_swap = 3 (n-1) Caso migliore (vettore ordinato): N_swap = 0

13 Insertion Sort /1 Inserisce l’elemento A[i] nella posizione corretta nel vettore ordinato A[0,…,i-1] Costo = numero confronti Caso peggiore (ordine inverso): Costo = n (n-1) /2 = O(n 2 ) Caso migliore (ordinato): Costo = (n-1) Caso medio: Costo = (n 2 + n - 2)/4

14 Insertion Sort /2 Numero totale di spostamenti: Caso peggiore (ordine inverso): N_swap = (n 2 + 3n - 4)/2 Caso migliore (ordinato): N_swap = 2(n-1) Caso medio: N_swap = (n 2 + 5n - 6)/4

15 Quick Sort Si divide ricorsivamente l’array in due parti, tenendo conto del valore del pivot Il costo viene valutato in base al numero di confronti: Caso peggiore: costo = O(n 2 ) Caso migliore: costo =O (n log n)

16 Testo Esercizio /1 Si confrontino sulle stesse istanze di ingresso le esecuzioni dei seguenti algoritmi di sorting: Selection Sort; Insertion Sort; Quick Sort; Modificare il codice Java, visto a lezione, in modo da tener traccia del numero di confronti eseguiti in ciascuno dei metodi. Negli algoritmi Selection Sort e Insertion Sort si contino anche il numero di swap eseguiti.

17 Testo Esercizio /2 Testare le prestazioni sulle seguenti istanze di input: Vettore di interi generati in maniera casuale; Vettore di interi ordinato in modo decrescente; Vettore di interi ordinato in modo crescente.

18 Testo Esercizio/3 Scrivere un metodo public static int quicksort2(Comparable[] data, int first, int last) che differisce da quicksort perché il pivot è l’elemento in prima posizione Scrivere di conseguenza un metodo public static void quicksort2(Comparable[] data) che sostituisce public static void quicksort(Comparable[] data)


Scaricare ppt "Esercitazione sull’ ordinamento 20 maggio 2003"

Presentazioni simili


Annunci Google