La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Sistemi e Tecnologie Informatiche

Presentazioni simili


Presentazione sul tema: "Sistemi e Tecnologie Informatiche"— Transcript della presentazione:

1 Sistemi e Tecnologie Informatiche
Problemi di ordinamento Umberto Ferraro Petrillo

2 Obiettivo della lezione
Presenteremo un semplice ed importante problema da risolvere mediante un approccio “ragionato” Introdurremo le nozioni di algoritmo, struttura dati ed efficienza di un algoritmo

3 Domanda … Cosa rende un elenco telefonico di semplice consultazione?
Risposta: I nominativi riportati sono elencati in ordine alfabetico! Come si ordina un elenco di nomi?

4 Problema Compilazione di un elenco dei partecipanti al corso e dei rispettivi voti (ordinato per cognome) Zuzzurellone Zaira 24 Bamonte Giovanni 26 Romano Nadia 21 Medio Massimo 28 Del Monte Francesco 30 Rufolo Carmine 19 Donnaruma Giovanni 27 Santonastaso Maria 25 Abate Alfonso 27

5 Ordinamento di un elenco (ver. 1)
Elenco di partenza Elenco ordinato Zuzzurellone Zaira Bamonte Giovanni Romano Nadia Medio Massimo Del Monte Francesco Rufolo Carmine Donnaruma Giovanni Santonastaso Maria Abate Alfonso Abate Alfonso Bamonte Giovanni Del Monte Francesco Donnaruma Giovanni Medio Massimo Romano Nadia Rufolo Carmine Santonastaso Maria Zuzzurellone Zaira Individua il primo nominativo in ordine alfabetico nell’elenco di input Riponi l’elemento individuato nella posizione 1 dell’elenco ordinato ed eliminalo dall’elenco di partenza Riponi l’elemento individuato nella posizione 2 dell’elenco ordinato ed eliminalo dall’elenco di partenza ….

6 Procedura risolutiva (prima versione)
Sia i l’indice della posizione attualmente considerata (inizialmente i = 0) Sia n la taglia dell’elenco da ordinare Ripeti per n volte la seguente procedura: Scorri l’elenco di input ed individua il primo nominativo in ordine alfabetico Riponi l’elemento individuato nella posizione i dell’elenco ordinato ed eliminalo dall’elenco di partenza Incrementa i di 1 (i = i +1) Ci piace perchè + compatta e perchè è generalizzabile

7 Ordinamento di un elenco (ver 2)
Zuzzurellone Zaira Donnaruma Giovanni Romano Nadia Medio Massimo Del Monte Francesco Rufolo Carmine Bamonte Giovanni Santonastaso Maria Abate Alfonso Abate Alfonso Donnaruma Giovanni Romano Nadia Medio Massimo Del Monte Francesco Rufolo Carmine Bamonte Giovanni Santonastaso Maria Zuzzurellone Zaira Abate Alfonso Bamonte Giovanni Romano Nadia Medio Massimo Del Monte Francesco Rufolo Carmine Donnaruma Giovanni Santonastaso Maria Zuzzurellone Zaira Cambiamo Abate Alfonso con il primo elemento dell’elenco e vice-versa Cambiamo Bamonte Giovanni con il secondo elemento dell’elenco e vice-versa Cambiamo Del Monte Francesco con il terzo elemento dell’elenco e vice-versa

8 Procedura risolutiva (seconda versione)
Sia i l’indice della posizione attualmente considerata (inizialmente i = 0) Sia n la taglia dell’elenco da ordinare Ripeti per n-1 volte la seguente procedura: Scorri l’elenco di input nella porzione da i ad n ed individua il primo nominativo in ordine alfabetico Scambia l’elemento individuato con l’elemento nella posizione i (se necessario) Incrementa i di 1 (i = i +1) Ci piace perchè + compatta e perchè è generalizzabile

9 Algoritmo Procedura di calcolo consistente in un insieme di passi (istruzioni) e finalizzata alla risoluzione di un problema E’ tipicamente descritto utilizzando il linguaggio naturale: E.g. “Scorri l’elenco di input ed individua il primo nominativo in ordine alfabetico” Un algoritmo può essere implementato attraverso un linguaggio di programmazione … … tuttavia, esso non dipende da uno specifico linguaggio di programmazione Il vantaggio degli algoritmi è che essi ci consentono di risolvere un problema con carta e penna, l’effettiva implementazione viene demandata ad una fase successiva, l’implementazione rappresenta una sorta di punto di arrivo (zoom/unzoom). E’ fuori discussione che se io chiedessi a voi durante l’esame di scrivere un algoritmo che risolve un certo problema per voi sarebbe più facile che scrivere un programma C++ che risolve lo stesso problema. con questa lezione abbiamo intrapreso una sorta di viaggio che si concluderà proprio con la programmazione

