Ripetizioni di segmenti di codice Spesso necessario ripetere

  • Slides: 28
Download presentation
Ripetizioni di segmenti di codice • Spesso è necessario ripetere più volte uno stesso

Ripetizioni di segmenti di codice • Spesso è necessario ripetere più volte uno stesso segmento dell'algoritmo (e. g. I/O, elaborazioni dati) • Esistono due possibilità: – Macro – Procedure Fondamenti di Informatica 1

Le macro • Una macro è definita come un insieme di istruzioni (o blocco)

Le macro • Una macro è definita come un insieme di istruzioni (o blocco) • Queste vengono sostituite all'interno del codice • Servono per rendere più leggibile il codice e per facilitarne la modifica coerente • #define MAX(a, b) (a>b ? a : b) Fondamenti di Informatica 2

Le procedure • Una procedura è definita come un insieme di istruzioni (o blocco)

Le procedure • Una procedura è definita come un insieme di istruzioni (o blocco) • Il controllo del flusso passa alla procedura ogni volta che viene invocata • E' necessario un meccanismo per ritornare al punto chiamante • Utilizzo dello stack (Stack Pointer) Fondamenti di Informatica 3

Procedure e funzioni • La ripetizione di un segmento di codice può avere due

Procedure e funzioni • La ripetizione di un segmento di codice può avere due obiettivi: – ripetere la stessa sequenza di operazioni – calcolare diversi valori, partendo da parametri diversi • La differenza principale è: – la procedura non ritorna nessun valore – la funzione ritorna un valore (ad es void) Fondamenti di Informatica 4

Passaggio dei parametri • Ogni procedura/funzione generalmente richiede un insieme di dati • I

Passaggio dei parametri • Ogni procedura/funzione generalmente richiede un insieme di dati • I dati devono essere accessibili: – in variabili globali – oppure sotto forma di parametri • I parametri sono dati che vengono utilizzati dalla procedura; ad ogni chiamata possono assumere valori diversi Fondamenti di Informatica 5

Passaggio dei parametri • I parametri possono essere passati in modi diversi: – per

Passaggio dei parametri • I parametri possono essere passati in modi diversi: – per valore vengono effettuate delle copie dei valori; le copie sono usate dalla procedura che può anche modificarne il valore – per riferimento si passa il puntatore alle variabili; i valori possono essere modificati dalla procedura Fondamenti di Informatica 6

Side effects • Se il passaggio dei parametri avviene per valore, l'effetto della procedura

Side effects • Se il passaggio dei parametri avviene per valore, l'effetto della procedura è limitato al valore che ritorna • Se i parametri sono passati per riferimento, la procedura può avere effetti collaterali (side effects) – è un modo per far in modo che la procedura ritorni più di un valore Fondamenti di Informatica 7

Le procedure • Annidamento: in una procedura può essere contenuta un'altra chiamata a procedura

Le procedure • Annidamento: in una procedura può essere contenuta un'altra chiamata a procedura • Limite sulla dimensione dello stack Fondamenti di Informatica 8

Le procedure • Ricorsione: all'interno di una procedura avviene una chiamata alla procedura stessa

Le procedure • Ricorsione: all'interno di una procedura avviene una chiamata alla procedura stessa • Limite sulla dimensione dello stack • Molti algoritmi sono basati sulla ricorsione Fondamenti di Informatica 9

La ricorsione • Esempi: – somma di N dati – calcolo del fattoriale –

La ricorsione • Esempi: – somma di N dati – calcolo del fattoriale – calcolo dei primi N numeri primi – visita di un albero Fondamenti di Informatica 10

Algoritmi di ordinamento • Basilare in molteplici applicazioni • Esempio importante di algoritmi diversi

Algoritmi di ordinamento • Basilare in molteplici applicazioni • Esempio importante di algoritmi diversi per risolvere lo stesso problema • Metodi di ordinamento interni: i dati risiedono nella memoria centrale (in un vettore; campo chiave) • Confronto basato sull'efficienza Fondamenti di Informatica 11

Selectionsort • Ordinamento per selezione • Si sceglie il minimo del vettore e lo

Selectionsort • Ordinamento per selezione • Si sceglie il minimo del vettore e lo si scambia con la posizione corretta • Complessità: O(n 2) • I due cicli vengono sempre eseguiti, indipendentemente dalla configurazione dei dati Fondamenti di Informatica 12

Bubblesort • Basato sulla considerazione che: ei ei+1 • Confronta coppie adiacenti e eventualmente

Bubblesort • Basato sulla considerazione che: ei ei+1 • Confronta coppie adiacenti e eventualmente le scambia • Dopo una scansione completa l'elemento minore è nella posizione corretta • Termina quando sono terminati gli scambi (se è già ordinato serve solo un passo per la verifica) • Complessità: O(n 2) Fondamenti di Informatica 13

Mergesort • Basato sulla fusione (merge) di due vettori ordinati: – la fusione ha

Mergesort • Basato sulla fusione (merge) di due vettori ordinati: – la fusione ha complessità O(n) • E' intrisecamente ricorsivo • Vettore iterativamente diviso in 2 parti: – ordinamento e fusione • Complessità O(n log 2 n) Fondamenti di Informatica 14

Mergesort • Indipendente dalla configurazione in ingersso • La ricorsione incrementa la complessità della

