Dal corso di Informatica della laurea triennale. Algoritmi. Algoritmi. Proprietà fondamentali degli algoritmi. Algoritmi.

Documenti analoghi
Cos è l informatica? Un esempio di algoritmo. Che cos è un algoritmo? Algoritmi e loro proprietà. non ambigue ed effettivamente calcolabili

Sistemi di Elaborazione delle Informazioni

Algoritmi e loro proprietà. Proprietà formali degli Algoritmi Efficienza rispetto al tempo Efficienza rispetto allo spazio

Algoritmi e loro proprietà. Che cos è un algoritmo? Un esempio di algoritmo

Corso di Informatica A.A

Programmazione. Dipartimento di Matematica. Ing. Cristiano Gregnanin. 29 febbraio Corso di laurea in Matematica

Corso di Informatica di Base

Corso di Informatica

Laboratorio di Programmazione Laurea in Ingegneria Civile e Ambientale

Fondamenti di Informatica Laurea in Ingegneria Civile e Ingegneria per l ambiente e il territorio

Algoritmi. Pagina 1 di 5

Problema: dati i voti di tutti gli studenti di una classe determinare il voto medio della classe.

L ELABORATORE ELETTRONICO

in termini informali: un algoritmo è una sequenza ordinata di operazioni che risolve un problema specifico

Il Concetto Intuitivo di Calcolatore. Esercizio. I Problemi e la loro Soluzione. (esempio)

INFORMATICA. Scienza dei calcolatori elettronici (computer science) Scienza dell informazione (information science)

Laboratorio di Programmazione Laurea in Ingegneria Civile e Ambientale

Il Concetto Intuitivo di Calcolatore. Esercizio. I Problemi e la loro Soluzione. (esempio)

Sommario. Problema computazionale Sviluppo software Algoritmi. Istruzioni Sequenziali, Condizionali, Cicliche; Javascript

Informatica Generale Andrea Corradini Gli algoritmi e la risoluzione di problemi

Concetti Introduttivi. Il Computer

Laboratorio di Programmazione Laurea in Ingegneria Civile e Ambientale

Algoritmi e diagrammi di flusso Classi seconde

Sistemi di Elaborazione delle Informazioni

ELEMENTI DI INFORMATICA L. Ing. Claudia Chiusoli

ALGORITMI E SOLUZIONI DI PROBLEMI

Ad ogni problema computazionale possiamo associare una misura della sua complessità.

o Introduzione agli algoritmi o Rappresentazione delle Informazioni o Architettura del calcolatore o Reti di Calcolatori

Linguaggio Testuale. E un formalismo che consente di rappresentare gli algoritmi mediante semplici istruzioni in linguaggio «parlato»

Strutture di Controllo

Appunti di informatica. Lezione 4 anno accademico Mario Verdicchio

Corso di Informatica. Problemi ed algoritmi. Ing Pasquale Rota

Informatica di Base - 6 c.f.u.

Progettazione di algoritmi e attributi

Dall algoritmo al calcolatore: concetti introduttivi. Algoritmo. Problema: consumo medio 9/27/2018. Fondamenti di Programmazione 3

CdL in Medicina Veterinaria - STPA AA

Elementi di Informatica. Introduzione. Cos è l informatica. Corso di Laurea in Ingegneria Biomedica aa 2003/2004. Ing.

Fondamenti di Informatica. Algoritmi di Ricerca e di Ordinamento

Informatica di Base - 6 c.f.u.

L ELABORATORE ELETTRONICO!

I flow chart. Informatica Generale 14/15 Scienze della comunicazione. cristina gena.

Algoritmi e Programmi

Istruzioni di controllo: SEQUENZA

ALGORITMI. Obiettivo: risolvere problemi mediante l uso di un elaboratore elettronico. Elaboratore elettronico

CORSO DI PROGRAMMAZIONE E INFORMATICA GENERALE 1

Informatica, Algoritmi, Linguaggi

Caratteristiche di un calcolatore elettronico

Sommario. Problema computazionale Sviluppo software Algoritmi. Istruzioni Sequenziali, Condizionali, Cicliche; Javascript

PROGRAMMAZIONE: Le strutture di controllo

Flow-chart. Introduzione agli algoritmi e ai diagrammi a blocchi.

