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


Complessità degli Algoritmi: Precursori e Efficienza - Prof. Palmirani, Slide di Informatica Giuridica

Questa lezione tratta dei precursori dei calcolatori, dalla calcolatrice di rodi al colossus di alan turing, e introduttiva sulla macchina di von neumann. Viene inoltre discusso l'importanza di scrivere algoritmi efficienti e la complessità computazionale secondo i parametri tempo e spazio. Il documento include esempi di algoritmi come ricerca sequenziale e ricerca binaria, e una discussione sui problemi np completi.

Tipologia: Slide

2010/2011

Caricato il 05/04/2011

manuelap
manuelap 🇮🇹

4.4

(744)

91 documenti

1 / 13

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
1
Complessità
computazionale degli
algoritmi
Lezione n. 3.bis
I precursori dei calcolatore
zCalcolatore di Rodi o di
Andikithira 65 a.C.
zBlaise Pascale pascalina XVII
secolo
zGottfried Leibniz
zJoseph Jacquard XVIII secolo
zCharles Babbage XIX secolo
zAlan Turing XX secolo - Colossus
zJohn Von Neumann macchina
programmabile universale - ENIAC
pf3
pf4
pf5
pf8
pf9
pfa
pfd

Anteprima parziale del testo

Scarica Complessità degli Algoritmi: Precursori e Efficienza - Prof. Palmirani e più Slide in PDF di Informatica Giuridica solo su Docsity!

Complessità

computazionale degli

algoritmi

Lezione n. 3.bis

I precursori dei calcolatore

z Calcolatore di Rodi o di Andikithira 65 a.C.

z Blaise Pascale – pascalina XVII secolo

z Gottfried Leibniz

z Joseph Jacquard XVIII secolo

z Charles Babbage XIX secolo

z Alan Turing XX secolo - Colossus

z John Von Neumann – macchina programmabile universale - ENIAC

Macchina di Babbage

Il programma era già cablato all’interno del calcolatore

La macchina di von Neumann (1)

registri

Il programma è parte mutevole e risiede nella memoria. Le istruzioni quindi possono mutare nel tempo e il calcolatore è riprogrammabile – Macchina Universale

Algoritmi ed efficienza

z Per risolvere un problema possiamo avere diversi algoritmi e tutti risolutori e validi

z Come scegliere l’algoritmo migliore?

z Correttezza, comprensione ed eleganza, efficienza

z Se l’esecutore è un calcolatore universale cercheremo di scrivere algoritmi efficienti ossia che al crescere dei dati in input il numero delle operazioni svolte sia il migliore

z Lo studio dell’efficienza degli algoritmi porta a studiare la complessità computazionale degli algoritmi stessi secondo due parametri: z Tempo – quanti giri di CPU compie il computer z Spazio – quanta memoria occupa

Complessità computazionale

z La complessità computazionale misura quanto tempo e quanta memoria occorre per eseguire un algoritmo per portare a termine la risoluzione del problema z Si valuta un ordine di grandezza in base al crescere dei dati inseriti z Non è possibile un calcolo esatto quindi si esegue una stima sulla base del caso migliore e del caso peggiore

Esempio della ricerca sequenziale

z Ricerca di un elemento in un insieme ordinato di elementi per esempio un numero telefonico in un elenco ordinato alfabeticamente o un numero intero in un insieme ordinato di numeri interi

z Siano dati 100 numeri interi; la domanda è: il numero N (per es. 45) è contenuto nell’insieme?

z Algoritmo: Tre variabili: N; Elemento dell’insieme, Risultato Acquisisci N e Insieme di elementi Imposta Risultato a Insuccesso Ripeti la scansione degli elementi finchè Risultato vale Successo OR fino alla fine dell’insieme Confronto l’ elemento successivo dell’insieme con N Se sono uguali allora imposta Risultato a Successo Comunica la mondo il valore di Risultato

Esempio della ricerca sequenziale

z N=2 - 10 passi necessari per trovare il numero 2

z Caso peggiore - 10 confronti su 10 numeri

z N= 12 – un passo per raggiungere il numero 12

z Caso migliore – 1 confronto su 10 numeri z Caso medio (1+10)/2 Æ (1+N)/2 Æ 5,5 che arrotondato 5