Mergesort • Indipendente dalla configurazione in ingersso • La ricorsione incrementa la complessità della gestione: – è consigliabile usare un programma nonricorsivo • Per ogni programma ricorsivo esiste un programma non-ricorsivo più efficiente Fondamenti di Informatica 15

Quicksort • Si sceglie un elemento pivot e si suddivide il vettore in due:

Quicksort • Si sceglie un elemento pivot e si suddivide il vettore in due: uno con el. minori, l'altro con el. maggiori o uguali del pivot • Si procede iterativamente fino a vettori di 1 solo elemento • La suddivisione ha complessità O(n) • La complessità della parte ricorsiva dipende dalla scelta del pivot Fondamenti di Informatica 16

Quicksort • Scegliendo come pivot l'elemento min o max, la complessità diventa O(n 2)

Quicksort • Scegliendo come pivot l'elemento min o max, la complessità diventa O(n 2) • Scegliendo come pivot l'elemento centrale, la complessità è O(n log 2 n) • Il caso peggiore succede raramente • E' più probabile il caso migliore • E' usato per la semplicità e l'efficienza Fondamenti di Informatica 17

Limite inferiore della complessità • Si considerano algoritmi la cui operazione fondamentale è il

Limite inferiore della complessità • Si considerano algoritmi la cui operazione fondamentale è il confronto tra elementi • Problema: – è ricondotto alla ricerca di una specifica permutazione di n oggetti – esistono n! permutazioni diverse – tutte le permutazioni sono candidate – ogni passo dell'algoritmo serve per eliminare dei candidati Fondamenti di Informatica 18

Esempio • La ricerca è rappresentabile graficamente con un albero binario: – la radice

Esempio • La ricerca è rappresentabile graficamente con un albero binario: – la radice rappresenta tutte le permutazioni – ogni confronto suddivide le permutazioni • La profondità dell'albero determina il numero massimo di confronti nel caso peggiore Fondamenti di Informatica 19

Esempio • Ordinare {a 1, a 2, a 3} • Albero di risoluzione –

Esempio • Ordinare {a 1, a 2, a 3} • Albero di risoluzione – 3! = 6 permutazioni (6 foglie) – albero con profondità 3 • Programma in C Fondamenti di Informatica 20

Limite inferiore della complessità • L'albero deve avere n! foglie • In generale un

Limite inferiore della complessità • L'albero deve avere n! foglie • In generale un albero binario con profondità i ha al più 2 i foglie • Quindi per avere n! foglie, l'albero deve avere profondità p = log(n!) ~ log(n/e)n =n log(n) - n log(e) = O(n log(n)) • Il limite inferiore alla complessità è O(n log(n)) Fondamenti di Informatica 21

Binsort • Fin'ora gli algoritmi erano basati su operazioni di confronto • Il binsort

Binsort • Fin'ora gli algoritmi erano basati su operazioni di confronto • Il binsort utilizza operazioni di indirizzamento con indici • Sfrutta la conoscenza dell'intervallo di variabilità delle chiavi Fondamenti di Informatica 22

Binsort • Si suppone che gli n elementi del vettore abbiano chiavi [1. .

Binsort • Si suppone che gli n elementi del vettore abbiano chiavi [1. . n] • Si scandisce un vettore e si spostano gli elementi in un altro • Ha complessità O(n) Fondamenti di Informatica 23

Binsort • Caso di più chiavi uguali: – utilizzo di una lista – al

Binsort • Caso di più chiavi uguali: – utilizzo di una lista – al termine le liste vengono concatenate • Complessità: – inserimento O(n) – concatenazione O(n) – totale O(n) Fondamenti di Informatica 24

Binsort • E' il più efficiente se: – si utilizzano chiavi numeriche – l'intervallo

Binsort • E' il più efficiente se: – si utilizzano chiavi numeriche – l'intervallo di variabilità delle chiavi è noto – è possibile effettuare indirizzamenti con indici Fondamenti di Informatica 25

Considerazioni sulla scelta di un algoritmo • Le caratteristiche di un algoritmo sono: –

Considerazioni sulla scelta di un algoritmo • Le caratteristiche di un algoritmo sono: – semplice, per facilitarne la comprensione, programmazione, e correzione – efficiente, cioè richiede una quantità limitata di risorse per l'esecuzione • Le due caratteristiche si riferiscono a: – costo umano – costo di esecuzione Fondamenti di Informatica 26

Considerazioni sulla scelta di un algoritmo • Non esistono regole per la scelta ottima

Considerazioni sulla scelta di un algoritmo • Non esistono regole per la scelta ottima • Generalmente però: – si sceglie la prima regola quando si deve eseguire poche volte su insiemi ridotti di dati – si sceglie la seconda se il programma viene eseguito un grande numero di volte su insiemi estesi di dati Fondamenti di Informatica 27

Considerazioni • Implementazione efficiente dell'algoritmo – sono state considerate solo le complessità – sono

Considerazioni • Implementazione efficiente dell'algoritmo – sono state considerate solo le complessità – sono state eliminate le costanti moltiplicative • Per scegliere l'implementazione migliore è necessario considerare tutto – ad esempio, gli algoritmi ricorsivi sono generalmente molto pesanti Fondamenti di Informatica 28