Introduzione all informatica

Dall analisi alla codifica (1)

Sviluppo di programmi

La Programmazione particolare insieme di azioni particolare tipologia di dati risolvere un problema

Elementi di Informatica e Programmazione

Analisi strutturata 1

Lezione 5 e 6. Fabio Scotti ( ) Laboratorio di programmazione per la sicurezza. Valentina Ciriani ( ) Laboratorio di programmazione

Sviluppo di programmi

Programmazione Strutturata

Lezione 8. Soluzione di un problema Problema. Soluzione di un problema. Comprensione del Problema. Analisi. Introduzione agli algoritmi

Diagrammi di flusso. Un metodo per rappresentare graficamente gli algoritmi. sotto programma. Input/ Output. Start. predicato Elaborazione Stop

Introduzione. Informatica B. Daniele Loiacono

Il Concetto di Algoritmo Corso di Informatica Laurea in Fisica

Laboratorio di Calcolo di Aerodinamica: II Lezione

UNIVERSITÀ DEGLI STUDI DI PAVIA FACOLTÀ DI INGEGNERIA. Algoritmi

Introduzione alla programmazione

Che cos è l Informatica?

Laboratorio di Programmazione Laurea in Ingegneria Civile e Ambientale

Sviluppo di programmi

Computer. Capitolo 2. 05/04/2012 continuazione 1

Programma del corso. Elementi di Programmazione. Introduzione agli algoritmi. Rappresentazione delle Informazioni. Architettura del calcolatore

liceo B. Russell PROGRAMMAZIONE INDIRIZZO: SCIENTIFICO SCIENZE APPLICATE BIENNIO: SECONDA DISCIPLINA: INFORMATICA

Elaboratore Elettronico

3. Programmi e algoritmi

Informatica Generale Andrea Corradini Algoritmi: ordinamento per inserimento e ricorsione

Il flusso algoritmico di esecuzione

n Risolvere un problema significa individuare un procedimento che permetta di arrivare al risultato partendo dai dati

Rappresentazione degli algoritmi

INFORMATICA. Strutture iterative

Risolvere un problema significa individuare un procedimento che permetta di arrivare al risultato partendo dai dati Termine algoritmo da:

Fondamenti di Informatica. Definizione di Algoritmo. Algoritmo Euclideo. Prof.V.L.Plantamura Informatica e Comunicazione Digitale a.a.

Dal Problema all Algoritmo. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni

Università degli Studi di Brescia INFORMATICA. Dipartimento di Ingegneria Meccanica e Industriale

Programmazione I. Fondamenti di programmazione. Problemi, Algoritmi, Diagrammi di flusso

Informatica/ Ing. Meccanica/ Ing. Edile/ Prof. Verdicchio/ 05/02/2014/ Foglio delle domande / VERSIONE 1

Fondamenti di Informatica

Efficienza: esempi. Nella lezione precedente. Fondamenti di Informatica. Ferdinando Cicalese. ! Qualche problema computazionale

L ELABORATORE ELETTRONICO

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE. Marco D. Santambrogio Ver. aggiornata al 9 O/obre 2010

Iterazione A. Ferrari

Programmazione a blocchi. Algobuild Prof. Sergio Roselli

Appunti di informatica. Lezione 8 anno accademico Mario Verdicchio

Diagramma a blocchi per la selezione, in un mazzo di chiavi, di quella che apre un lucchetto

Introduzione agli Algoritmi

Strutture di Controllo

3. Indicare cosa sta a significare la figura geometrica del rombo in un diagramma a blocchi

Concetti di base dell ICT

Transcript:

Dal corso di Informatica della laurea triennale Algoritmi Algoritmo: (dal nome del matematico persiano al- Khwarizmi, 825 d.c.) sistema di regole e procedure di calcolo ben definite che portano alla soluzione di un problema con un numero finito di operazioni (Schneider & Gersting 2007) Informatica - Facoltà di Psicologia - Laurea magistrale 1 Algoritmi Algoritmi Il concetto di algoritmo non è limitato all informatica: i seguenti possono essere visti come algoritmi Ricette di cucina Istruzioni di montaggio Mappa con strade da seguire Esistenza di un algoritmo per risolvere un problema la risoluzione del problema può essere automatizzata Risoluzione automatizzata: implementata in hardware e software Con la conoscenza dei principi di base degli algoritmi possiamo: Avere un idea più chiara di come un computer può risolvere i problemi Creare nuovi, efficaci algoritmi Comprendere gli algoritmi scritti da altri Algoritmi Gli algoritmi menzionati precedentemente non sono abbastanza precisi da essere automatizzabili I computer non possiedono intuito Fanno ciò che diamo loro ordine di fare, non ciò che vorremmo che facciano Quando si scrive un algoritmo, bisogna tenere presenti: Capacità: il computer deve sapere quali operazioni deve svolgere e come Linguaggio: la descrizione dell algoritmo non può essere ambigua, cioè deve avere un unica possibile interpretazione Contesto: non dare nulla per scontato riguardo alle caratteristiche dell input o all ambiente in cui l algoritmo verrà eseguito Proprietà fondamentali degli algoritmi Input specificato: Input: dati inseriti dall esterno, usati dall algoritmo Da specificare: tipo, quantità, forma dell input (oppure specificare che non c è input alcuno) Output specificato: Il risultato atteso della computazione dell algoritmo Da specificare: tipo, quantità, forma dell output (oppure specificare che non c è output alcuno) 1

Proprietà fondamentali degli algoritmi Determinatezza: Da specificare: in un modo preciso e completo, la sequenza di operazioni che trasforma l input nell output; gestire anche eventuali situazioni di errore Così si può assicurare che esecuzioni diverse dell algoritmo con gli stessi dati di input diano lo stesso risultato Efficacia: Le operazioni dell algoritmo devono essere effettivamente eseguibili in modo meccanico (senza ulteriori informazioni non specificate, intuito, creatività) Proprietà fondamentali degli algoritmi Terminazione: L algoritmo deve terminare in un tempo finito (fornendo l output corretto o segnalando che non è possibile arrivare a una soluzione) Senza la proprietà di terminazione: durante l esecuzione dell algoritmo, l agente sta ancora cercando di arrivare a una soluzione oppure è bloccato in un ciclo infinito? Linguaggio Linguaggio Linguaggio naturale (come l italiano, l inglese, ): non è adatto per esprimere gli algoritmi Ambiguità: diverse interpretazioni delle stesse frasi Linguaggi formali (come i linguaggi di programmazione): il significato di ogni operazione è definito in un modo preciso, non ambiguo Un compromesso: pseudocodice Lo pseudocodice si compone di costrutti in italiano (o inglese) studiati per assomigliare a istruzioni di un linguaggio di programmazione In realtà non si eseguono le istruzioni di pseudocodice sul computer Altri esempi: diagrammi di flusso Linguaggio Linguaggio Esempi di pseudocodice: Esempi di pseudocodice: Somma Numeri da 1 a 100 Input: nessuno Output: la somma dei numeri da 1 a 100 1. Imposta il valore di somma a 0 2. Imposta il valore di x a 1 3. Finché x è minore o uguale a 100 esegui i passaggi 4 e 5 4. Somma x al valore di somma 5. Somma 1 al valore di x 6. Stampare il valore di somma 7. Terminare 2

