Relatori: Emanuele e Denis Tornei Informatici. Introduzione In queste prime lezioni abbiamo affrontato linformatica procedendo a soluzioni di problemi,

Slides:



Advertisements
Presentazioni simili
Gli Algoritmi di ordinamento
Advertisements

Esercizio Usate il ciclo repeat until (controllo post condizionale) per simulare il prodotto N x M con M somme di N. Esempio: 5 x 3 equivale a fare 5 +5.
LS Tron Classe 4TC – as 2006/07 LORGANIZZAZIONE DEI PROGRAMMI UD. 8 p. 282.
PROGRAMMARE IN PASCAL (le basi)
numero rette n numero parti piano f(n) f(n -1)n -1 f(n -1) + nn numero parti piano f(n) numero rette n.
Alberi binari di ricerca
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.
Capitolo 4 Ordinamento Algoritmi e Strutture Dati.
Capitolo 4 Ordinamento Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
Algoritmi Paralleli e Distribuiti a.a. 2008/09
Università degli Studi di Bergamo Facoltà di Lingue e Letterature Straniere Facoltà di Lettere e Filosofia A.A Informatica generale 1 Appunti.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 4 Ordinamento:
Algoritmi e strutture Dati - Lezione 7
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 1 Capitolo 1 Unintroduzione.
Algoritmi e Strutture Dati
Capitolo 4 Ordinamento: Selection e Insertion Sort Algoritmi e Strutture Dati.
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.
Capitolo 4 Ordinamento: Selection e Insertion Sort Algoritmi e Strutture Dati.
Algoritmi e Strutture Dati
Capitolo 4 Ordinamento: Selection e Insertion Sort Algoritmi e Strutture Dati.
Capitolo 4 Ordinamento Algoritmi e Strutture Dati.
Algoritmi e Strutture Dati (Mod. B)
Algoritmi e Strutture Dati (Mod. A)
Algoritmi e Strutture Dati (Mod. B)
Algoritmi e Strutture Dati 20 aprile 2001
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 su Tipi Semplici
Problema Ci sono 5 signore nel parco. Ognuna di loro ha 1 figlio. Ogni bambino ha 10 figurine di calciatori, per un totale quindi di 50 figurine. Questi.
CAPITOLO 7.
CAPITOLO 6.
Elementi di Informatica di base
Radix-Sort(A,d) // A[i] = cd...c2c1
Algoritmi e Strutture Dati
Vedremo in seguito che (n log n) è un limite stretto per il problema dellordinamento. Per ora ci limitiamo a dimostrare che: La complessità nel caso pessimo.
La complessità media O(n log n) di Quick-Sort vale soltanto se tutte le permutazioni dell’array in ingresso sono ugualmente probabili. In molte applicazioni.
Giuseppina ALGORITMI trifiletti.
Cammini minimi da un sorgente
IO E LA MATEMATICA PROCEDURALE
4/5/2015E. Giovannetti -- OI09.1 Olimpiadi di Informatica 2010 Giornate preparatorie Dipartimento di Informatica Università di Torino marzo – Algoritmi.
La ricorsione.
Ordinamento in tempo lineare Il limite inferiore Ω(n log n) vale per tutti gli algoritmi di ordinamento generali, ossia per algoritmi che non fanno alcuna.
Algoritmi e Strutture Dati
Paola Disisto, Erika Griffini, Yris Noriega.  Insieme ordinato di operazioni non ambigue ed effettivamente computabili che, quando eseguito, produce.
Algoritmi Paralleli e Distribuiti a.a. 2008/09 Lezione del 07/04/2009 Prof. ssa ROSSELLA PETRESCHI a cura del Dott. SAVERIO CAMINITI.
Lo strano mondo degli algoritmi di ordinamento Algoritmi.
Il problema della ricerca Algoritmi e Strutture Dati.
1 Ordinamento (Sorting) INPUT: Sequenza di n numeri OUTPUT: Permutazione π = tale che a 1 ’  a 2 ’  … …  a n ’ Continuiamo a discutere il problema dell’ordinamento:
Algoritmi e strutture Dati - Lezione 7 1 Algoritmi di ordinamento ottimali L’algoritmo Merge-Sort ha complessità O(n log(n))  Algoritmo di ordinamento.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 4 Ordinamento:
1 Informatica Generale Marzia Buscemi Ricevimento: Giovedì ore , Dipartimento di Informatica, stanza 306-PS o per posta.
1 Ordinamento (Sorting) Input: Sequenza di n numeri Output: Permutazione π = tale che: a i 1  a i 2  ……  a i n Continuiamo a discutere il problema dell’ordinamento:
Codici prefissi Un codice prefisso è un codice in cui nessuna parola codice è prefisso (parte iniziale) di un’altra Ogni codice a lunghezza fissa è ovviamente.
Informatica e Informatica di Base
Ciclo for nei linguaggi di programmazione. Nei linguaggi di programmazione, il ciclo for è una struttura di controllo iterativa che determina l'esecuzione.
Samuele Marino. Cos’è il Repeat Until?  In Pascal, il Repeat Until è un ciclo che consiste nel ripetere (Repeat) una o più istruzioni fino a quando (Until)
GLI ALGORITMI DI ORDINAMENTO
Come risolvere il cubo di RUBIK
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Capitolo 1 Un’introduzione.
Algoritmi e Strutture Dati HeapSort. Select Sort: intuizioni L’algoritmo Select-Sort  scandisce tutti gli elementi dell’array a partire dall’ultimo elemento.
Forma normale delle equazioni di 2° grado Definizione. Un'equazione di secondo grado è in forma normale se si presenta nella forma Dove sono numeri.
Ordinamento. Introduzione Una delle operazioni che si possono eseguire sui vettori, è quella di ordinare gli elementi del vettore in ordine crescente.
32 = 9 x2 = 9 x = 3 32 = 9 √9 = 3 L’estrazione di radice
La numerazione ottale. Il sistema di numerazione ottale ha ampio utilizzo in informatica E’ un sistema di numerazione posizionale La base è 8 Il sistema.
Raccogliamo x al primo membro e 2 al secondo:
Criteri di divisibilità
Unità di apprendimento 6
-7 I numeri interi
Transcript della presentazione:

Relatori: Emanuele e Denis Tornei Informatici

Introduzione In queste prime lezioni abbiamo affrontato linformatica procedendo a soluzioni di problemi, quindi prima cercando di risolvere i problemi presentati e successivamente generalizzando ed analizzando la soluzione.

Sono stati quindi proposti dei problemi che il nostro cervello risolve automaticamente ogni giorno ma con meccanismi che non sono completamente consci e quindi non espliciti: cercare di far risolvere al computer gli stessi basilari problemi ci consente quindi di capire come il nostro cervello svolge molte funzioni

I tre problemi I problemi proposti sono tutti impostati sul confronto di oggetti differenti: si presupponeva di avere otto oggetti differenti e di avere a disposizione soltanto una bilancia a due piatti per confrontare gli oggetti.

1.Trovare il maggiore tra un insieme di otto numeri arbitrari. 2.Trovare il più grande e il più piccolo tra un insieme di otto numeri arbitrari. 3.Trovare i due numeri più grandi tra un insieme di otto numeri arbitrari.

Processi di risoluzione 1.Presentazione del problema; 2.Analisi e sviluppo di un algoritmo risolvente; 3.Ottimizzazione dellalgoritmo; 4.Traduzione dellalgoritmo da linguaggio naturale a linguaggio macchina (Pascal); 5.Ottimizzazione del codice Pascal; 6.Considerazioni sul numero di confronti in funzione del numero di dati analizzati.

Il primo problema Presentazione del problema. Trovare il più grande numero, potendoli soltanto confrontare a due a due, in un insieme di otto numeri arbitrari.

Analisi, sviluppo dellalgoritmo risolvente e ottimizzazione. Si può procedere confrontando tutti i numeri fra di loro ma così avremmo una sovrabbondanza di informazioni inutilizzate. Questi sono i due alberi che schematizzano i due dei migliori (con minor numero di confronti) algoritmi risolventi:

Traduzione dellalgoritmo da linguaggio naturale a linguaggio macchina (Pascal) e ottimizzazione. Il codice Pascal che applica il secondo algoritmo deve conservare (in un array) tutti gli elementi e confrontare i numeri a coppie. Si ha dunque che per raggiungere lo scopo si devono allocare una variabile array di otto elementi integer più un contatore(per i cicli for).

Si nota subito invece che il primo algoritmo è quello che conserva meno informazioni (che in questo caso sono inutili) e che analizza contemporaneamente il minor numero di elementi: è dunque questo lalgoritmo che permette di creare un codice Pascal ottimizzato al massimo. Si ha infatti che bisogna allocare soltanto tre variabili integer: i due oggetti da confrontare e un contatore (per i cicli for). Inoltre non ci interessa conoscere alla fine dellelaborazione linsieme iniziale dei numeri ma soltanto il maggiore (questo spiega lassenza di un array contenente gli otto numeri).

Dobbiamo confrontare due numeri alla volta tenendo in memoria soltanto il più grande (fino a quel momento) e quello con cui confrontarlo. Il codice (minimo) Pascal risolvente è il seguente:

uses crt; var a,b,c:integer; begin clrscr; readln(a); for c:=0 to 6 do begin readln(b); if b>a then a:=b; (* Totale di 7 confronti *) end; writeln('Il maggiore è: ',a); readln; end.

Considerazioni sul numero di confronti in funzione del numero di dati analizzati Si può empiricamente osservare che il numero minimo di confronti è n-1 dove n è il numero di oggetti. Questo perché il confronto è binario, cioè prende in esame soltanto due elementi alla volta.

Quindi poiché si prende la coppia di elementi e il maggiore lo si confronta con tutti gli altri si ha che dalla prima coppia (1° confronto) esce un numero solo che poi si confronta (2° confronto) con il terzo (n-1 sono gli elementi rimasti) fino a rimanere con n-n+1 elementi quindi il numero di confronti è n-1 (cioè n-k dove k è il numero di oggetti maggiori [sempre 1]).

Infatti per ogni strato, prendendo in considerazione il secondo albero, (cioè dopo ogni serie di confronti) passeranno n/2 elementi dove n è il numero di elementi passati dallo strato precedente. Si avrà dunque: (n / 2^1)+(n / 2^2)+...+(n / 2^log 2 n) = n – 1 quindi n-1 è il numero di passaggi per risolvere il problema.

Il secondo problema Presentazione del problema. Trovare il più grande e il più piccolo numero, potendoli soltanto confrontare a due a due, in un insieme di otto numeri arbitrari.

Analisi, sviluppo dellalgoritmo risolvente e ottimizzazione. Si può procedere applicando prima lalgoritmo sopra descritto (quello del primo problema) per trovare il maggiore e poi applicarlo al contrario trovando il minore

A sinistra procedono i perdenti mentre a destra solo i vincenti

Però così avremmo una sovrabbondanza di informazioni inutilizzate: dai primi quattro confronti infatti sappiamo già qual è il maggiore e il minore di ogni coppia iniziale; questa informazione ci consente quindi di eliminare i primi quattro confronti a sinistra che sono inutili.

Questo è lalbero che schematizza il migliore (con minor numero di confronti) algoritmo risolvente:

Ogni incontro di tre linee è un confronto; come si può notare il numero di confronti è dieci; A,B,C,D,E,F,G,H sono gli oggetti e V è il maggiore e P è il minore alla fine dellelaborazione.

Traduzione dellalgoritmo da linguaggio naturale a linguaggio macchina (Pascal) e ottimizzazione Il codice Pascal che applica il secondo algoritmo deve conservare (in un array) tutti gli elementi e confrontare i numeri a coppie. Si ha dunque che per raggiungere lo scopo si devono allocare una variabile array di otto elementi integer più un contatore(per i cicli for) e una variabile temporanea.

