Your SlideShare is downloading. ×
0
Presentazione corretta algoritmi
Presentazione corretta algoritmi
Presentazione corretta algoritmi
Presentazione corretta algoritmi
Presentazione corretta algoritmi
Presentazione corretta algoritmi
Presentazione corretta algoritmi
Presentazione corretta algoritmi
Presentazione corretta algoritmi
Presentazione corretta algoritmi
Presentazione corretta algoritmi
Presentazione corretta algoritmi
Presentazione corretta algoritmi
Presentazione corretta algoritmi
Presentazione corretta algoritmi
Presentazione corretta algoritmi
Presentazione corretta algoritmi
Presentazione corretta algoritmi
Presentazione corretta algoritmi
Presentazione corretta algoritmi
Presentazione corretta algoritmi
Presentazione corretta algoritmi
Presentazione corretta algoritmi
Presentazione corretta algoritmi
Presentazione corretta algoritmi
Presentazione corretta algoritmi
Presentazione corretta algoritmi
Presentazione corretta algoritmi
Presentazione corretta algoritmi
Presentazione corretta algoritmi
Presentazione corretta algoritmi
Presentazione corretta algoritmi
Presentazione corretta algoritmi
Presentazione corretta algoritmi
Presentazione corretta algoritmi
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Presentazione corretta algoritmi