Linguaggio Esempio di diagrammi di flusso: Inizio Vediamo l esempio di un algoritmo di ordinamento chiamato selection sort Definisci Artista per estrarre il nome dei musicisti 2 Scegli un estremo di partenza e chiama la prima posizione 3 Chiama la posizione subito adiacente a Problema da risolvere: riordinare una serie di CD in ordine alfabetico in base al nome del gruppo (oppure cantante o compositore) L artista nella 4 posizione segue quello in? No C è ancora un 5 posto dopo la posizione? Sì Sì Scambia i CD nelle posizioni e Chiama la posizione che segue la corrente Anche se normalmente si usano linguaggi (semi-) formali per scrivere gli algoritmi, per semplicità usiamo l italiano Stop No 6 Dopo la posizione No c e ne sono almeno Sì altre due? Chiama la posizione che segue la corrente e quella immediatamente successiva ORDINA CD Input: una sequenza di CD Output: gli stessi CD ordinati alfabeticamente (in base al gruppo/cantante/ compositore) 1. Usare Artista per il nome del gruppo/cantante/compositore di un CD 2. Usare per la posizione sullo scaffale che corrisponde all inizio della sequenza di CD 3. Usare per la posizione immediatamente adiacente ad 4. Se l Artista del CD nella posizione segue alfabeticamente l Artista del CD nella posizione, scambiare i due CD e continuare; in caso contrario continuare 5. Se c è ancora almeno un posto dopo, considerarlo la nuova posizione e tornare all istruzione 4; in caso contrario continuare 6. Se ci sono due o più posti dopo, considerare quello immediatamente successivo come nuova posizione e quello ancora dopo come nuova posizione e saltare all istruzione 4; in caso contrario terminare Istruzione 1: Usare Artista per riferisi al nome del gruppo/cantante/compositore di un CD Definisce Artista: una abbreviazione per il nome del gruppo/cantante/compositore del CD Rende più facile la definizione dell istruzione 4 ma non è indispensabile Istruzione 2: Usare per la posizione sullo scaffale che corrisponde all inizio della sequenza di CD Definisce per fare riferimento a una posizione L istruzione specifica anche un significato iniziale per, cioè la posizione che corrisponde all inizio della sequenza di CD Istruzione 3: Usare per la posizione immediatamente adiacente ad Simile all istruzione 2 : Se l Artista del CD nella posizione segue alfabeticamente l Artista del CD nella posizione scambiare i due CD, poi continuare; in caso contrario continuare Questa è l istruzione che svolge la gran parte del lavoro. L istruzione confronta i nomi degli artisti che caratterizzano i CD in e e, se necessario, li scambia in modo che siano nell ordine corretto 3

: Se c è ancora almeno un posto dopo, considerarlo la nuova posizione e tornare all istruzione 4; in caso contrario continuare Ridefinisce in modo che il nome si riferisca alla posizione successiva nella sequenza, se esiste Con questa nuova definizione di è possibile eseguire nuovamente l istruzione 4, confrontando una diversa coppia di CD Istruzione 6: Se ci sono due o più posti dopo, considerare quello immediatamente successivo come nuova posizione e quello ancora dopo come nuova posizione e saltare all istruzione 4; in caso contrario terminare Arrivati a questa istruzione, il CD in precede alfabeticamente tutti i CD nelle posizioni successive Possiamo fare avanzare di una posizione e percorrere ancora tutti i CD, localizzando il CD che precede alfabeticamente tutti gli altri Quando non ci sono almeno due posti per definire le posizioni e e quindi fa riferimento alla penultima posizione tutti i CD sono stati ordinati e l algoritmo termina Ordina CD e le proprietà fondamentali degli algoritmi: Input/output specificato: vedi descrizione Input e Output Determinatezza: scritto in linguaggio naturale, ma con precisione Efficacia: le operazioni dell algoritmo sono semplici e facilmente eseguibili automaticamente Se la sequenza non esiste fisicamente, ma logicamente dentro il computer, le operazioni possono essere facilmente realizzabili dal computer Terminazione: Dato che il numero di posizioni è finito, anche il numero di coppie di posizioni (Alpha/) è finito. Più precisamente, indicando con N il numero di CD: Ciclo di istruzioni 4 e 5: può essere ripetuto al massimo N-1 volte Perché? La posizione di è incrementata ogni volta che l istruzione 5 viene eseguita Quando non può essere aumentato, usciamo dal ciclo e andiamo all istruzione 6 Ciclo di istruzioni 4, 5 e 6: sarà ripetuto N-1 volte Perché? La posizione di è incrementata ogni volta l istruzione 6 viene eseguita Quando fa riferimento alla posizione N-1, usciamo dal ciclo e terminiamo Passo 1 Passo 2 Passo 3 Passo 4 Passo 5 Passo 6 Passo 7 Passo 8 Istruzione 1 Istruzione 2 Istruzione 3 4

Passo 9 Passo 10 Passo 11 Passo 12 Passo 13 Passo 14 Passo 15 Passo 16 Istruzione 6 Passo 17 Passo 18 Passo 19 Passo 20 Passo 21 Passo 22 Passo 23 Passo 24 Istruzione 6 Istruzione 6 Tipi di istruzione Passo 25 Passo 26 Passo 27 Istruzione 6 Tre tipi di istruzioni: Istruzioni sequenziali: Eseguono singole attività ben definite Terminata l'attività, l'algoritmo passa all'istruzione successiva Normalmente: calcolo, ingresso, uscita Per esempio: istruzioni 1, 2 e 3 dell algoritmo Ordina CD Istruzioni iterative: Istruzioni di ciclo dell'algoritmo Indicano di non proseguire con l'istruzione successiva, ma di ripetere un blocco di istruzioni Per esempio: istruzioni 5 e 6 dell algoritmo Ordina CD specificano di eseguire un istruzione (istruzione 4) già eseguita in precedenza 5

