Array (ordinamento) CORDA – Informatica A. Ferrari.

Slides:



Advertisements
Presentazioni simili
Algoritmi di ordinamento
Advertisements

Algoritmi e Strutture Dati
                      Insertion-Sort
Sottoprogrammi: funzioni e procedure
Procedure e funzioni A. Ferrari.
Lez. 31 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Programmazione.
Lez. 41 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Programmazione.
Programmazione dinamica
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Usa la tecnica del.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Ordinamenti ottimi.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Usa la tecnica del.
Heap Sort. L’algoritmo heap sort è il più lento di quelli di ordinamento O(n * log n) ma, a differenza degli altri (fusione e quick sort) non richiede.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Usa la tecnica del.
Esercizi su alberi binari
Mergesort1 if (n>1) /* la collezione contiene almeno due elementi. */ {1. Dividi la collezione in due di circa la metà degli elementi. 2. chiamata ricorsiva.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 4 Ordinamento:
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 4 Ordinamento:
Capitolo 4 Ordinamento Algoritmi e Strutture Dati.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Usa la tecnica del.
Algoritmi e Strutture Dati
Capitolo 4 Ordinamento Algoritmi e Strutture Dati.
CORSO DI PROGRAMMAZIONE II
CORSO DI PROGRAMMAZIONE II Introduzione alla ricorsione
Algoritmi e Strutture Dati Introduzione. Gli argomenti di oggi Analisi della bontà degli algoritmi Modello Computazionale Tempo di esecuzione degli algoritmi.
Progetto di algoritmi: metodologia "Divide et Impera"
Introduzione alla programmazione ll
07/04/2003Algoritmi Ricerca in una sequenza di elementi Data una sequenza di elementi, occorre verificare se un elemento fa parte della sequenza oppure.
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
ITERAZIONE e RICORSIONE (eseguire uno stesso calcolo ripetutamente)
Lalgoritmo MergeSort Applica la strategia del divide et impera Divide: suddivide la sequenza di n elementi data in due sottosequenze di n/2 elementi Impera:
Fondamenti di Informatica1 Ripetizioni di segmenti di codice Spesso è necessario ripetere più volte uno stesso segmento dell'algoritmo (e.g. I/O, elaborazioni.
AN Fondam98 Sorting Ricerca in un vettore ordinato.
Elementi di Informatica di base
Massimo Comun Divisore
Programmazione di Calcolatori
Algoritmi e Strutture Dati
Sistemi e Tecnologie Informatiche Requisiti per la realizzazione di un buon programma.
Esercizi La distanza di hamming tra due interi x e y si definisce come il numero di posizioni nella rappresentazione binaria di x e y aventi bit differenti.
28 ottobre Mergesort F. Bombi 28 ottobre 2003.
Complessità di un algoritmo
Teoria degli algoritmi e della computabilità Terza giornata: Ricerca e ordinamento ottimi. P vs NP, algoritmi di approssimazione, e il potere della randomizzazione.
ALGORITMI a.
Algoritmo che viene utilizzato per elencare gli elementi di un insieme secondo una sequenza stabilita da una relazione d'ordine, in modo che ogni elemento.
Algoritmi di Ordinamento
Algoritmi CHE COS’è UN ALGORITMO di ORDINAMENTO?
A LGORITMI DI ORDINAMENTO Cinzia Reverberi. COS’È UN ALGORITMO? Un algoritmo è un insieme ben ordinato di operazioni non ambigue ed effettivamente calcolabili.
Definizione di un algoritmo
Sistemi e Tecnologie Informatiche Ricorsione Umberto Ferraro Petrillo.
Gli Algoritmi L’algoritmo è un insieme ordinato di operazioni non ambigue ed effettivamente computabili che, quando eseguito, produce un risultato e si.
Ricorsione CORDA – Informatica A. Ferrari Testi da Alessandro Bugatti
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE La Ricorsione Marco D. Santambrogio – Ver. aggiornata al 21 Maggio 2014.
ALGORITMO Un algoritmo è un procedimento che risolve un determinato problema attraverso un numero finito di passi. Un formalismo che permette di rappresentare.
La ricorsione.
GLI ALGORITMI VISIBILE SUL BLOG INFORMATICA ANNO SCOLASTICO 2013 / 2014 GABRIELE SCARICA 2°T.
TECNICA DIVIDE ET IMPERA
Capitolo 13 Cammini minimi: Algoritmo di Floyd e Warshall Algoritmi e Strutture Dati.
Algoritmi e Strutture Dati
Paola Disisto, Erika Griffini, Yris Noriega.  Insieme ordinato di operazioni non ambigue ed effettivamente computabili che, quando eseguito, produce.
CORSO DI PROGRAMMAZIONE II
Lo strano mondo degli algoritmi di ordinamento Algoritmi.
Array (visita e ricerca) CORDA – Informatica A. Ferrari.
1 Informatica Generale Alessandra Di Pierro Ricevimento: Giovedì ore presso Dipartimento di Informatica, Via Buonarroti,
1 Informatica Generale Marzia Buscemi Ricevimento: Giovedì ore , Dipartimento di Informatica, stanza 306-PS o per posta.
Problema dell’Ordinamento. Problema dell’ordinamento Formulazione del problema –Si vuole ordinare una lista di elementi secondo una data proprietà P Esempio:
GLI ALGORITMI DI ORDINAMENTO
L’ALGORITMO Un algoritmo è un procedimento formale che risolve un determinato problema attraverso un numero finito di passi. Un problema risolvibile mediante.
Capitolo 4 Ordinamento: lower bound Ω(n log n) e MergeSort ((*) l’intera lezione) Algoritmi e Strutture Dati.
Algoritmi e Strutture Dati Università di Camerino Corso di Laurea in Informatica (12 CFU) I periodo didattico Emanuela Merelli
Algoritmi e Strutture Dati Luciano Gualà
Transcript della presentazione:

Array (ordinamento) CORDA – Informatica A. Ferrari

Sort  L’ordinamento degli elementi di un array avviene considerando il valore della chiave primaria  Nei nostri esempi le chiavi saranno numeri interi e la relazione d'ordine totale sarà <=  Oltre alla valutazione dell’efficienza saranno anche considerate le proprietà di  stabilità: un algoritmo di ordinamento è stabile se non altera l'ordine relativo di elementi dell'array aventi la stessa chiave primaria  sul posto: un algoritmo di ordinamento opera sul posto se la dimensione delle strutture ausiliarie di cui necessita è indipendente dal numero di elementi dell'array da ordinare

insertsort  Al generico passo l’array è considerato diviso in  una sequenza di destinazione a[0] … a[i - 1] già ordinata  una sequenza di origine a[i] … a[n - 1] ancora da ordinare  L'obiettivo è di inserire il valore contenuto in a[i] al posto giusto nella sequenza di destinazione facendolo scivolare a ritroso, in modo da ridurre la sequenza di origine di un elemento 

Esempio

Esempio numerico

Esercizio 1  Scrivere l’algoritmo di ordinamento di un array utilizzando l’algoritmo insertsort  void insertsort(int a[], int n)  Calcolare la complessità computazionale  nel caso ottimo, pessimo e medio  Definire la classe di complessità asintotica nel caso medio  L’algoritmo prodotto è stabile? Opera sul posto?

selectsort  Selectsort è un algoritmo di ordinamento iterativo che, come insertsort, al generico passo i vede l'array diviso in  una sequenza di destinazione a[0] … a[i - 1] già ordinata  una sequenza di origine a[i] … a[n - 1] ancora da ordinare  L’obiettivo è scambiare il valore minimo della seconda sequenza con il valore contenuto in a[i] in modo da ridurre la sequenza di origine di un elemento 

Esempio

Esempio numerico

Esercizio 2  Scrivere l’algoritmo di ordinamento di un array utilizzando l’algoritmo selectsort  void selectsort(int a[], int n)  Calcolare la complessità computazionale  nel caso ottimo, pessimo e medio  Definire la classe di complessità asintotica nel caso medio  L’algoritmo prodotto è stabile? Opera sul posto?

bubblesort  bubblesort è un algoritmo di ordinamento iterativo che, come insertsort, al generico passo i vede l'array diviso in  una sequenza di destinazione a[0] … a[i - 1] già ordinata  una sequenza di origine a[i] … a[n - 1] ancora da ordinare  L’obiettivo è di far emergere (come se fosse una bollicina) il valore minimo della sequenza di origine confrontando e scambiando sistematicamente i valori di elementi adiacenti a partire dalla fine dell’array, in modo da ridurre la sequenza di origine di un elemento:

Esempio

Esempio numerico

bubbleSort void bubblesort(int a[], int n) { int tmp,i, j; for (i = 1; i < n; i++) for (j = n – 1,j >= i; j--) if (a[j] < a[j - 1]) scambia( j – 1, j ); }

Esercizio 3  Scrivere l’algoritmo di ordinamento di un array utilizzando l’algoritmo bubblesort  void bubblesort(int a[], int n)  Calcolare la complessità computazionale  Definire la classe di complessità asintotica nel caso medio  L’algoritmo prodotto è stabile? Opera sul posto?

bubbleSort  Migliorabile?  Se in una iterazione non avvengono più scambi ???  Esercizio 4  modificare l’algoritmo  rivalutare la complessità computazionale

Merge sort  Algoritmo di ordinamento basato su confronti che utilizza un processo di risoluzione ricorsivo, sfruttando la tecnica del Divide et Impera, che consiste nella suddivisione del problema in sottoproblemi della stessa natura di dimensione via via più piccola.

Merge sort - algoritmo  Se la sequenza da ordinare ha lunghezza 0 oppure 1, è già ordinata. Altrimenti:  La sequenza viene divisa (divide) in due metà (se la sequenza contiene un numero dispari di elementi, viene divisa in due sottosequenze di cui la prima ha un elemento in più della seconda)  Ognuna di queste sottosequenze viene ordinata, applicando ricorsivamente l'algoritmo(impera)  Le due sottosequenze ordinate vengono fuse (combina). Per fare questo, si estrae ripetutamente il minimo delle due sottosequenze e lo si pone nella sequenza in uscita, che risulterà ordinata

Divide et impera

Esempio  Partenza: [ ]  l'algoritmo procede ricorsivamente dividendola in metà successive, fino ad arrivare alle coppie  [10 3] [15 2] [1 4] [9 0]  A questo punto si fondono (merge) in maniera ordinata gli elementi, riunendo le metà:  [3 10] [2 15] [1 4] [0 9]  Al passo successivo, si fondono le coppie di array di due elementi:  [ ] [ ]  Infine, fondendo le due sequenze di quattro elementi, si ottiene la sequenza ordinata:  [ ]

Esempio

Algoritmo  L'algoritmo può essere implementato tramite due tecniche:  Top-Down  Opera da un insieme A e lo divide in sotto insiemi (A_1, A_2) fino ad arrivare all'insieme contenente un solo elemento, per poi riunire le parti scomposte;  Bottom-Up  che consiste nel considerare l'insieme A come composto da un vettore di n sequenze. Ad ogni passo vengono fuse due sequenze.