1,002

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,002
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
23
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Corso di Didactics of Computer Science a.a. 2011/2012 Valeria Mattuzzi
  • 2. Definizione di algoritmoUn algoritmo è un insieme finito ed ordinato di passi nonambigui, che specificano le operazioni eseguendo le quali sirisolve una classe di problemiIl termine algoritmo, che significa “procedimento di calcolo”, èuna versione moderna del termine latino medievale algorismus.Algorismus deriva dal matematico persiano Al-Khwarizmi, delIX secolo d.C.In altre parole, un algoritmo è la descrizione precisa di unprocedimento valido per la risoluzione di un problemaattraverso un numero finito di passi. Un problema risolvibilemediante un algoritmo si dice computabile
  • 3. Il primo algoritmo Il primo algoritmo di cui si abbia documentazione si trova nel papiro egiziano di Ahmes, risalente circa al 1650 a.C. e conservato al British Museum di Londra Il papiro contiene un algoritmo per la moltiplicazione. Tale algoritmo viene usato tuttora nei circuiti delle unità aritmetico/logiche dei calcolatori elettronici
  • 4. Proprietà degli algoritmiLe proprietà principali di un algoritmo sono: Finitezza. Lalgoritmo deve essere composto da un numero finito di passi Non ambiguità. I passi costituenti lalgoritmo devono essere interpretabili in modo univoco dallesecutore sia esso umano o artificiale Terminazione. Lesecuzione deve terminare dopo un tempo finito Eseguibilità. Gli informatici utilizzano il termine efficace per indicare il concetto di essere eseguibile.
  • 5. Natura astratta degli algoritmi Distinzione tra algoritmo e la sua rappresentazioneE analoga a quella tra una storia e un libro. Una storia è astratta oconcettuale; mentre, un libro è una “rappresentazione fisica” dellastoria.Allo stesso modo, un algoritmo è astratto e distinto dalla suarappresentazione Distinzione tra programma e processoUn programma è la rappresentazione di un algoritmo; mentre, unprocesso è lattività di esecuzione di un algoritmo.Programmi, algoritmi e processi sono entità distinte, ma correlate.
  • 6. Rappresentazione degli algoritmi PrimitiveLo stesso algoritmo può essere rappresentato in vari modi: formula, sequenza di istruzioni, disegno, a parole a diversi livelli di astrazioneEsempio. Rappresentazione diun algoritmo usando delle figure
  • 7. Rappresentazione degli algoritmi PrimitiveMolti canali di comunicazione presentano spesso unaterminologia che ha più di un significato nascono così problemi di comunicazioneOgni rappresentazione si basa su un insieme di primitive bendefinite, comprensibili dallesecutoreSe lesecutore è un computer, una collezione di primitive perdescrivere un algoritmo, insieme alle regole per comporle,costituisce un linguaggio di programmazioneOgni primitiva ha una propria sintassi (rappresentazionesimbolica) e semantica (significato)
  • 8. PseudocodicePermette una rappresentazione informale degli algoritmiÈ un linguaggio meno formale, non direttamente comprensibileda un programmaLintroduzione di questo tipo di formalismo è volta allacomprensibilità e alla leggibilità del codice
  • 9. Primitive dello pseudocodice AssegnamentoSintassi: nome espressioneEffetto: “associa” a nome il valore ottenuto valutandoespressione. Successivamente nome può essere usato perrichiamare quel valorePossiamo pensare a nome come ad una scatola (cella dimemoria) in cui mettiamo il valore
  • 10. Primitive dello pseudocodice Selezione condizionaleSintassi: If condizione then azione else azioneSignificato: Si valuta la condizioneSe il risultato è true si esegue lazione dopo thenSe il risultato è false si esegue lazione dopo elseEsempio:if (lanno è bisestile) then (totaleGiornaliero ← totale/366) else (totaleGiornaliero ← totale/365)
  • 11. Primitive dello pseudocodice IterazioneSintassi: while condizione do attivitàSignificato: Si valuta la condizioneSe il risultato è true si esegue lattività, quindi si riesegue tutto il whileSe il risultato è false si termina lesecuzioneEsempio:while (ci sono biglietti da vendere) do (vendi un biglietto)
  • 12. Primitive dello pseudocodice ProcedureUna procedura associa delle azioni da eseguire richiamandoneil nome.Equivale a definire una nuova primitiva.Esempio: procedure Saluti contatore ← 3 while (contatore > 0) do (stampa il messaggio “Saluti”; contatore ← contatore - 1)Risultato: stampa tre volte la stringa “Saluti”
  • 13. Primitive dello pseudocodice ProcedureLimportanza e la praticità di una procedura sta nel fatto chepuò essere “chiamata” in diversi punti del programmaEsempio: if (lospite è simpatico) then (esegui la procedura Saluti) else (...)Per renderle più flessibili, le procedure possono avereparametri (o nomi generici). Un parametro viene usato comese fosse un valore nella procedura. Quando si esegue laprocedura va fornito un valore per il parametro.Esempio: procedure Salutibis (contatore) while (contatore > 0) do (stampa il messaggio “Saluti”; contatore ← contatore - 1)
  • 14. Algoritmi e risoluzione di problemi1. Comprendere il problema2. Progettare una soluzione (algoritmo)3. Realizzare lalgoritmo (scrittura del codice)4. Valutare lefficienza e laccuratezza dellalgoritmo trovatoOsservazioni: Le fasi riportate sopra non sono necessariamente in sequenza Si potrebbe anche sostenere che non si ha una vera comprensione del problema fintanto che non si arriva a una soluzione del problema stesso.
  • 15. Risolvere problemi (Problem Solving)Come si risolvono problemi?La capacità di risolvere problemi è unabilità da svilupparepiuttosto che una scienza esatta da imparare "Una grande scoperta risolve un grande problema, ma nella soluzione di qualsiasi problema cè un pizzico di scoperta. Il tuo problema può essere modesto, ma se stimola la tua curiosità, tira in ballo la tua inventiva e lo risolvi con i tuoi mezzi, puoi sperimentare la tensione e gioire del trionfo della scoperta" G.Polya, matematico ungherese (1887 - 1985)
  • 16. Getting a foot in the doorCi sono numerosi approcci per risolvereproblemi. Esiste un filo conduttore che liaccomuna ed è detto getting a foot in thedoor.Esempio:Problema: Prima di iniziare una corsa, A,B,C,D fanno le seguenti previsioni:A prevede che B vincerà; B prevede che D sarà lultimo;C prevede che A arriverà terzo; D prevede che la predizione di A sarà corretta.Solo una di queste previsioni è vera e quella è la previsione fatta dal vincitore.Chi vincerà la gara?Soluzione: Poichè le previsioni di A e D sono equivalenti, sono entrambe false(il vincitore è uno solo). A questo punto abbiamo a foot in the door. Se laprevisione di A è falsa, allora B non ha vinto. Dunque il vincitore è C.
  • 17. Alcune tecniche per risolvere problemi Provare a risolvere un problema analogo più semplice Usare la tecnica di raffinamento, che consiste nel suddividere il problema in sottoproblemi più semplici da risolvere Seguire una metodologia top-down, andando dal generale allo specifico Usare la metodologia bottom-up, che consiste nel cominciare a risolvere sottoproblemi del problema dato ed estendere poi le soluzioniIn generale, risolvere un problema richiede una forma di creatività
  • 18. Strutture iterative Algoritmo di ricerca sequenziale Problema: trovare un algoritmo che verifichi che un particolare valore (target value) è presente in una lista data. Se il valore è nella lista, la ricerca è stata un successo; altrimenti, un fallimento Soluzione: si scorre la lista dallinizio, confrontando ogni voce (test entry) con target value. Se si raggiunge la fine dellelenco senza trovare target value, la ricerca è stata un fallimentoUn algoritmo di questo tipo è detto algoritmo di ricercasequenziale. A causa della sua semplicità, è spesso utilizzato perliste brevi; infatti, nel caso di lunghi elenchi, ricerche sequenzialinon sono così efficienti come altre tecniche
  • 19. Strutture iterative Algoritmo di ricerca sequenzialeprocedure ricerca (Lista, TargetValue)if (Lista vuota) then (Dichiarare la ricerca un fallimento) else (Selezionare la prima voce nella lista come TestEntry; while ( TargetValue > TestEntry e rimangono voci da considerare) do (seleziona la voce successiva nella lista come TestEntry) if (TargetValue = TestEntry) then (Dichiarare la ricerca un successo) else (Dichiarare la ricerca un fallimento) ) end if
  • 20. Strutture iterative Strutture di controllo iterativeUn metodo per implementare un uso ripetitivo di unistruzione o unasequenza di istruzioni è una struttura iterativa detta loop (ciclo), nellaquale un insieme di istruzioni, chiamate corpo del ciclo, vengonoeseguite in modo ripetitivo sotto la direzione di alcuni control processVi sono due importanti strutture ad anello: while (condizione) do (corpo del ciclo) repeat (corpo del ciclo) until (condizione)Osservazione: Il corpo del repeat viene sempre eseguito almeno una volta Il repeat termina quando la condizione è vera
  • 21. I diagrammi di flussoI diagrammi di flusso sono unalternativa allo pseudocodice perrappresentare algoritmi in modo informale ma precisoStruttura del while: diagramma di Struttura del repeat: diagramma diflusso flusso
  • 22. Strutture iterative Algoritmo di ordinamento per inserimentoProblema: trovare un algoritmo che riordini in ordine alfabetico laseguente lista: Fred, Alex, Diana, Byron, CarolSoluzione: La sottolista costituita dai primi due nomi non è ordinata. Si prende la scheda contenente Alex, si fa scorrere il nome Fred verso il basso nello spazio dove cera Alex e si posiziona poi il nome Alex nello spazio Ora i primi due nomi formano una sottolista ordinata, ma i primi tre no. Così si può prendere il terzo nome, Diana, si fa scorrere il nome di Fred nello spazio dove cera Diana e si inserisce Diana nel buco lasciato da Fred. Le prime tre voci dellelenco sono così ordinate Si prosegue in maniera analoga e si ottiene un elenco in ordine alfabetico
  • 23. Strutture iterativeAlgoritmo di ordinamento per inserimento Ciascuna riga rappresenta lo stesso procedimento che viene ripetuto più volte. Il programma ordina lelenco più volte rimuovendo una voce e inserendola nella sua posizione corretta. Per questo che si parla di ordinamento per inserimento
  • 24. Strutture ricorsive Algoritmo di ricerca binaria Un algoritmo di ricerca binaria individua un valore desiderato allinterno di un insieme ordinato di datiProblema: trovare un algoritmo che individui una particolare vocein una lista ordinataSoluzione: Si seleziona la “middle entry” nella lista, cioè la prima voce della seconda metà dellelenco Se la “middle entry” è il valore cercato, la ricerca è stata un successo. Altrimenti, possiamo limitare la nostra ricerca alla prima o ultima metà della lista. Si prosegue in maniera analoga per la parte rimanente di lista
  • 25. Strutture ricorsive Algoritmo di ricerca binariaEsempio: Nella lista data cercare la parola John
  • 26. Strutture ricorsive Algoritmo di ricerca binariaIn pseudocodiceprocedure Search (lista, targetvalue)if (lista vuota) then (Affermare che la ricerca e stata un fallimento) else (selezionare middle-entry come Testentry; Eseguire il caso seguente appropriato. Caso 1: TargetValue = Testentry (Affermare che la ricerca e stato un successo) Caso 2: TargetValue < Testentry (Applicare la procedura Search per vedere se il TargetValue e nella porzione della lista precedente a Testentry e riportare il risultato della ricerca) Caso 3: TargetValue > Testentry (Applicare la procedura Search per vedere se il TargetValue e nella porzione della lista successiva a Testentry e riportare il risultato della ricerca) ) end if
  • 27. Strutture ricorsive Strutture di controllo ricorsiveLalgoritmo di ricerca binaria è simile a quello di ricercasequenziale, poiché entrambi gli algoritmi richiedonolesecuzione di un processo ripetitivoTuttavia, lattuazione di questa ripetizione è molto diversa. Laricerca sequenziale comporta una forma circolare di ripetizione,mentre la ricerca binaria esegue ogni fase della ripetizionecome una sottoattività della fase precedente. Questa tecnica ènota come ricorsione.I sistemi ricorsivi dipendono da una condizione di terminazionedetta base case o degenerative case
  • 28. Efficienza degli algoritmiAnche se le macchine di oggi sono in grado di eseguire milionidi istruzioni al secondo, lefficienza rimane una delleprincipali criticità nella progettazione di algoritmi. Spesso lascelta tra algoritmi efficienti e non efficienti può fare ladifferenza tra una soluzione effettiva al problema e unaimpraticabile.Ci sono diverse misure per valutare la “bontà” di un algoritmoNormalmente siamo interessati al costo dellesecuzionedellalgoritmo o in termini del tempo impiegatodallesecuzione o dello spazio di memoria occupato dalle variestrutture dati necessarie per lesecuzione
  • 29. Analisi dellalgoritmo di ordinamento per inserimentoEsempio: Consideriamo una lista di n termini e lalgoritmo diordinamento per inserimento analizzato sopraPoichè lattività di confronto tra due voci domina lalgoritmo, siconta il numero dei confronti eseguiti durante lordinamento dellalista Nel miglior caso possibile, si devono eseguire n – 1 confronti Nel caso peggiore, cioè quando lelenco originale è in ordine inverso, si devo effettuare 1 + 2 + 3 + … + (n – 1) = ½ (n² – n) confrontiIl numero di confronti effettuati durante lesecuzione dellalgoritmofornisce un identificatore della quantità di tempo necessaria pereseguire lalgoritmo
  • 30. Analisi dellalgoritmo di ordinamento per inserimento Nel caso peggiore, il tempo impiegato per eseguire lalgoritmo aumenta in maniera esponenziale se cresce la lunghezza della lista Lalgoritmo diventa meno efficiente più la dimensione della lista aumenta
  • 31. Analisi dellalgoritmo di ricerca binaria Lanalisi dellalgoritmo di ricerca binaria nel caso peggiore. Si osserva che lalgoritmo di ricerca binaria diventa più efficiente man mano che la lunghezza della lista aumenta.
  • 32. La notazione big OPoichè la forma del grafico ottenuto riflette lefficienza dellalgoritmo,è comune classificare gli algoritmi secondo le forme di questi grafici,basati sullanalisi del caso peggiore. La notazione utilizzata peridentificare queste classi è talvolta chiamata “big-theta notation”Tutti gli algoritmi i cui grafici hanno la forma di una parabola, comel algoritmo di ordinamento per inserimento, vengono posti nellaclasse rappresentata da O(n²)Tutti gli algoritmi i cui grafici hanno la forma di una espressionelogaritmica, come la ricerca binaria, rientrano nella classerappresentata da O(ln(n))Conoscere la classe in cui un particolare algoritmo cade ci permette diprevedere le sue prestazioni e di confrontarle con altri algoritmi cherisolvono lo stesso problema
  • 33. Correttezza degli algoritmiImportante è la distinzione tra programma che si crede essere correttoe un programma che è correttoSi è cercato di applicare le tecniche di logica formale per dimostrarela correttezza di un programma, cioè il fatto che lalgoritmorappresentato da un programma faccia quello che è destinato a fareUna prima prova di correttezza inizia con lassunzione che certecondizioni, chiamate precondizioni, siano soddisfatte alliniziodellesecuzione del programmaSecondo passo in una prova di correttezza è quello di considerare inche modo le conseguenze di queste precondizioni si propagano nelprogramma
  • 34. Correttezza degli algoritmiUna dimostrazione di correttezza procede poi identificandoasserzioni che possono essere stabilite in vari punti del programma.Ognuna di esse è conseguenza delle precondizioni del programma edellinsieme di istruzioni che portano al punto in cui è stabilitalasserzione.Se lasserzione stabilita alla fine del programma corrisponde allepostcondizioni desiderate, possiamo concludere che il programma ècorretto.I progressi nello sviluppo di tecniche per verificare la correttezza diun programma continuano ad essere una sfida. Uno dei progressi piùsignificativi si ha nel linguaggio di programmazione SPARK. Unprogramma in SPARK non presenta solo lalgoritmo da applicare, maanche le informazioni necessarie per lapplicazione delladimostrazione formale di correttezza.
  • 35. BibliografiaBrookshear, J. Glenn, 2012, Computer Science: An Overview,11/E, Addison-Wesley

×