Tipi di istruzione Inizio 1 2 Definisci Artista per estrarre il nome dei musicisti Scegli un estremo di partenza e chiama la prima posizione Diagramma di " flusso di Ordina CD Istruzioni condizionali: Istruzioni che pongono una domanda L'istruzione successiva è selezionata sulla base della risposta fornita alla domanda Per esempio: istruzioni 4, 5 e 6 dell algoritmo Ordina CD Si noti che un istruzione iterativa è normalmente anche condizionale (spesso questo tipo di istruzione viene chiamato semplicemente iterativo ) La condizione specifica in quali situazioni il ciclo deve essere ripetuto e in quali situazioni abbandonare il ciclo e continuare Stop 3 Chiama la posizione adiacente ad 4 L artista nella posizione segue quello in? No 5 C è ancora un posto dopo la posizione? No 6 Dopo la posizione No ce ne sono almeno altre due? Sì Sì Sì Scambia i CD nelle posizioni e Chiama la posizione che segue la corrente Chiama la posizione che segue la corrente e quella immediatamente successiva Pseudocodice di Ordina CD ORDINA CD Input: una sequenza di gruppi/cantanti/compositori Artista[1],, Artista[n] (dove n 2) Output: la stessa sequenza ordinata alfabeticamente Assegna il valore 1 a Assegna il valore 2 a Finché n-1 Finché n Se Artista[] > Artista[] allora Assegna il valore di Artista[] a Scambio Assegna il valore di Artista[] a Artista[] Assegna il valore di Scambio a Artista[] Assegna il valore +1 a e torna all istruzione 4 Assegna il valore +1 a, assegna il valore +2 a Istruzioni sequenziali: Per esempio: Assegna il valore 1 a Istruzioni iterative: Due istruzioni: Finché (while) Ripeti/finché (repeat/until) Finché (while): Finché la condizione è vera le operazioni all'interno del corpo del ciclo vengono ripetute Finché una condizione è vera (ripeti le seguenti istruzioni) istruzione 1 istruzione 2 istruzione n Se la condizione non diventa mai falsa, abbiamo un ciclo infinito (istruzione 1, istruzione 2,, istruzione n, istruzione 1, istruzione 2,, istruzione n, istruzione 1, istruzione 2, ) 6

un esempio chiedere il numero di matricola a dieci studenti Ripeti/finché (repeat/until): ripeti una serie di istruzioni fino a che la condizione diventa vera Assegna il valore 0 a contatore Finché contatore è minore di 10 Chiedi allo studente il numero di matricola Assegna il numero inserito a NumMatr[contatore] Incrementa contatore di 1 Ripeti (le seguenti istruzioni) istruzione 1 istruzione 2 istruzione n finché una condizione diventa vera Se la condizione non diventa mai vera, abbiamo un ciclo infinito (istruzione 1, istruzione 2,, istruzione n, istruzione 1, istruzione 2,, istruzione n, istruzione 1, istruzione 2, ) Finché (while): le istruzioni vengono eseguite zero o più volte Ripeti/finché (repeat/until): le istruzioni vengono eseguite almeno una volta Finché una condizione è vera istruzione 1 istruzione 2 istruzione n Ripeti istruzione 1 istruzione 2 istruzione n finché una condizione diventa vera Istruzioni condizionali: La più comune è se/allora/altrimenti (if/then/else) La parte per altrimenti può essere omessa (in questo caso altrimenti vuol dire continuare all istruzione successiva) Se una condizione è vera Allora istruzione 1 istruzione n Altrimenti istruzione 1 istruzione n Pseudocodice: esercizio Scrivere la versione in pseudocodice di un algoritmo che calcola la somma tra due numeri mediante la tecnica dell incremento ripetuto Cioè, x+y = x incrementato per y volte (ad esempio, 2+3 = 2+1+1+1) Pseudocodice: esercizio Possibile soluzione Somma di due numeri Input: due numeri x e y Output: x+y Assegna il valore 1 a i Finché (i y) Incrementa x di 1 Incrementa i di 1 Provare a simulare l algoritmo con due input 7