Ricerca binaria

z Si suppone di avere una lista ordinata e di cercare Rossi Mario z Si suppone di dividere la lista in due e vedere se il nome cercato cade nella prima parte della lista o nella seconda z Si identifica così la parte su cui lavorare e si procede ricorsivamente ossia applicando lo stesso procedimento al risultato del passo precedente (pag. 85 Sartor) z In questo modo si scarta tutta la parte di indirizzi che sicuramente sono inutili ai nostri fini e ci si concentra sulla parte utile

Ricerca binaria

z Si riduce il problema della metà (circa) a ogni

interazione limitando la ricerca alla parte precedente o

alla parte successiva del valore di metà dell’insieme

z Ogni tentativo permette di ridurre l’ampiezza del

problema di un fattore 2. Il primo tentativo riduce il

numero degli elementi da confrontare a N/2 ; il secondo

a N/4 , ecc.

Ricerca binaria

z caso peggiore : il numero di passi nel caso peggiore è

il numero K equivalente al numero di divisioni che

consente di arrivare all’ultimo elemento, continuo a

dividere N finché quello che rimane è un solo elemento

N/2/2/2/…/2 = 1 allora ho N/2 k^ = 1 ossia N = 2k^ ossia K=

l og 2 N, in realtà dobbiamo aggiungere anche 1 ossia il

caso in cui i

z caso migliore : Il numero di passi nel caso migliore è 1

ossia il numero che si trova nella posizione N/

z caso medio : (1+ l og 2 N)/2 che appartiene alla famiglia

computazionale l og 2 N

Misure nel caso medio

Ricerca binaria Log 2 N

Ricerca lineare N/

Valore di N

Alcuni esempi

Aumenta di molto secondo la base di Esponenziale 2 N cui N è esponente – es. torre di Hanoi

Raddoppia – Lineare 2N es. prodotto di due liste di numeri N

Aumenta di una costante “piccola” – Logaritmica log N es. ricerca binaria

Non cambia – Costante - N es. leggi il primo numero di una lista

Polinomiale 3N+5N+N/2 = (8+1/2) N =17/2 N

Aumenta di un fattore esponente di x

  • es .sequenza di operazioni su una lista

Aumenta di un fattore 4 – es. ricerca Quadratica N^2 in una matrice NxN

Un pò meno del raddoppio N log N

Quando N raddoppia il tempo di Si dice complessità … esecuzione …

Misure di efficienza

I problemi che si cerca di risolvere in modo

automatico sono di tre categorie:

z Problemi per i quali sono al momento noti un

certo numero di algoritmi risolutivi

z Problemi per i quali è noto che non esistono

algoritmi risolutivi

z Problemi per i quali non si sa se esistano o

non esistano algoritmi risolutivi

Esempi di problemi esponenziali

z Problema del commesso viaggiatore In una rete di X città visitarle solo una volta con percorso minimo z Problema con complessità computazionale n!

z Rompere una chiave di crittografia z Attacco informatico di forza bruta z Problemi di connessione e di instradamento in Internet (routing) z Combinazione delle intecettazioni telefoniche z Costruzione di circuiti z Logistica dei trasporti z Google map Algoritmi euristici abbassano la complessità computazionale da esponenziale a polinomiale

Milano

Bologna

Genova

Piacenza

2h

2,15h 3,15h

Approfondimento:

i problemi NP completi

Approfondimento alla

Lezione n. 3.

LogLog

Classi di problemi

Log LOGSpace

P = polinomiali

NP – polinomiali con macchine NON deterministiche

PSpace - polinomiali

EXP – tempo esponenziale con macchine deterministiche

NEXP - tempo esponenziale con macchine NON deterministiche

Materiali di riferimento e Domande

possibili

z Capitolo 3 Sartor

z http://digilander.libero.it/unno2/sort/complessita.htm

z Differenza fra la macchina di Von Neumann e gli

altri “computer”

z Definizione di complessità computazionale

z Efficienza in termini di tempo e spazio: cosa vuol

dire?

z Caso peggiore, caso migliore, caso medio nella

stima dell’efficienza di un algoritmo

z Le classi di complessità costante, lineare,

quadratica, logaritmica, esponenziale.