Abbiamo visto quindi che si ha la necessità di mantenere in memoria tutte le variabili iniziali perché i numeri minori devono essere anchessi confrontati per lindividuazione del minore. Possiamo a questo punto agire in questo modo: si operano i primi quattro confronti e si mette al primo posto di ogni coppia il maggiore e nel secondo il minore;

Ad esempio avendo inizialmente la tabella: A BCDEFGH

Dopo i primi quattro confronti si avrà: A BDCEFHG

Quindi nelle caselle a indice pari (partendo da zero) avremo tutti i numeri che nei primi quattro confronti si sono rivelati maggiori: possiamo dunque procedere con lalgoritmo del primo problema per selezionare il maggiore fra gli elementi a indice pari e il minore fra gli elementi a indice dispari

program minmax; uses crt; var c,tmp:integer; o:array[0..7]of integer;

begin clrscr; c:=0; repeat readln(o[c]); readln(o[c+1]); if o[c] 7;

for c:=1 to 3 do begin if o[0]<o[c*2] then o[0]:=o[c*2]; if o[1]>o[c*2+1] then o[1]:=o[c*2+1] end; writeln('Il maggiore è: ',o[0]); writeln('il minore è: ',o[1]); readln; end.

La variabile temporanea (nel codice tmp ) è utilizzata per linversione degli elementi dellarray: Per invertire i valori di due variabili a e b bisogna infatti procedere in questo modo: tmp:=a; a:=b; b:=tmp

Considerazioni sul numero di confronti in funzione del numero di dati analizzati. Ampliando la dimostrazione del primo problema il numero di confronti per questo algoritmo è: (n – 1) + ([n/2] – 1)

Infatti n-1 è il minor numero di confronti per trovare il maggiore fra gli oggetti (come nel primo problema) mentre n/2 – 1 è il minimo numero di confronti per trovare il minimo fra la metà degli oggetti dovendo confrontare fra loro per trovare il minore soltanto i perdenti della prima serie di confronti che sono proprio n/2.

Il segno […] significa approssimato per eccesso in quanto se n fosse dispari lelemento spaiato verrebbe comunque confrontato

Il terzo problema Presentazione del problema. Trovare i due numeri più grandi, potendoli soltanto confrontare a due a due, in un insieme di otto numeri arbitrari.

Analisi, sviluppo dellalgoritmo risolvente e ottimizzazione Si può procedere applicando prima lalgoritmo del primo problema per trovare il maggiore e poi applicarlo con tutti gli elementi rimanenti.

Ma così avremmo una sovrabbondanza di informazioni inutilizzate: dai primi quattro confronti infatti sappiamo già qual è il maggiore e il minore di ogni coppia iniziale; questa informazione ci consente quindi di eliminare i confronti fra E-F e G- H (nellesempio) che sono inutili in quanto sappiamo già quale fra E-F e G-H è maggiore e quindi può concorrere ad essere il secondo numero maggiore.

La schematizzazione è in questo secondo albero:

Ma anche questa soluzione è ulteriormente ottimizzabile e mantiene alcune informazioni inutili. Sfruttando tutte le informazioni ricavate dai primi sette confronti (quelli per ricavare il primo massimo numero) siamo riusciti a creare un algoritmo che risolve il problema con nove confronti.

Gli unici tre elementi che possono ambire al secondo posto sono quelli che hanno perso il confronto diretto con il massimo; infatti si sono rivelati maggiori agli altri perché si sono guadagnati il confronto con il maggiore: trovando il maggiore fra questi tre elementi (con lalgoritmo del primo problema) si trova il secondo numero più grande.

Questo è lalbero che schematizza il migliore algoritmo risolvente:

Ogni incontro di tre linee è un confronto; come si può notare il numero di confronti è nove; A,B,C,D,E,F,G,H sono gli oggetti e V è il maggiore e S è il secondo numero maggiore alla fine dellelaborazione. Supponendo che A sia il maggiore il secondo può solo che essere solo o B oppure il maggiore fra C e D oppure il maggiore fra E-F-G-H.

