640 likes | 806 Views
Algoritmi e Strutture Dati. Gestione Informatica dei Dati CdL in Statistica. Bruno Bertaccini. La programmabilità degli elaboratori.
E N D
Algoritmi e Strutture Dati Gestione Informatica dei DatiCdL in Statistica Bruno Bertaccini
Gli elaboratori elettronici sono macchine programmabili:l’utilizzatore deve fornire loro un’insieme di istruzioni che indichino le operazioni da compiere ed i dati su cui operare. Un insieme coerente di tali istruzioni si chiama PROGRAMMA Tali istruzioni, una volta memorizzate nella memoria centrale, verranno prese in considerazione dalla CPU che si occuperà dell’attivazione dei dispositivi necessari alla loro elaborazione La programmabilità degli elaboratori Introduzione
Un elaboratore elettronico, a differenza di quanto ci si potrebbe aspettare, è in grado di compiere SOLO operazioni estremamente semplici(es: una radice quadrata, una funzione trigonometrica richiedono programmi specifici) Tuttavia un elaboratore è molto veloce epuò eseguire un gran numero di operazioni nell’unità di tempo(la velocità dipende anche dal fatto che le operazioni sono appunto elementari) La programmabilità degli elaboratori Introduzione OPERAZIONI ELEMENTARI
Classificazione delle istruzioni elementari in base alla diversità delle funzioni svolte dall’elaboratore e agli effetti che queste hanno sui dati. La programmabilità degli elaboratori Le operazioni elementari • Istruzioni aritmetiche e logiche • Istruzioni di trasferimento • Istruzioni di input-output • Istruzioni di controllo • Istruzioni ausiliarie
Istruzioni Aritmetiche e Logiche.servono ad eseguire operazioni aritmetiche( + ,- , * , / ) elogiche(NOT, AND, OR)sui dati presenti nella memoria centrale Istruzioni di Trasferimento.permettono lo spostamento dei dati all’interno della memoria centrale e tra questa e i registri presenti nella unità aritmetico logica (ALU) della CPU La programmabilità degli elaboratori Le operazioni elementari
Istruzioni Input-Output.consentono l’immissione e l’emissione dei dati nella e dalla memoria centrale; il dialogo avviene generalmente con in i dispositivi di I/O e e con le memorie ausiliarie. Istruzioni di Controllo.guidano lo svolgimento dell’elaborazione controllando l’ordine di esecuzione delle istruzioni elementari;sono eseguite dalla unità di controllo (CU) della CPU. Istruzioni Ausiliarie.sono deputate a riordinare alcuni dispositivi fisici dell’elaboratore e a controllarne lo stato. La programmabilità degli elaboratori Le operazioni elementari
Operazione Elementare (generalizzata)codice operativooperando La programmabilità degli elaboratori Le operazioni elementari identifica i dati o i dispositivi che interessano l’operazione indica il tipo di operazione da compiere L’insieme dei codici operativi e le regole che guidano il modo di esprimere gli operatori costituiscono un sistema di programmazione, un sistema completo per gestire il funzionamento dell’elaboratore ed indirizzarlo alla risoluzione di un determinato problema.
La programmabilità degli elaboratori Il linguaggio macchina ed i linguaggi simbolici Tale sistema è detto LINGUAGGIO MACCHINAperché è il SOLO comprensibile dall’unità di controllo dell’elaboratore. Il Linguaggio Macchina varia da elaboratore ad elaboratore ed è estremamente complicato da utilizzare ed interpretareda parte dell’utilizzatore. Generalmente vengono utilizzati altri linguaggi di programmazione, i cosiddetti LINGUAGGI SIMBOLICI, basati su una modalità di espressione di operatori ed operandi più simili ai criteri usati dal linguaggio umano.
La programmabilità degli elaboratori Il linguaggio macchina ed i linguaggi simbolici Un programma espresso per mezzo di un linguaggio simbolico non è direttamente utilizzabile dall’unità di controllo dell’elaboratore; sarà prima necessario TRADURLOper mezzo di un apposito programma nell’unico linguaggio comprensibile alla CU: il linguaggio macchina appunto.
Gli Algoritmi Algoritmi: aspetti definitori I problemi umani la cui soluzione è demandata ad un elaboratore sono notoriamente MOLTO COMPLESSI.(es: per x = 1.347) Ma un elaboratore è in grado di svolgere SOLO OPERAZIONI ELEMENTARI e NON operazioni complesse. Come è possibile allora utilizzare un elaboratore per risolvere un problema complesso?
Gli Algoritmi Algoritmi: aspetti definitori Occorre SCOMPORRE il problema complesso in una serie di operazioni elementari in grado di poter essere compiute da un esecutore che non riesce ASSOLUTAMENTE a prendere in considerazione il problema nella sua interezza. Tale procedimento è detto PROCESSO ALGORITMICOed il risultato di tale processo è dettoALGORITMO
Gli Algoritmi Algoritmi: aspetti definitori L’ALGORITMO è una serie finita e completa di operazioni elementari ordinate alla soluzione di un problema, da effettuare meccanicamente, ossia attraverso una esecuzione precisa delle regole, senza implicare alcuna conoscenza del caso da trattare. Le operazioni in cui viene scomposto il processo risolutivo del problema devono essere comprensibili ed eseguibilidall’entità cui l’algoritmo è destinato, entità che può non necessariamente essere l’elaboratore. In pratica esisterà sempre un limite preciso al numero di istruzioni che possono comporre l’algoritmo e al tempo di esecuzione dello stesso, limite dettato dalle caratteristiche dell’elaboratore.
Gli Algoritmi Algoritmi: caratteristiche Un ALGORITMO adatto ad essere utilizzato da un elaboratore deve rispondere ad alcune proprietà essenziali; deve cioè essere: • effettivo; • definito e non ambiguo; • generale; • finito.
Gli Algoritmi Algoritmi: caratteristiche • Deve avere un punto di partenza e deve essere EFFETTIVOcioè deve avere un punto di partenza ed ogni operazione deve produrre un certo e bendeterminato risultato ogni volta che si presentano le stesse condizioni. • Deve essere DEFINITO e NON AMBIGUOè necessario ciò che sia stato previsto ogni aspetto che il problema può assumere durante la fase risolutiva e che ogni espressione sia interpretabile in maniera univoca senza ambiguità.
Gli Algoritmi Algoritmi: caratteristiche • Deve essere GENERALEossia utilizzabile per una serie o classe di problemi.Dominio dell’algoritmo: insieme dei dati che possono essere elaborati e le condizioni che ne permettono l’elaborazione • Deve essere FINITOdeve cioè poter giungere al suo termine dopo che sia stato eseguito un numero anche elevatissimo ma finito di istruzioni(poiché spesso le istruzioni possono essere eseguite in modo ciclico – loop -, sarà necessario che non sia possibile prevedere loop non aventi limite finito).
Gli Algoritmi Analisi e Programmazione ANALISI: fase di comprensione del problema, in base all’obiettivo da perseguire. Conduce ad un disegno articolato del problema stesso. Ogni problema che l’uomo si pone comporta una serie di azioni (“decisioni”) stabilite in base allo stato dell’informazione disponibile all’insorgere del problema stesso: si effettua una rassegna degli elementi determinanti alla soluzione, elencando gli elementi necessari e quelli disponibili.Vengono “decise” le azioni da compiere e la loro sequenza temporale.
Gli Algoritmi Analisi e Programmazione Generalizzazione della fase d’Analisi: • definizione dei dati in ingresso; • definizione dei risultati in uscita; • individuazione dei termini del problema e dei possibili metodi risolutivi; • determinazione della necessità e della disponibilità di risorse (di calcolo e memorizzazione); • generalizzazione del problema (definizione di una classe di problemi da risolvere); • descrizione informale dell’algoritmo o degli algoritmi necessari a risolvere la procedura.
Gli Algoritmi Analisi e Programmazione PROGRAMMAZIONE: ha lo scopo di descrivere le operazioni che l’elaboratore deve eseguire per risolvere il problema. Fase della programmazione insieme delle attività e delle funzioni che trasformano il bisogno (necessità di risolvere il problema con un elaboratore) in una richiesta di formulazione, costruzione e definizione delle regole di comportamento per la soluzione di classi di processi di elaborazione, fatte ad un insieme di risorse di calcolo.
Gli Algoritmi Analisi e Programmazione Tecnica TOP-DOWN: si definiscono inizialmente un insieme d’azioni a grandi linee (macro istruzioni) e si procede per raffinamenti successivi, fino ad arrivare ad operazioni elementari che l’esperienza designa come indipendenti dal linguaggio di programmazione utilizzato per scrivere il programma. Tecnica BOTTOM-UP: parte dai singoli dati e dalle operazioni elementari da compiere su di essi, arrivando, per aggregazione, ad una o più procedure automatiche.
Gli Algoritmi Analisi e Programmazione Indipendentemente dalla tecnica usata,la programmazione si concretizza nei seguenti passi: • definizione formale dell’algoritmo, spesso in forma grafica tramite un diagramma a blocchi; • stesura del programma nel linguaggio di programmazione prescelto; • prova del programma. La programmazione è sicuramente un processo creativo non vincolato da regole, che deve tenere in considerazione alcuni criteri di ottimizzazione quali i tempi di calcolo e l’occupazione delle memorie.
Gli Algoritmi Esempi di algoritmi • Una ricetta di cucina. • Lettura di due valori numerici e stampa del maggiore tra i due • Lettura di due valori numerici A e Be stampa di (A-B)^2 • Lettura del valore numerico n e calcolo di • Lettura di due valori numerici M e N (con M>=N) e calcolo del M.C.D. • Ordinamento di una sequenza di numeri
Gli Algoritmi Algoritmi rilevanti • Progetto Genoma Umano per la mappatura dei 100000 geni del DNA umano; • Navigazione Internet: percorsi ottimali che i dati devono percorrere in rete per il rapido accesso a grandi quantità di informazioni e motori di ricerca; • Percorso stradale minimo data una certa rete viaria (es: mappe in internet); • Compressione del testo, crittografia e firme digitali; • Allocazione ottimale dei prodotti negli scaffali di un supermercato (P. L. e Game Theory); • Gestione delle code; • …
Gli Algoritmi Efficienza di un Algoritmo Quand’è che un Algoritmo è EFFICIENTE? • quando è CORRETTO: cioè produce il risultato atteso; • quando è VELOCE (in termini di tempo impiegato per produrre il risultato); • quando è PARSIMONIOSO (in termini di risorse allocate per produrre il risultato).
Strutture dati Classificazione Variabili numeriche Bit Intere Reali (razionali) Complesse precisione singola precisione doppia Variabili carattere
Strutture dati Strutture di memorizzazione Variabili singole Vettori: una sequenza indicizzabile di valori numerici dello stesso tipo es: stringa = vettore di caratteri Matrici: una sequenza indicizzabile di vettori dello stesso tipo Array: matrici multidimensionali Liste: array differenziabili per tipo di valori memorizzabili
I Diagrammi a Blocchi Aspetti definitori I Diagrammi a Blocchi sono uno strumento molto utilizzato in informatica per una chiara e semplice esposizione in forma grafica degli algoritmi. Sono uno strumento fondamentale per l’analista (servono a definire in modo schematico il processo algoritmico di scomposizione di un problema), danno una visione immediata dell’iter risolutivo e facilitano il controllo di correttezza logica dell’algoritmo. Inoltre hanno anche uno scopo comunicativo: la documentazione di un algoritmo nel tempo.È infatti molto più facile leggere un algoritmo schematizzato mediante un diagramma a blocchi che leggerne la sua traduzione in uno specifico linguaggio di programmazione.
I Diagrammi a Blocchi Aspetti definitori • Requisiti essenziali di un Diagramma a Blocchi: • deve esistere un solo blocco di inizio; • deve essere previsto almeno un blocco di fine; • il diagramma può esibire un numero finito di blocchi di controllo; • il diagramma può prevedere un numero finito di blocchi relativi sia ad operazioni aritmetiche e logiche che di I/O.
I Diagrammi a Blocchi Simboli e regole di costruzione Punto di Inizio e punti di Fine Operazioni Aritmetiche e Logiche Operazioni di Input/Output Decisioni Sottoprogrammi Connessioni ad un qualsiasi punto del diagramma
I Diagrammi a Blocchi Simboli e regole di costruzione • Regole di implementazione: • ogni blocco logico/aritmetico o di I/O deve avere una sola linea in ingresso e una sola in uscita; • ogni blocco di controllo deve avere una sola linea in ingresso e due (o più) linee in uscita; • una linea può inserirsi in un blocco o in un’altra linea; • dall’unico blocco iniziale parte una sola linea, seguendo la quale, attraverso un insieme non vuoto di blocchi deve potersi raggiungere uno dei blocchi finali.
I Diagrammi a Blocchi es. 1 : scambio di due valori numerici semplice scambio di 2 valori numerici immessi da tastiera nelle variabili A e B
I Diagrammi a Blocchi es. 1 : scambio di due valori numerici semplice scambio di 2 valori numerici immessi da tastiera nelle variabili A e B dove
I Diagrammi a Blocchi es. 2 : scambio di due valori numerici scambio di 2 valori numerici immessi da tastiera nelle variabili A e B solo se il primo è maggiore del secondo
I Diagrammi a Blocchi es. 3 : somma dei valori di un vettore Somma di una certa sequenza di valori, immessi da tastiera all’interno di un vettore
I Diagrammi a Blocchi es. 3 : somma dei valori di un vettore Somma degli elementi di un vettore V già presente in memoria
I Diagrammi a Blocchi es. 4 : ricerca del minimo di un vettore Ricerca del minimo di un vettore V già presente in memoria
I Diagrammi a Blocchi es. 5 : somma, media, min e max di un vettore Somma, media, min e max di una sequenza di valori, immessi da tastiera all’interno di un vettore
I Diagrammi a Blocchi es. 6 : calcolo di una serie parziale Lettura del valore numerico n e calcolo di
I Diagrammi a Blocchi es. 7 : calcolo del MCD (algoritmo di Euclide) Lettura di due valori numerici M e N (con M>=N) e calcolo del M.C.D.
I Diagrammi a Blocchi es. 7 : calcolo del MCD (algoritmo inefficiente) Lettura di due valori numerici M e N (con M>=N) e calcolo del M.C.D. con un algoritmo inefficiente
I Diagrammi a Blocchi es. 8 : radici di un polinomio di 2° grado Ricerca delle due radici reali x1 e x2, di una equazione del tipo se >0 : =0 : <0 : non esistono radici reali
I Diagrammi a Blocchi es. 8 : radici di un polinomio di 2° grado Ricerca delle due radici reali x1 e x2, di una equazione del tipo
I Diagrammi a Blocchi es. 9 : ricerca in un vettore Verifica della presenza di un certo elemento A all’interno di un vettore V preesistente in memoria
I Diagrammi a Blocchi es. 10 : ordinamento di un vettore Ordinamento di un vettore V preesistente in memoria:un’ipotesi di lavoro Start 1: 4: 2: 5: 3: 6: Stop
I Diagrammi a Blocchi es. 10 : ordinamento di un vettore Ordinamento di un vettore V preesistente in memoria
I Diagrammi a Blocchi Attenzione: possibilità di loop infinito es. 11 : ricerca in un vettore (alg. dicotomico) Verifica della presenza di un certo elemento A all’interno di un vettore V preesistente in memoria, previa ordinamento
I Diagrammi a Blocchi es. 11 : ricerca in un vettore (alg. dicotomico) Verifica della presenza di un certo elemento A all’interno di un vettore V preesistente in memoria, previa ordinamento