







Studia grazie alle numerose risorse presenti su Docsity
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Prepara i tuoi esami
Studia grazie alle numerose risorse presenti su Docsity
Prepara i tuoi esami con i documenti condivisi da studenti come te su Docsity
Trova i documenti specifici per gli esami della tua università
Preparati con lezioni e prove svolte basate sui programmi universitari!
Rispondi a reali domande d’esame e scopri la tua preparazione
Riassumi i tuoi documenti, fagli domande, convertili in quiz e mappe concettuali
Studia con prove svolte, tesine e consigli utili
Togliti ogni dubbio leggendo le risposte alle domande fatte da altri studenti come te
Esplora i documenti più scaricati per gli argomenti di studio più popolari
Ottieni i punti per scaricare
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
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
1 / 13
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!








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
Il programma era già cablato all’interno del calcolatore
registri
Il programma è parte mutevole e risiede nella memoria. Le istruzioni quindi possono mutare nel tempo e il calcolatore è riprogrammabile – Macchina Universale
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
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
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
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
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 Log 2 N
Ricerca lineare N/
Valore di N
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
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 …
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
LogLog
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