Docsity
Docsity

Prepara i tuoi esami
Prepara i tuoi esami

Studia grazie alle numerose risorse presenti su Docsity


Ottieni i punti per scaricare
Ottieni i punti per scaricare

Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium


Guide e consigli
Guide e consigli


Lezione 7, Algoritmi, Dispense di Elementi di Informatica

Algoritmi, lezione 7, Unimi 2016/2017, Ceravolo

Tipologia: Dispense

2017/2018

Caricato il 02/07/2018

Nick_Gilmar
Nick_Gilmar 🇮🇹

4.1

(7)

108 documenti

1 / 62

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
FONDAMENTI DI INFORMATICA PER LE SCIENZE UMANISTICHE
CdL in SCIENZE UMANISTICHE PER LA COMUNICAZIONE
L8 - Algoritmi e strutture
dati
Prof. Paolo Ceravolo
Dipartimento di Informatica
https://homes.di.unimi.it/ceravolo/
paolo.ceravolo@unimi.it
A.A. 2015/2016
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33
pf34
pf35
pf36
pf37
pf38
pf39
pf3a
pf3b
pf3c
pf3d
pf3e

Anteprima parziale del testo

Scarica Lezione 7, Algoritmi e più Dispense in PDF di Elementi di Informatica solo su Docsity!

FONDAMENTI DI INFORMATICA PER LE SCIENZE UMANISTICHE

CdL in SCIENZE UMANISTICHE PER LA COMUNICAZIONE

L8 - Algoritmi e strutture

dati

Prof. Paolo Ceravolo

Dipartimento di Informatica

https://homes.di.unimi.it/ceravolo/

[email protected]

A.A. 2015/

Studiare gli algoritmi

  • Un’importante branca dell'informatica studia la definizione e la progettazione degli algoritmi: - l'analisi della loro correttezza ed efficienza - la dimostrazione delle loro limitazioni e complessità - lo studio dei dati da essi elaborati
  • Molti di questi aspetti sono analizzati servendosi di^ strumenti formali che in modo deduttivo analizzano i dati e la logica algoritmica per dimostrare la correttezza di alcune tesi
  • Ma non sempre ci possiamo limitare a uno studio di questo tipo, in alcune situazioni per valutare un algoritmo è necessario tenere in considerazione il contesto in cui viene inserito (ambiente, agenti) e le modalità di utilizzo

Correttezza di un algoritmo

  • La correttezza di un algoritmo si definisce sempre rispetto ad un problema - Fissati un insieme I di istanze dei dati di ingresso e un insieme S di soluzioni, un problema P può essere formalizzato come una relazione che ad ogni istanza associa le relative soluzioni: - P^ ⊆^ I^ ×^ S

Correttezza di un algoritmo

  • Un problema può^ essere espresso in tre diverse forme:
  • Problema di decisione : richiede una risposta binaria rappresentante il soddisfacimento di qualche proprietà o l’esistenza di qualche entità, quindi S = {0, 1}. Ovvero S è vera oppure falsa
  • Problema di ricerca : richiede di trovare una generica soluzione in corrispondenza di ciascuna istanza dei dati di ingresso
  • Problema di ottimizzazione : richiede di trovare la soluzione ottima rispetto ad un criterio prefissato in corrispondenza di ciascuna istanza dei dati di ingresso

INIZIO

FINE

X
X > Y?

C = X - Y

Si

Dati X e Y

No^ "Il valore è C"
Y

Enumera

FINE

X

X = 100?

X = X + 1

No "Il valore è X"

Dato X

X Si

Complessità di un algoritmo

  • Dato un problema, possono esistere più^ algoritmi che sono corretti

rispetto ad esso.

  • Questi algoritmi possono essere^ confrontati rispetto alla loro

complessità o efficienza computazionale, cioè rispetto alla quantità

di uso che essi fanno delle seguenti risorse durante la loro

esecuzione:

  • Tempo di calcolo
  • Spazio di memoria
  • Banda trasmissiva

Complessità computazionale

  • Quale^ complessità^ mostrerà questa^ procedura? Per evitare di prendere in considerazione aspetti che possano essere legati alla specifica macchina in esecuzione. Consideriamo i seguenti elementi: - numero di operazioni - per quante volte un’operazione viene eseguita

Complessità Asintotica

Complessità Asintotica

Valida Email

stringa es: [email protected] è vuotà? Stampa a video Si stringa es: pippo Stringa prima del carattere @ Stringa dopo il carattere. "Email non valida" è vuotà? Stringa dopo il carattere @ FINE No Si stringa es: es.it Si è vuotà? No No stringa es: it Stampa a video "Email valida" Valida Email

1. A quali condizioni questo algoritmo

giungerà a terminazione?

2. Quante operazioni saranno necessarie

per eseguire l’algoritmo?

3. A quale classe di complessità asintotica

appartiene l’algoritmo?

Valida Email

stringa es: [email protected] è vuotà? Stampa a video Si stringa es: pippo Stringa prima del carattere @ Stringa dopo il carattere. "Email non valida" è vuotà? Stringa dopo il carattere @ FINE No Si stringa es: es.it Si è vuotà? No No stringa es: it Stampa a video "Email valida" Valida Email 1.A quali condizioni questo algoritmo giungerà a terminazione? A condizione di ricevere una stringa in input 2.Quante operazioni saranno necessarie per eseguire l’algoritmo? Da 2 (caso ottimo) a 4 operazioni (caso pessimo). Indipendentemente dal numero di caratteri della stringa in input 4.A quale classe di complessità asintotica appartiene l’algoritmo? Le operazioni dipendono solo da elementi costanti quindi la complessità asintotica è O(1)

Ricerca binaria 1.A quali condizioni questo algoritmo giungerà a terminazione? A condizione di ricevere una lista ordinata 3.Quante operazioni saranno necessarie per eseguire l’algoritmo? 2 + 2 log(n) nel caso pessimo 3 nel caso ottimo dove n è la lunghezza della lista 5.A quale classe di complessità asintotica appartiene l’algoritmo? Non considerando le costanti la complessità è: O (log n) Ricerca binaria lista ordinata L es: 1,3,4,6,7,8,10,13, E = E' Seleziona indice: ind = ind/ E < E' Elemento trovato

FINE

Si No "E' è E" "E' ha indice = ind" Si elemento da trovare E es: 4 ind es: 4 Seleziona indice: ind = L.length/ elemento letto E' es: 7 Leggi L[ind] No Seleziona indice: ind = ind + (ind/2)

Similarità tra stringhe

1. A quali condizioni questo algoritmo

giungerà a terminazione?

2. Quante operazioni saranno necessarie

per eseguire l’algoritmo?

3. A quale classe di complessità asintotica

appartiene l’algoritmo?

Grado di similarità di due stringhe Stringa S es: casa ind Prendi ind1 = 0 Prendi ind2 = 0 Lettere uguali = Lettere uguali + FINE Stringa S es: cara ind ind1 <= S1.length Si No S1[ind1] = S2[ind2] ind2 <= S2.length No Si No Si Lettere uguali ind2 = ind Lettere diverse = Lettere diverse + ind1 = ind1 + ind2 = 0 Similarità(S1, S2) = Lettere uguali / (Lettere uguali + Lettere diverse) Similarità (S1, S2) Lettere diverse