Pseudocodice: esercizio Scrivere la versione in pseudocodice di un algoritmo che calcola il prodotto tra due numeri mediante la tecnica della somma ripetuta Tecnica della somma ripetuta: x*y = x sommato y volte (ad esempio, 2*3 = 2+2+2) Altri esempi: ricerca sequenziale Algoritmo di ricerca: Abbiamo un elenco di n nomi in un elenco telefonico Ricerca Nome Input: una sequenza di nomi Nome[1],, Nome[n], una sequenza di numeri Tel[1],, Tel[n], il nome da cercare NomeDaCercare Output: il numero di telefono che corrisponde a NomeDaCercare Assegna il valore 1 a i e il valore falso a Trovato Finché (Trovato = falso) e (i n) Se NomeDaCercare = Nome[i] allora Stampa Tel[i] Assegna il valore vero a Trovato Altrimenti Incrementa i di 1 Se (Trovato = falso) allora Stampa il messaggio Questo nome non è nell elenco Altri esempi: ricerca binaria Altri esempi: ricerca binaria L algoritmo precedente è poco efficiente: sfruttando il fatto che l elenco telefonico è ordinato, possiamo cercare più velocemente Algoritmo di ricerca binaria: Abbiamo un elenco di n nomi in un elenco telefonico I nomi sono ordinati Possiamo ottenere un algoritmo più veloce di Ricerca Nome: Per esempio, cerchiamo Mastroianni, Marcello Algoritmo di ricerca binaria: Abbiamo un elenco di n nomi in un elenco telefonico I nomi sono ordinati Possiamo ottenere un algoritmo più veloce di Ricerca Nome: Per esempio, cerchiamo Mastroianni, Marcello Elemento (1+15)/2 = Fellini, Federico Elenco di nomi Elenco di nomi Altri esempi: ricerca binaria Altri esempi: ricerca binaria Algoritmo di ricerca binaria: Abbiamo un elenco di n nomi in un elenco telefonico I nomi sono ordinati Possiamo ottenere un algoritmo più veloce di Ricerca Nome: Per esempio, cerchiamo Mastroianni, Marcello Elemento (9+15)/2 = Rossellini, Roberto Algoritmo di ricerca binaria: Abbiamo un elenco di n nomi in un elenco telefonico I nomi sono ordinati Possiamo ottenere un algoritmo più veloce di Ricerca Nome: Per esempio, cerchiamo Mastroianni, Marcello Elemento (9+11)/2 = Mastroianni, Marcello Elenco di nomi Elenco di nomi 8

