La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Sistemi e Tecnologie Informatiche Problemi di ordinamento Umberto Ferraro Petrillo.

Presentazioni simili


Presentazione sul tema: "Sistemi e Tecnologie Informatiche Problemi di ordinamento Umberto Ferraro Petrillo."— 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 Zuzzurellone Zaira 24 Bamonte Giovanni 26 Romano Nadia 21 Medio Massimo 28 Del Monte Francesco 30 Rufolo Carmine 19 Donnaruma Giovanni 27 Santonastaso Maria25 Abate Alfonso 27 Compilazione di un elenco dei partecipanti al corso e dei rispettivi voti (ordinato per cognome)

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

6 Procedura risolutiva (prima versione) Sia i lindice della posizione attualmente considerata (inizialmente i = 0) Sia n la taglia dellelenco da ordinare Ripeti per n volte la seguente procedura: Scorri lelenco di input ed individua il primo nominativo in ordine alfabetico Riponi lelemento individuato nella posizione i dellelenco ordinato ed eliminalo dallelenco di partenza Incrementa i di 1 (i = i +1)

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 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 dellelenco e vice-versa Cambiamo Bamonte Giovanni con il secondo elemento dellelenco e vice-versa Cambiamo Del Monte Francesco con il terzo elemento dellelenco e vice-versa

8 Procedura risolutiva (seconda versione) Sia i lindice della posizione attualmente considerata (inizialmente i = 0) Sia n la taglia dellelenco da ordinare Ripeti per n-1 volte la seguente procedura: Scorri lelenco di input nella porzione da i ad n ed individua il primo nominativo in ordine alfabetico Scambia lelemento individuato con lelemento nella posizione i (se necessario) Incrementa i di 1 (i = i +1)

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 lelenco 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

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, lelenco degli studenti e delle loro generalità) Una struttura dati può godere di determinate proprietà utili a risolvere un certo problema (e.g., lelenco telefonico è ordinato alfabeticamente, sono quindi in grado di cercare un nome velocemente) La scelta di una particolare struttura dati influisce sullefficienza di un programma e sulla semplicità di realizzazione dello stesso

11 Implementazione di un algoritmo Lelaborazione 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 Maria25 Abate Alfonso 27

13 Rappresentazione dei dati GiovanniBamonte26 Romano 24ZairaZuzzurellone Ipotesi 1: Adoperiamo un array di taglia 3n ZairaZuzzurellone0 21NadiaRomano2 26GiovanniBamonte1 Ipotesi 2: Adoperiamo una matrice di taglia nx3

14 Rappresentazione dei dati ZuzzurelloneBamonteRomano ZairaGiovanniNadia Ipotesi 3: Adoperiamo 3 array distinti

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

16 Ordinamento di un elenco di voti (Selection Sort) Sia i lindice della posizione attualmente considerata (inizialmente i = 0) Sia n la taglia dellelenco da ordinare Ripeti per n-1 volte la seguente procedura: Scorri lelenco di input nella porzione da i ad n ed individua il voto più alto Scambia lelemento individuato con lelemento nella posizione i (se necessario) Incrementa i di 1 (i = i +1)

17 Ordinamento di un elenco di voti (Selection Sort) Scorriamo larray da 0 ad 8 per individuare il numero + alto Il numero + alto è 30, lo scambiamo con lelemento alla prima posizione Scorriamo larray da 1 ad 8 per individuare il numero + alto Il numero + alto è 28, lo scambiamo con lelemento alla seconda posizione

18 Ordinamento di un elenco di voti (Selection Sort) …

19 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 lindice del valore piu alto allinterno della porzione di elenco non ordinata Sia Voti lelenco di input ed n la taglia dello stesso Ripeti per n-1 volte la seguente procedura Cerca nel sottoelenco Voti[i+1 … n] il valore più alto ed assegnane lindice ad i_max Assumi il valore nella posizione Voti[i] essere il massimo nel sottoelenco Voti[i…n], (i = i_max) Sia i lindice dellelemento attualmente considerato (i=0) e sia i_max lindice dellelemento massimo in Voti[i…n] Se i_max è diverso da i, scambia Voti[i] e Voti[i_max]


Scaricare ppt "Sistemi e Tecnologie Informatiche Problemi di ordinamento Umberto Ferraro Petrillo."

Presentazioni simili


Annunci Google