10 Struttura dati Le informazioni elaborate da un algoritmo sono definite dati (e.g., elenco nominativi da ordinare) I dati si possono presentare: in una forma elementare (e.g., il numero di studenti che segue la lezione) in una forma strutturata (e.g, l’elenco degli studenti e delle loro generalità) Una struttura dati può godere di determinate proprietà utili a risolvere un certo problema (e.g., l’elenco telefonico è ordinato alfabeticamente, sono quindi in grado di cercare un nome velocemente) La scelta di una particolare struttura dati influisce sull’efficienza di un programma e sulla semplicità di realizzazione dello stesso

11 Implementazione di un algoritmo
L’elaborazione dei dati presuppone una loro rappresentazione (e.g., numero telefonico rappresentato come numero intero, nome di un utente rappresentato come array di caratteri)

12 Rappresentazione dei dati
Problema: Fornire una rappresentazione in C/C++ dei dati sotto elencati Zuzzurellone Zaira 24 Bamonte Giovanni 26 Romano Nadia 21 Medio Massimo 28 Del Monte Francesco 30 Rufolo Carmine 19 Donnaruma Giovanni 27 Santonastaso Maria 25 Abate Alfonso 27

13 Rappresentazione dei dati
Giovanni Bamonte 26 Romano 24 Zaira Zuzzurellone 2 5 4 3 1 6 Ipotesi 1: Adoperiamo un array di taglia 3n 2 1 24 Zaira Zuzzurellone 21 Nadia Romano 26 Giovanni Bamonte Ipotesi 2: Adoperiamo una matrice di taglia nx3

14 Rappresentazione dei dati
Ipotesi 3: Adoperiamo 3 array distinti 1 2 Zuzzurellone Bamonte Romano 1 2 Zaira Giovanni Nadia 1 2 24 26 21

15 Rappresentazione dei dati
Ipotesi 4: Definiamo una classe studente Adoperiamo un array di taglia n di oggetti “studente” 1 2 Nome: Zaira Cognome: Zuzzurellone Voto: 24 Nome: Zaira Cognome: Zuzzurellone Voto: 24 Nome: Zaira Cognome: Zuzzurellone Voto: 24

16 Ordinamento di un elenco di voti (Selection Sort)
Sia i l’indice della posizione attualmente considerata (inizialmente i = 0) Sia n la taglia dell’elenco da ordinare Ripeti per n-1 volte la seguente procedura: Scorri l’elenco di input nella porzione da i ad n ed individua il voto più alto Scambia l’elemento individuato con l’elemento nella posizione i (se necessario) Incrementa i di 1 (i = i +1) Ci piace perchè + compatta e perchè è generalizzabile

17 Ordinamento di un elenco di voti (Selection Sort)
1 2 3 4 5 6 7 8 24 26 21 28 30 19 27 25 24 26 21 28 30 19 27 25 30 26 21 28 24 19 27 25 30 24 21 26 28 19 27 25 Ci piace perchè + compatta e perchè è generalizzabile Il numero + alto è 30, lo scambiamo con l’elemento alla prima posizione Il numero + alto è 28, lo scambiamo con l’elemento alla seconda posizione Scorriamo l’array da 0 ad 8 per individuare il numero + alto Scorriamo l’array da 1 ad 8 per individuare il numero + alto

18 Ordinamento di un elenco di voti (Selection Sort)
1 2 3 4 5 6 7 8 24 26 21 28 30 19 27 25 30 26 21 28 24 19 27 25 30 26 21 28 24 19 27 25 30 28 21 26 24 19 27 25 30 28 21 26 24 19 27 25 30 28 27 26 24 19 21 25 30 28 27 26 24 19 21 25 30 28 27 24 19 21 25 26 30 28 27 24 19 21 25 26 30 28 27 26

19 Sia Voti l’elenco di input ed n la taglia dello stesso
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 Sia Voti l’elenco di input ed n la taglia dello stesso void SelectionSort(int Voti [], int n){ int i, i_max; for (i = 0; i < n-1; i++) { i_max = i; // ricerca il valore massimo in Voti[i..n] for (int j = i+1; j < n-1; j++) if (Voti[j] > Voti[i_max]) i_max = j; // j è il nuovo i_max // scambia (se necessario) Voti[i_max] e Voti[i] if (i != i_max) { int temp = Voti[i_max]; Voti[i_max] = Voti[i]; Voti[i] = temp; } i – Separa gli elementi ordinati da quelli da ordinare j – Viene utilizzata per scorrere gli elementi da ordinare temp – Serve come variabile temporanea per operare lo scambio di due valori i_max – Conserva l’indice del valore piu’ alto all’interno della porzione di elenco non ordinata Sia i l’indice dell’elemento attualmente considerato (i=0) e sia i_max l’indice dell’elemento massimo in Voti[i…n] Ripeti per n-1 volte la seguente procedura Assumi il valore nella posizione Voti[i] essere il massimo nel sottoelenco Voti[i…n], (i = i_max) Cerca nel sottoelenco Voti[i+1 … n] il valore più alto ed assegnane l’indice ad i_max Se i_max è diverso da i, scambia Voti[i] e Voti[i_max]


Scaricare ppt "Sistemi e Tecnologie Informatiche"

Presentazioni simili


Annunci Google