Altri esempi: ricerca binaria Ricerca Binaria Nome Input: una sequenza ordinata di nomi Nome[1],, Nome[n], una sequenza di numeri Tel[1],, Tel[n], il nome da cercare NomeDaCercare Output: il numero di telefono che corrisponde a NomeDaCercare Assegna il valore 1 a Inizio, il valore n a Fine, e il valore falso a Trovato Finché (Trovato = falso) e (Inizio Fine) Assegna il valore della posizione centrale tra Inizio e Fine a m Se NomeDaCercare = Nome[m] allora Stampa Tel[i] Assegna il valore vero a Trovato Altrimenti Se NomeDaCercare < Nome[m] allora Assegna m-1 a Fine Altrimenti Assegna m+1 a Inizio Se (Trovato = falso) allora Stampa il messaggio Questo nome non è nell elenco Altri esempi: ricerca del massimo valore Algoritmo di ricerca del massimo valore: Per esempio, una lista di voti di un esame: quale studente ha la votazione più alta? Altri esempi: ricerca del massimo valore Algoritmo di ricerca del massimo valore: Per esempio, una lista di voti di un esame: quale studente ha la votazione più alta? Ricerca Massimo Valore Input: una sequenza di elementi A[1],, A[n] Output: l elemento massimo della sequenza A[1],, A[n] e la sua posizione Assegna il valore A[1] a MassVal, il valore 1 a posmassval, e il valore 2 a i Finché i n Se A[i]>MassVal allora Assegna il valore A[i] a MassVal Assegna il valore i a posmassval Incrementa i di 1 Stampa il valore di MassVal Stampa il valore di posmassval Altri esempi: ordinamento Algoritmo di ordinamento: Due esempi: Selection sort (ordinamento per selezione): Ordina CD è l algoritmo di ordinamento per selezione (applicato ai CD) Bubble sort: Prima coppia di elementi (posizioni 1 e 2): ordina gli elementi della coppia Seconda coppia di elementi (posizioni 2 e 3): ordina gli elementi della coppia Quando hai ordinato l ultima coppia di elementi, torna all inizio ma a questa iterazione abbiamo la garanzia che l ultimo elemento è il valore massimo, quindi non deve essere preso in considerazione Altri esempi: bubble sort Algoritmo di ordinamento: Bubble sort Bubble sort Input: una sequenza di elementi A[1],, A[n] Output: la stessa sequenza ordinata alfabeticamente Assegna il valore n a ultimo Finché ultimo>1 Assegna il valore 1 a i Finché i<(ultimo-1) Se (A[i]<A[i-1]) allora Assegna il valore A[i] a Scambio Assegna il valore A[i-1] a A[i] Assegna il valore Scambio a A[i-1] Incrementa i di 1 Decrementa ultimo di 1 Efficienza di un algoritmo Come si può dire che un algoritmo per risolvere (correttamente!) un problema è migliore di un altro? Facilità di comprensione ed eleganza Efficienza: l uso delle risorse da parte di un algoritmo Risorse: Tempo, in termini di numero di operazioni per ottenere il risultato o la soluzione di un problema Spazio, in termini di numero massimo di bit di informazioni che devono essere memorizzate durante l esecuzione dell algoritmo Normalmente consideriamo il caso peggiore Per esempio, nella ricerca sequenziale, il caso in cui la voce da trovare è nell ultima posizione nella sequenza 9

Efficienza di un algoritmo Efficienza di un algoritmo Algoritmi di ricerca: n = numero di elementi della sequenza ordinata Ricerca sequenziale: n confronti Numero di istruzioni eseguite: c*n, dove c è un fattore costante (il numero di istruzioni per ogni confronto) Il fattore c non è considerato importante nella classificazione degli algoritmi: ricerca sequenziale è un algoritmo di ordine n Ricerca binaria: log 2 n confronti Numero di istruzioni eseguite: c * log 2 n, dove c e c non sono necessariamente uguali Anche la base del logaritmo non è considerata importante: Ricerca binaria è un algoritmo di ordine log n Efficienza di un algoritmo Perché i fattori c e c non sono importanti per la classificazione dell efficienza degli algoritmi? Per c e c fissi, è sempre possibile trovare un valore N tale che, per ogni n N: cn > c log n Cioè, per n sufficientemente grande (quando la grandezza del problema n supera N) l algoritmo di ricerca binaria risulta sempre vincente, indipendentemente da c e c È vincente perché impiega meno passi per risolvere lo stesso problema Diciamo che l algoritmo di ricerca binaria è più efficiente dell algoritmo di ricerca sequenziale Efficienza di un algoritmo Algoritmi di ordinamento: Sia selection sort che bubble sort sono di ordine n 2 Esistono algoritmi per ordinamento di ordine n log n Algoritmi efficienti Intrattabilità e indecidibilità Ordine di un algoritmo: consideriamo il polinomiale massimo Per esempio, un algoritmo che esegue cn 2 + c n istruzioni è di ordine n 2 Algoritmi limitati polinomialmente: algoritmi di ordine n m per un m costante Questi algoritmi vengono chiamati efficienti Esistono dei problemi per cui non esistono algoritmi efficienti (problemi intrattabili) Per alcuni problemi, non conosciamo algoritmi efficienti, ma non sono necessariamente intrattabili: problemi NP-completi Per esempio: Il problema di trovare l insieme dei biglietti aerei più economici per visitare n città Il problema di trovare un insieme di prodotti di un negozio con prezzo totale di esattamente k euro Esistono dei problemi (definiti in un modo preciso, con obiettivi anche definiti in un modo preciso) per cui non può esistere una soluzione algoritmica (problemi indecidibili) 10