Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame I.1 Algoritmi Elisabetta Ronchieri Università di Ferrara Dipartimento di Economia e Management Insegnamento di Informatica Ottobre 9, 2015 Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Argomenti 1 Introduzione 2 Rappresentazione Linguaggi grafici Linguaggio naturale Pseudocodice 3 Algoritmi notevoli Algoritmi di ricerca Algoritmi di ordinamento 4 Possibili domande d’esame Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Definizione formale Un algoritmo è un insieme ordinato di passi che descrivono i dati che devono essere utilizzati e determinano la sequenza di azioni elementari che devono essere svolte per risolvere un problema (una classe di problemi). Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Cosa risolve l’algoritmo Un algoritmo descrive il metodo risolutivo di un problema identificati i dati da usare; definito le azioni da intraprendere; stabilito il risultato. La risoluzione del problema è applicabile ad una classe di problemi riconducibile al problema iniziale: la preparazione di un sugo è un esempio di problema Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Esempi di problemi Impostazione del ciclo di lavaggio di una lavastoviglie. Origami. Prelevamento di contanti dal Bancomat. Calcolo del massimo comun divisore. Preparazione dei cantucci toscani. Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Chi esegue l’algoritmo La sequenza di passi può essere intrapresa da un esecutore. Esempi di esecutore sono: il calcolatore o l’elaboratore; il cervello umano. L’esecutore automatizza la risoluzione del problema. Elisabetta Ronchieri Figura scaricata da Dreamstime.com I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Proprietà principali dell’algoritmo Non ambiguo Le azioni devono essere univocamente interpretabili dall’esecutore. Eseguibile Ogni azione deve essere eseguibile da parte dell’esecutore. Finito Per ogni input l’esecuzione dell’algoritmo deve terminare in un tempo finito. Corretto Se è finito, non ambiguo ed eseguibile. Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Altre proprietà Deterministico Le azioni presenti in un algoritmo devono essere definite senza ambiguità. Terminabile L’esecutore deve terminare in tempo finito per ogni insieme di valori in ingresso. Realizzabile in pratica L’esecutore deve essere in grado di eseguire l’algoritmo con le risorse a sua disposizione (informazioni + tecnologia). Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Altre proprietà Generale Un algoritmo, compatibilmente con i vincoli espressi dal problema, si occupa della risoluzione di classi di problemi. Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Esempi di algoritmi non corretti Algoritmo con output diversi e input uguali ⇒ ambiguo Algoritmo con azioni complesse ⇒ non eseguibile Algoritmo con operazioni cicliche ⇒ non finito Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Esempio di algoritmi ambigui Problema: pagare un bollettino di conto corrente postale. Sequenza di azioni: Andare ad un ufficio postale; Compilare il bollettino di conto corrente postale; Effettuare il pagamento. Sequenza di azioni: Andare all’ufficio postale più vicino; Compilare il bollettino; Assicurarsi di avere la cifra da pagare; Effettuare il pagamento. Algoritmo ambiguo: Algoritmo ancora ambiguo. quale ufficio? ho abbastanza soldi? Cosa manca per renderlo non ambiguo? Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Esempio di algoritmi ambigui Problema: cottura degli spaghetti. Nota: algoritmo puramente sequenziale, le operazioni vengono eseguite in un unico ordine preciso. Sequenza di azioni: Sequenza di azioni: Mettere l’acqua sul fuoco; Attendere l’ebollizione; Mettere il sale; Buttare gli spaghetti; Attendere x minuti; Scolare la pasta. Mettere l’acqua sul fuoco; Mettere il sale; Attendere l’ebollizione; Buttare gli spaghetti; Attendere x minuti; Scolare la pasta. Cosa manca per renderlo non ambiguo? Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Cosa serve per definire un algoritmo Condurre l’analisi del problema. Individuare i possibili ingressi. Determinare le uscite. Definire completamente e dettagliatamente la sequenza dei passi che portano alla soluzione del problema. Scomporre la soluzione in piccoli passi. Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Possibile algoritmo Problema: determinare se il collegamento ad internet del computer funziona. Dati in ingresso: computer Sequenza di azioni: 1 Accendi il computer; 2 Se il collegamento ad internet funziona, allora lascia stare e spegni il computer; 3 Altrimenti se lo hai toccato, allora sei nei guai; 3.1 Se qualcuno lo sa, allora sei proprio nei guai; 3.1.1 Rimarrai nei guai finchè non troverai una scusa decente, per poi spegnere il computer; 3.2 Altrimenti fai finta di niente e spegni il computer; 4 Altrimenti se non lo hai toccato, allora lascia perdere e spegni il computer. Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Cosa si può dire? Usati i dati in ingresso. Descritta la sequenza di passi da svolgere per risolvere il problema. Usate: azioni elementari azioni composte condizionali azioni ripetitive o composte iterative Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Tipi di azioni Azioni elementari Quelle che l’esecutore è in grado di compiere direttamente. Azioni composte condizionali - Se < condizione > allora azioniA altrimenti azioniB in cui è possibile specificare se si devono compiere azioni differenti a seconda che la condizione sia vera (azioniA ) o falsa (azioniB ). Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Tipi di azioni Azioni ripetitive - finchè < condizione > ripeti azioniC in cui le azioniC vengono ripetute fintantochè la condizione è vera, e si termina la ripetizione appena la condizione diventa falsa. - ripeti azioniC finchè < condizione > in cui le azioniC vengono ripetute fintantochè la condizione è falsa, e si termina la ripetizione appena la condizione diventa vera. In assenza di condizione di terminazione l’azione ripetitiva è detta loop o ciclo infinito. In presenza di condizione di terminazione l’azione ripetitiva è detta ciclo finito. Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Linguaggi grafici Linguaggio naturale Pseudocodice Rappresentazione dell’algoritmo Linguaggi grafici Linguaggi testuali Le azioni sono descritte in modo: astratto usando linguaggio naturalea ; costrutti vicini a quelli del linguaggio di programmazione. a come fatto negli esempi precedenti Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Linguaggi grafici Linguaggio naturale Pseudocodice Componente fondamentale Primitiva: elimina ambiguità; si compone di: 1 2 sintassi che si riferisce alla rappresentazione simbolica; semantica che determina il significato. Per esempio il simbolo ← significa assegnamento di valori a nomi descrittivi. Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Linguaggi grafici Linguaggio naturale Pseudocodice Diagramma di flusso È una rappresentazione grafica di un algoritmo. Descrive le azioni da eseguire e l’ordine di esecuzione. È un insieme di blocchi collegati da frecce direzionali. I blocchi rappresentano le operazioni (azioni) dell’algoritmo. Le frecce direzionali indicano il flusso di esecuzione della sequenza di operazioni. I blocchi sono espressi da simboli. Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Linguaggi grafici Linguaggio naturale Pseudocodice Significato dei simboli Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Linguaggi grafici Linguaggio naturale Pseudocodice Regole di utilizzo Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Linguaggi grafici Linguaggio naturale Pseudocodice Blocchi composti Usano blocchi di inizio (Start) e fine (End). Usano blocchi di azione, condizionali e di ingresso/uscita (input/output). Sono relativi: alla sequenza di azioni; all’azione composta condizionale; all’azione composta iterativa. Hanno 1 solo arco in ingresso e 1 solo arco in uscita. Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Linguaggi grafici Linguaggio naturale Pseudocodice Sequenza di azioni Ogni azione deve essere eseguita una di seguito all’altra. Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Linguaggi grafici Linguaggio naturale Pseudocodice Azione composta condizionale Se l’istruzione è vera esegui le azioni di un ramo, altrimenti esegui quelle dell’altro ramo. Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Linguaggi grafici Linguaggio naturale Pseudocodice Esempio di algoritmo con azione composta cond. Problema: dati due numeri N1 e N2 determinare il maggiore. Rappresentazione parziale del problema. Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Linguaggi grafici Linguaggio naturale Pseudocodice Azione composta iterativa Un’azione viene ripetuta o iterata. Si esce dalla ripetizione quando la condizione è vera. Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Linguaggi grafici Linguaggio naturale Pseudocodice Esempio di algoritmo con ciclo d’attesa Problema: calcolare il Massimo Comun Divisore (MCD) tra i numeri V 1 e V 2. 1 Prendi i valori in ingresso V 1, V 2. 2 Se V 1 < V 2 allora scambiali. 3 Metti in R il resto tra V 1 e V 2. Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Linguaggi grafici Linguaggio naturale Pseudocodice Esempio di algoritmo con ciclo d’attesa Problema: calcolare il Massimo Comun Divisore (MCD) tra i numeri V 1 e V 2. 4 Ripeti finchè R <> 0: 5 Metti in V 1 il contenuto di V 2. 6 Metti in V 2 il contenuto di R. 7 Metti in R il resto tra V 1 e V 2. 8 Fine ripeti. 9 Mostra MCD pari a V 2. Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Linguaggi grafici Linguaggio naturale Pseudocodice Esempio di algoritmo con ciclo infinito Problema: determinare il numero del contatore i. NOTA: In questa soluzione sono presenti almeno due errori. Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Linguaggi grafici Linguaggio naturale Pseudocodice Caratteristiche Vantaggi: Grafici; Adatti a comunicare il contenuto dell’algoritmo all’uomo; Adatti a rappresentare processi sequenziali; Immediatamente visualizzabili; Poco ambigui; Convertibili in altre rappresentazioni. Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Linguaggi grafici Linguaggio naturale Pseudocodice Diagramma di flusso strutturato Il diagramma di flusso si dice strutturato se presenta solo costrutti sequenziali, condizionali e di ripetizione. Presenta le azioni in modo ordinato. Facilita il passaggio dalla rappresentazione grafica al programma. Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Linguaggi grafici Linguaggio naturale Pseudocodice Caratteristiche Svantaggi: Spesso non entrano in una pagina; Difficili da seguire e modificare; Non sempre strutturati; Lontani dai linguaggi dei calcolatori; Possono rivelarsi errati in fase di programmazione. Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Linguaggi grafici Linguaggio naturale Pseudocodice Come si verifica un algoritmo Tramite una prova logica della correttezza della linea operativa tracciata: utilizzando dati campione; calcolando i risultati; controllando i risultati. Procedimento valido per tutte le rappresentazioni dell’algoritmo. Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Linguaggi grafici Linguaggio naturale Pseudocodice Esempio di verifica di un algoritmo Problema: somma di due numeri N1 e N2. Dati iniziali: N1 è 12, N2 è 35. Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Linguaggi grafici Linguaggio naturale Pseudocodice Esempio di verifica di un algoritmo Problema: somma di due numeri N1 e N2. Dati iniziali: N1 è 12, N2 è 35. Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Linguaggi grafici Linguaggio naturale Pseudocodice Esempio di verifica di un algoritmo Problema: somma di due numeri N1 e N2. Dati iniziali: N1 è 12, N2 è 35. Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Linguaggi grafici Linguaggio naturale Pseudocodice Esempio di verifica di un algoritmo Problema: somma di due numeri N1 e N2. Dati iniziali: N1 è 12, N2 è 35. Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Linguaggi grafici Linguaggio naturale Pseudocodice Esempio di verifica di un algoritmo Problema: somma di due numeri N1 e N2. Dati iniziali: N1 è 12, N2 è 35. Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Linguaggi grafici Linguaggio naturale Pseudocodice Esempio di verifica di un algoritmo Problema: somma di due numeri N1 e N2. Dati iniziali: N1 è 12, N2 è 35. Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Linguaggi grafici Linguaggio naturale Pseudocodice Come si progetta un algoritmo Dato un problema: determinare il massimo tra due numeri N1 e N2. Suddividere il problema in azioni: 1 Leggi il primo numero e mettilo nella cella N1. 2 Leggi il secondo numero e mettilo nella cella N2. 3 Se il numero contenuto nella cella N1 > o uguale al numero contenuto nella cella N2: 4 Metti nella cella max il contenuto di N1. 5 Altrimenti metti nella cella max il contenuto di N2. 6 Restituisci il valore di max. Realizzare il diagramma di flusso. Verificare l’algoritmo. Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Linguaggi grafici Linguaggio naturale Pseudocodice Esempio di problema da risolvere Problema: risolvere l’equazione lineare ax + b = 0 nell’incognita x. x = − ba Azioni dell’algoritmo: Leggi i valori a e b. Calcola −b. Dividi quello che hai ottenuto per a e chiama x il risultato. Stampa x. NOTA: Introdurre nella sequenza di azioni il controllo sul valore a. Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Linguaggi grafici Linguaggio naturale Pseudocodice Esempio di problema da risolvere Problema: stabilire se una parola P viene alfabeticamente prima della parola Q. Dati iniziali: P uguale a pulcino, Q uguale a quadrifoglio. Azioni dell’algoritmo: 1 Leggi i valori P e Q. 2 Ripeti quanto segue fino a quando hai trovato le prime lettere diverse: 3 Se la prima lettera di P < della prima lettera Q: 4 Allora scrivi vero ed esci. 5 Altrimenti se la prima lettera di P > della prima lettera di Q: 6 Allora scrivi falso. 7 Altrimenti le lettere sono uguali. 8 Togli da P e Q la prima lettera. Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Linguaggi grafici Linguaggio naturale Pseudocodice Esempio di problema da risolvere Problema: calcolare il massimo di un insieme di numeri naturali di nome A. Dati iniziali: A contiene i seguenti numeri 2, 10, 4, 25, 1. Azioni dell’algoritmo: 1 Scegli un elemento come massimo provvisorio detto max 2 Per ogni elemento i-esimo dell’insieme A: 3 se i > max eleggi i come nuovo massimo provvisorio 4 il risultato sarà max Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Linguaggi grafici Linguaggio naturale Pseudocodice Linguaggio naturale È una rappresentazione letterale di un algoritmo. Usa frasi rigorose anzichè simboli grafici. Sfrutta tre tipi di operazioni: 1 2 3 ingresso e uscita (dati e risultati del problema); assegnamento (P = A con il significato assegna il nome logico P al valore A); controllo (modificano la sequenza dell’esecuzione). Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Linguaggi grafici Linguaggio naturale Pseudocodice Caratteristiche Vantaggi: Intuitività. Facilità di scrittura. Svantaggi: Ambiguità. Ridondanza. Scarso rigore. Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Linguaggi grafici Linguaggio naturale Pseudocodice Esempio di notazione lineare Problema: calcolare il prodotto di due numeri interi positivi A e B. NOTA: l’esecutore conosce solo le operazioni di somma, sottrazione e confronto tra numeri. 1 Leggi A e B. 2 P = A. 3 se B è uguale a 1 allora vai all’istruzione 7. 4 P = P + A. 5 B = B − 1. 6 vai all’istruzione 3 7 scrivi P. 8 fine Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Linguaggi grafici Linguaggio naturale Pseudocodice Pseudocodice È una rappresentazione descrittiva del linguaggio formale (per esempio del linguaggio di programmazione R). Usa parole chiave scritte in maiuscolo o grassetto. Usa operatori quali ←, +, Usa la indentazione, ossia il rientro dei gruppi di azioni riferite a cicli o a strutture a scelta. Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Linguaggi grafici Linguaggio naturale Pseudocodice Caratteristiche Vantaggi: Conciso; Coerente. Svantaggi: Può dipendere dal linguaggio di destinazione finale. Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Linguaggi grafici Linguaggio naturale Pseudocodice Simbolo di assegnamento Sintassi nome ← espressione Semantica - assegnare a nome il valore di espressione: nome identifica il nome descrittivo espressione identifica il valore che viene associato al nome Esempio: a ← 2 (2 è assegnato ad a) b ← 2 + a (il risultato della somma è assegnato a b) Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Linguaggi grafici Linguaggio naturale Pseudocodice Costrutto condizionale Sintassi if (condizione) then (blocco1 ) else (blocco2 ) if, then e else sono parole chiave. Semantica - eseguire blocco1 o blocco2 a seconda dell’esito della condizione. blocco1 identifica la sequenza delle azioni da eseguire se la condizione è vera blocco2 identifica la sequenza delle azioni da eseguire se la condizione è falsa Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Linguaggi grafici Linguaggio naturale Pseudocodice Esempi di uso del costrutto if if (a > 1) then (write ’Maggiore di 1’) else (write ’Minore di 1’) write è una parola chiave che indica operazione di scrittura. if (a > 1) then if (b != 0) then (c = a) else (c = b) Il costrutto può avere al suo interno altri costrutti if if (a > 1) then (write ’Maggiore di 1’) Ramo else non è obbligatorio. Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Linguaggi grafici Linguaggio naturale Pseudocodice Costrutto iterativo Sintassi while (condizione) do (blocco1 ) while e do sono parole chiave. Semantica - eseguire blocco1 fino a quando la condizione è verificata. blocco1 identifica la sequenza delle azioni da eseguire se la condizione è vera La condizione è verificata prima di ogni iterazione. L’iterazione si ferma quando la condizione non è più vera. Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Linguaggi grafici Linguaggio naturale Pseudocodice Esempio di uso del costrutto while a <- 10 while (a > 1) do ( a <- a - 1 write ’a’ ) Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Linguaggi grafici Linguaggio naturale Pseudocodice Costrutto iterativo Sintassi repeat (blocco1 ) until (condizione) repeat e until sono parole chiave. Semantica - eseguire blocco1 fino a quando la condizione è falsa. blocco1 identifica la sequenza delle azioni da eseguire se la condizione è falsa La condizione è verificata dopo ogni iterazione. L’iterazione si ferma quando la condizione è vera. Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Linguaggi grafici Linguaggio naturale Pseudocodice Esempio di uso del costrutto repeat b <- 5 a <- 1 until (a <- a + 1) repeat (a > b) write ’a, b’ Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Linguaggi grafici Linguaggio naturale Pseudocodice Costrutto iterativo Sintassi for (condizione) do (blocco1 ) for e do sono parole chiave. Semantica - eseguire blocco1 fino a quando la condizione è vera. blocco1 identifica la sequenza delle azioni da eseguire se la condizione è vera La condizione è verificata prima di ogni iterazione. L’iterazione si ferma quando la condizione è falsa. Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Linguaggi grafici Linguaggio naturale Pseudocodice Condizione nel costrutto for La condizione può essere del tipo indicato di seguito: variabile ← espressione1 to espressione2 La condizione è il valore di una variabile. La variabile ha valore: iniziale indicato da espressione1 finale indicato da espressione2 Ad ogni iterazione viene incrementato di 1 il valore della variabile fino a quando quest’ultima non raggiunge il valore finale indicato da espressione2 Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Linguaggi grafici Linguaggio naturale Pseudocodice Esempio di uso del costrutto for s <- 0 for (i <- 1 to 10) do (s <- s + i) write s Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Linguaggi grafici Linguaggio naturale Pseudocodice Altre strutture Sintassi procedure nome(variabile1 , variabile2 , ...) (blocco) Semantica - eseguire altri algoritmi identificati da nome le diverse variabili (variabili1 , variabili2 , ...) rappresentano i dati in ingresso all’algoritmo il blocco è la sequenza di istruzioni da eseguire ad ogni invocazione della procedura. sqrt e mod sono esempi di procedure. Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Linguaggi grafici Linguaggio naturale Pseudocodice Altre strutture Sintassi A[i] con i da 1 a N. Semantica - esprimere il vettore A di N elementi i indica la posizione dell’elemento all’interno del vettore A[i] indica il valore dell’elemento nella posizione i-esima Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Algoritmi di ricerca Algoritmi di ordinamento Problema della efficienza Un problema può essere risolto da più algoritmi. Ciascun algoritmo può presentare prestazioni differenti. La complessità computazionale indica il tempo (o la quantità di memoria) necessario per l’esecuzione di un certo algoritmo. Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Algoritmi di ricerca Algoritmi di ordinamento Categorie Algoritmi di ricerca: verificano la presenza di un valore in un insieme di dati. Algoritmi di ordinamento: scansionano i valori all’interno di un insieme in modo crescente o decrescente. Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Algoritmi di ricerca Algoritmi di ordinamento Algoritmo di ricerca Ha come scopo quello di trovare un elemento avente determinate caratteristiche all’interno di un insieme di dati. L’insieme può essere ordinato o non ordinato. L’insieme può essere ordinato in modo crescente o decrescente. La ricerca può essere binaria o sequenziale. Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Algoritmi di ricerca Algoritmi di ordinamento Ricerca sequenziale o completa Consiste nella scansione sequenziale degli elementi di un insieme dal primo all’ultimo. Si interrompe quando: il valore cercato è stato trovato; non vi sono più elementi da cercare; oppure quando siamo sicuri che il valore non possa essere presente. Ha il vantaggio di poter essere applicata anche ad insiemi di dati non ordinati. Durante la ricerca, si effettuano confronti tra il valore da ricercare e gli elementi dell’insieme. Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Algoritmi di ricerca Algoritmi di ordinamento Ricerca sequenziale o completa Problema: cercare il valore x in un insieme di interi di nome V avente N elementi. La procedura, che effettua la ricerca, può restituire: l’indice dell’elemento dell’insieme con valore x; o -1 in caso di valore non trovato. Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Algoritmi di ricerca Algoritmi di ordinamento Ricerca binaria o logaritmica È simile al metodo usato per trovare una parola nel dizionario. Può essere applicata solo ad insiemi di dati ordinati. Si presta ad una definizione ricorsiva. Ad ogni chiamata della procedura, si verifica se l’elemento ricercato si trova al centro dell’intervallo: in tal caso la funzione termina con successo. In caso contrario, si modifica l’intervallo di ricerca e si effettua una nuova chiamata della procedura. Nel caso in cui l’intervallo di ricerca sia nullo, la ricorsione termina con insuccesso. Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Algoritmi di ricerca Algoritmi di ordinamento Ricerca binaria o logaritmica Sia N l’insieme degli elementi da esaminare, e k l’elemento da ricercare. Si prende l’elemento centrale avente valore k 1 e posizione M = N2 . Se k = k 1 , abbiamo finito e trovato l’elemento che stiamo cercando; Se k < k 1 , l’elemento cercato è nella prima metà dell’insieme, su cui si ripete la ricerca partendo dall’inizio ma considerando i primi N2 − 1 elementi; Se k > k 1 , l’elemento cercato è nella seconda metà dell’insieme, su cui si ripete la ricerca partendo dall’inizio ma considerando gli elementi da N2 + 1 fino alla fine. Se tutti gli elementi sono stati scartati, la ricerca termina indicando che il valore non è stato trovato. Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Algoritmi di ricerca Algoritmi di ordinamento Ricerca binaria o logaritmica Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Algoritmi di ricerca Algoritmi di ordinamento Confronto tra i due algoritmi di ricerca L’efficienza di un algoritmo si misura in base al numero di confronti effettuati che dipende da N, ossia la lunghezza dell’insieme. In generale interessa il caso medio. Algoritmo Caso peggiore Caso medio Caso migliore Di Ricerca Sequenziale (RS) Di Ricerca Binaria (RB) N N 2 1 log2 (N) log2 (N) 1 Caso medio con N = 1000. Efficienza: 500 con RS, 10 con RB. Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Algoritmi di ricerca Algoritmi di ordinamento Algoritmo di ordinamento Si basa su operazioni di scambio e confronto. Può essere necessario scandire più volte gli elementi dell’insieme. Può seguire una delle seguenti classi: Stupid Sort; Selection Sort; Bubble Sort; Insertion Sort; Shell Sort; Quick Sort; Merge Sort. Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Algoritmi di ricerca Algoritmi di ordinamento Stupid Sort È particolarmente inefficiente. Consiste nel mischiare gli elementi dell’insieme, come si può fare con un mazzo di carte. Controlla se è ordinato e, se non lo è, ricomincia da capo. È probabilistico. Arriva quasi sicuramente ad una conclusione per il teorema della scimmia instancabile: ad ogni tentativo c’è una probabilità di ottenere l’ordinamento giusto; dato un numero illimitato di tentativi, infine dovrebbe avere successo. Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Algoritmi di ricerca Algoritmi di ordinamento Teorema della scimmia instancabile Il teorema della scimmia instancabile o teorema delle scimmie infinite afferma che una scimmia che prema a caso i tasti di una tastiera per un tempo infinitamente lungo quasi certamente riuscirà a comporre qualsiasi opera letteraria conservata nella Biblioteca Nazionale di Francia [Borel]. Il termine scimmia è una metafora per una macchina teorica che produce una sequenza casuale di lettere ad infinito. Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Algoritmi di ricerca Algoritmi di ordinamento Bobo Sort Variante meno efficace dello Stupid Sort. Consiste nel controllare se l’insieme è ordinato. Se non lo è, prende due elementi casualmente e li scambia (indipendentemente dal fatto che lo scambio aiuti l’ordinamento o meno). Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Algoritmi di ricerca Algoritmi di ordinamento Selection Sort È un algoritmo semplice e di selezione. Effettua più scansioni dell’insieme. Al termine della prima scansione, il primo elemento dell’insieme contiene il valore minore. Tra i rimanenti N − 1 elementi, l’algoritmo ricerca l’elemento minore e lo scambia con il secondo. Ad ogni scansione viene scambiato un elemento dell’insieme nella posizione dell’elemento più grande considerato. Si procede fino allo scambio degli ultimi due elementi. Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Algoritmi di ricerca Algoritmi di ordinamento Bubble Sort È un algoritmo semplice e di scambio. Effettua la scansione dell’insieme elemento per elemento. Scambia i valori dei due elementi consecutivi o adiacenti, quando il primo è maggiore del secondo. Al termine della prima scansione, il primo elemento dell’insieme contiene il valore minore. L’algoritmo prosegue ordinando la parte successiva dell’insieme. Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Algoritmi di ricerca Algoritmi di ordinamento Bubble Sort L’insieme risulta ordinato dopo aver effettuato N − 1 scansioni. Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Algoritmi di ricerca Algoritmi di ordinamento Bubble Sort Al termine della prima scansione, in genere l’insieme non risulta ordinato. È necessario procedere ad una nuova scansione e alla conseguente serie di eventuali scambi tra i valori di due elementi consecutivi. La ripetizione degli scambi tra elementi adiacenti fa salire verso l’alto gli elementi più grandi o più piccoli in base all’ordine con cui viene fatto l’ordinamento. È detto bubblesort (ordinamento a bolle) per analogia con le bolle d’aria nell’acqua che, essendo leggere, tendono a spostarsi verso l’alto. Risulta poco efficiente quando ci sono molti elementi disordinati. Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Algoritmi di ricerca Algoritmi di ordinamento Insertion Sort È un algoritmo particolarmente semplice. È un algoritmo di inserimento. Ordina i primi due elementi dell’insieme. Inserisce il terzo elemento nella posizione corretta rispetto ai primi due. Continua con la procedura fino all’inserimento di tutti gli elementi, e quindi all’ordinamento. Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Algoritmi di ricerca Algoritmi di ordinamento Insertion Sort Rispetto al Selection Sort o Bubble Sort, il numero di confronti che effettua è legato all’ordinamento iniziale dell’insieme. Nei casi peggiori, non è migliore del Bubble Sort e del Selection Sort. Nei casi medi, è meno lento. Se l’insieme è ordinato, i confronti saranno N − 1 con N numero di elementi dell’insieme. Altrimenti sono dell’ordine di N 2 . Garantisce un numero basso di confronti, ma effettua un numero elevato di spostamenti. Ha senso usarlo per insiemi quasi ordinati. Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Algoritmi di ricerca Algoritmi di ordinamento Shell Sort È un algoritmo abbastanza evoluto. È un algoritmo di inserimento. Ordina cercando di ridurre gli inserimenti. Confronta tutti gli elementi che si trovano ad una distanza d, scambiandoli se non sono ordinati. Riduce di volta in volta il valore di d. Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Algoritmi di ricerca Algoritmi di ordinamento Shell Sort Quando d = 1, gli elementi sono adiacenti e l’algoritmo si interrompe. Esempio: su N = 6, d = 3 alla prima iterazione. Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Algoritmi di ricerca Algoritmi di ordinamento Shell Sort Non è facile valutare il valore ottimale d. In genere: si ordina l’insieme con una spaziatura grande; si riduce la spaziatura durante l’iterazione; si riordina l’insieme. Shell Sort è migliore del Bubble Sort, Insertion Sort e Selection Sort. Ha la peculiarità di scambiare velocemente gli elementi. Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Algoritmi di ricerca Algoritmi di ordinamento Quick Sort È un algoritmo evoluto. È un algoritmo di scambio e ricorsivo. L’idea: dato un insieme di N elementi, si divide in due sottoinsiemi di N2 elementi ciascuno, che si ordinano separatamente; riunendo le due sottoparti già ordinate, si dimezza il tempo di calcolo; l’insieme iniziale può essere suddiviso in un numero di elementi inferiore a N2 per dimezzare ulteriormente il tempo di calcolo. Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Algoritmi di ricerca Algoritmi di ordinamento Quick Sort Suddivide l’insieme in due sezioni e identifica un pivot nell’insieme. Gli elementi > o = al pivot vanno in una parte, mentre quelli minori nell’altra. Itera il procedimento per ognuna delle sezioni rimanenti fino ad avere l’insieme ordinato con nuovo pivot. Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Algoritmi di ricerca Algoritmi di ordinamento Quick Sort Caso migliore: Il pivot divide l’insieme in due parti uguali ad ogni passo. Caso peggiore: Il pivot divide l’insieme degli elementi in due parti: una composta da un solo elemento e l’altra dagli N − 1 restanti. Caso medio: Tutti gli elementi possono essere presi come pivot con probabilità N1 . La generica suddivisione i, N − i avviene con probabilità . Elisabetta Ronchieri I Concetti Base 1 N. Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Algoritmi di ricerca Algoritmi di ordinamento Merge Sort È un algoritmo evoluto. È un algoritmo ricorsivo. Sfrutta il concetto di fusione di insiemi ordinati. Divide l’insieme in due parti che ordina ricorsivamente. Unisce le sequenze ordinate risultanti. Si esce dalla ricorsione quando gli insiemi hanno una dimensione pari a 1. Elisabetta Ronchieri Provenienza della figura: http://www.jefclaes.be/ 2011/07/ merge-sorting-in-javascript_ 1458.html I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Algoritmi di ricerca Algoritmi di ordinamento Confronto tra algoritmi di ordinamento Algoritmi con soluzioni sempre più sofisticate hanno complessità computazionale sempre più bassa. Complessità computazionale è basata sul numero di operazioni elementari necessarie ad effettuare l’ordinamento. Algoritmo Caso peggiore Caso medio Caso migliore Insertion Sort Bubble Sort Selection Sort Quick Sort Merge Sort N2 N2 N2 N2 N · log2 (N) N · log2 (N) N · log2 (n) N N N2 N · log2 (N) N · log2 (N) Algoritmo Quick Sort usa circa 2 · N · ln(N) in media per ordinare un insieme di N elementi distinti. Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Possibili domande d’esame 1 In quale algoritmo di ordinamento deve essere settata la distanza d. (a) (b) (c) (d) (e) Shell Sort Quick Sort Merge Sort Bubble Sort Insertion Sort Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Possibili domande d’esame 2 Letti due numeri N positivo e M negativo, cosa codifica il seguente frammento di pseudocodice? read N, M P <- 0 while (M < 0) do ( P <- P + N M <- M + 1) If (M < 0) then (write P) else (write -P) (a) (b) (c) (d) (e) la somma di due numeri N e M positivi; la sottrazione di due numeri N e M negativi; il valore di N; il prodotto di due numeri N e M con M negativo; il prodotto di due numeri N e M con M positivo. Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Possibili domande d’esame 3 Che cosa viene visualizzato in uscita dal frammento di pseudocodice? A <- -2 B <- -2 C <- sqrt(-A * -B) if (C < 0) then (write A) else (write C) (a) (b) (c) (d) (e) -4 4 -2 2 Errore Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Possibili domande d’esame 4 Indicare le proprietà di un algoritmo. (a) (b) (c) (d) (e) Ambiguità; Non terminabilità; Non realizzabilità; Non eseguibilità; Correttezza. Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Possibili domande d’esame 5 Che cosa viene visualizzato in uscita dal frammento di pseudocodice? procedure mean(a,b,c) ( write (a + b + c)/3 ) read a, b, c mean(2,3,10) (a) (b) (c) (d) (e) 10 8 3 5 Errore Elisabetta Ronchieri I Concetti Base Introduzione Rappresentazione Algoritmi notevoli Possibili domande d’esame Per ulteriori letture Èmil Borel, Le Hazard, Alcan (1914), Paris. Elisabetta Ronchieri I Concetti Base