Traduzione dellalgoritmo da linguaggio naturale a linguaggio macchina (Pascal) e ottimizzazione. Il codice Pascal che applica il terzo algoritmo deve conservare (in un array) tutti gli elementi e confrontare i numeri a coppie. Si ha dunque che per raggiungere lo scopo si devono allocare una variabile array di otto elementi integer più un contatore (per i cicli for) e una variabile temporanea di cui abbiamo parlato per il secondo problema.

Abbiamo visto quindi che si ha la necessità di mantenere in memoria tutte le variabili iniziali perché i numeri minori devono essere anchessi confrontati per lindividuazione del secondo. Possiamo a questo punto agire in questo modo: si divide (mentalmente) in due larray e si operano i primi quattro confronti e si mette al primo posto di ogni coppia il maggiore e nel secondo il minore.

Ad esempio avendo inizialmente la tabella: A B CDEFGH

Essa verrà raffigurata nel seguente modo: A 3B2 C 4D5 E 8F6 G 1H7

Dopo i primi quattro confronti si avrà: A 3B2 D 5C4 E 8F6 H 7G1

Quindi nelle caselle a sinistra (a indice pari, partendo da zero) avremo tutti i numeri che nei primi quattro confronti si sono rivelati maggiori. Passiamo ora al confronto dei maggiori per stabilire il maggiore. Cè però un fatto importante: le coppie originali non devono essere sciolte! Se nel confronto fra A e D vince D, A e D si scambiano le posizioni e lo fanno anche i loro corrispettivi compagni C e B a prescindere dal loro valore.

Dopo la seconda serie di confronti: D 5C4 A 3 B2 E 8F6 H 7G1

Dopo lultimo confronto per decretare il massimo: E 8F6 A 3B2 D 5C4 H 7G1

Quindi ora si sa che il maggiore (E) è nella prima casella dellarray. Si sa inoltre che quelli che si sono confrontati direttamente con E sono nelle caselle (partendo da zero) 1 5 e 6 (F,D,H). Da qui basta applicare lalgoritmo del primo problema per stabilire il massimo fra questi tre trovando il secondo. F > D F < H

program stnd; uses crt; var c,tmp:integer;o:array[0..7]of integer;

begin clrscr; for c:=0 to 3 do begin readln(o[c]); readln(o[c+4]); if o[c]<o[c+4] then (* 4 confronti *) begin tmp:=o[c+4]; o[c+4]:=o[c]; o[c]:=tmp; end;

for c:=0 to 3 do begin if o[c]<o[c+1] then (* 2 confronti *) begin tmp:=o[c];o[c]:=o[c+1];o[c+1]:=tmp; tmp:=o[c+4];o[c+4]:=o[c+5];o[c+5]:=tmp; end; c:=c+1; end;

if o[0]<o[2] then (* 1 confronto *) begin tmp:=o[0];o[0]:=o[2];o[2]:=tmp; tmp:=o[4];o[4]:=o[6];o[6]:=tmp; end; if o[1]<o[2] then o[1]:=o[2]; if o[1]<o[4] then o[1]:=o[4]; (* 2 confronti *) writeln('Il primo è: ',o[0]); writeln('il secondo è: ',o[1]); readln; end. (* TOT: 9 confronti in 36 righe *)

Considerazioni sul numero di confronti in funzione del numero di dati analizzati. Considerando il fatto che dopo la prima serie di confronti effettuati per decretare il più grande fra i numeri considerati, cioè dopo n-1 confronti, si dovranno operare dei confronti fra tutti gli elementi che si sono confrontati con il più grande e cioè uno per ogni potenza di due; si otterrà dunque: (n – 1) + ((log 2 n) – 1)

E infatti n – 1 il minimo numero di confronti per trovare il maggiore (vedi primo problema) mentre ((log 2 n) – 1) è il minimo numero di confronti per trovare il secondo in quanto si devono confrontare un oggetto ogni potenza di due di oggetti.

Autore del testo Emanuele DOsualdo emasoft.8m.com Autore della presentazione Denis Bozzi 3E Liceo Scientifico Niccolò Copernico di Udine