




























































































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
dispensa corso di informatica completo
Tipologia: Dispense
1 / 113
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!





























































































Informatica come disciplina La progettazione dei contenuti di questo insegnamento di Informatica si fonda sulla concezione dell'informatica come disciplina scientifica e non soltanto sul ruolo che l'informatica ha assunto nella società contemporanea. A tal fine, si riporta di seguito un passo significativo del Manifesto dell'Informatica , un documento ufficiale che il GRIN (http://www.grin-informatica.it), l'Associazione Italiana dei Docenti di Informatica, ha sottoscritto per definire il corretto approccio alla disciplina informatica e al suo insegnamento. L'informatica è un elemento essenziale della società moderna, non solo perché necessaria al normale svolgimento di quotidiane attività, ma anche in quanto il suo sviluppo plasma e determina quello dell'intera società. Non esiste campo dell'attività umana in cui le scoperte dell'informatica non abbiano lasciato il segno. L'uso del calcolatore, infatti, è uscito dai campi tradizionali del calcolo scientifico per entrare in tutte le aree della produzione industriale, dalla medicina all'editoria. Due miliardi di persone si collegano ad Internet. Centinaia di milioni di miliardi (il numero non è un errore di battitura) di transistor – i componenti elementari delle tecnologie dell'informazione – popolano i prodotti che ci circondano, dall'automobile all'elettrodomestico, dalla pompa di benzina al videogioco, per l'equivalente della metà del valore economico di questi oggetti. Centinaia di miliardi di istruzioni software, manifestazioni di intelligenza umana, animano questi componenti e attraverso di essi tutti i processi che caratterizzano la nostra società moderna. Nel linguaggio comune il termine “informatica” viene usato per riferirsi a tre aspetti tra loro distinti, seppur collegati:
Storia dell'informatica e nascita del calcolatore Perché si possa arrivare all'informatica come la intendiamo oggi è stato necessario sviluppare parallelamente due diversi aspetti: quello tecnologico e quello filosofico (in particolare logico- matematico). La serie di eventi, idee e scoperte che culmina con i moderni calcolatori ha quindi una moltitudine di protagonisti, disseminati in un arco temporale di almeno 4000 anni, con molte storie parallele. Per quanto il racconto possa essere avvincente e ricco di colpi di scena, non è questa la sede per una esposizione esaustiva. Ci si limiterà pertanto a citare solo alcuni degli aspetti cruciali: quelli più funzionali alla comprensione del pensiero informatico e del funzionamento del calcolatore. Il termine calcolatore designa genericamente un sistema di elaborazione dati, nato in forma meccanica, sviluppatosi in forma analogica e giunto poi alla forma digitale. Generazione 0: I calcolatori meccanici Il più antico strumento di calcolo fu l’abaco, in uso già 4000 anni fa in Cina. Dopo di esso molte furono le scoperte in questo ambito, ma la maggior parte di esse (come ad esempio la pascalina ideata nel 1642 da Blaise Pascal) non vennero mai realizzate. Nel 1702, Gottfried Wilhelm Leibniz sviluppò la logica come disciplina matematica e formale, con i suoi scritti sul sistema numerico binario. Nel suo sistema, l'uno e lo zero rappresentano i valori vero e falso. Questo non ebbe un effetto immediato, ma fu decisivo nel secolo successivo. I primi veri progenitori dell’elaboratore moderno videro la luce agli inizi del XIX secolo. Nel 1804 Joseph Marie Jacquard introdusse una nuova tecnologia per i telai in grado di controllare il movimento di aghi, filo e tessuto attraverso schede perforate, automatizzando così la procedura di tessitura. A metà del XIX secolo, Charles Babbage elaborò una macchina di calcolo in grado di compiere operazioni aritmetiche, ma non fu mai realizzata. Fu Ada Lovelace (considerata oggi la prima programmatrice della storia), ad accorgersi delle vere potenzialità della macchina di Babbage: sebbene fosse stata progettata per svolgere solo calcoli matematici, Ada riconobbe la possibilità di programmare la macchina per altri fini. In questa versatilità risiede la principale differenza tra una calcolatrice tradizionale e un calcolatore. Nel 1854, le idee di Leibniz vennero riprese da George Boole, che pubblica la propria algebra booleana , creando un sistema nel quale è possibile trattare ogni relazione logica attraverso l'utilizzo di formule algebriche. Le operazioni (come l'addizione, la sottrazione e la moltiplicazione) vengono sostituite da operazioni logiche con valori di congiunzione, disgiunzione e negazione utilizzando solamente numeri binari (ossia costituiti dalle sole cifre 0 e 1). Alla fine del XIX secolo, Herman Hollerith, un funzionario statunitense dell’ufficio per il censimento, sviluppò una macchina tabulatrice, sempre a schede perforate, per automatizzare le operazioni di censimento. Il successo e la richiesta di queste macchine fu tale che nel 1896 Hollerith fondò la Tabulating Machine Company, che nel 1924 divenne la International Business Machine (IBM). Tra gli antenati degli anni '30 del calcolatore, figura il Memex, macchina immaginaria progettata da Vannevar Bush. L’idea era quella di un sistema di archiviazione di dati utilizzato a scopi personali. Il dispositivo era descritto come una scrivania dotata di schermi traslucidi, una tastiera, un set di pulsanti e delle leve. Il Memex avrebbe reso possibile la creazione da parte dell'utente di collegamenti tra foto e documenti, e per questo motivo viene oggi ricordato come primo supporto per l'approccio all' ipertesto. Sempre nella prima metà degli anni '30, Kurt Gödel enunciò i suoi famosi teoremi di incompletezza. Oltre a rappresentare un caposaldo nel campo della logica matematica, con importanti implicazioni di ordine filosofico, questi fecero da base per il lavoro di Alan Turing, matematico, logico e crittoanalista inglese. Egli formalizzò un modello di calcolatore universale (la Macchina di Turing, mai costruita realmente), dimostrò come ogni funzione calcolabile si possa eseguire attraverso un algoritmo installato su una Macchina di Turing, ma dimostrò anche come per alcuni algoritmi non sia possibile sapere a priori se siano eseguibili in un tempo finito o infinito. Tra le implicazioni più importanti della Macchina di Turing si sottolinea come essa introduca una netta separazione tra la macchina fisica da una parte , e i dati e gli algoritmi astratti dall'altra. Le basi teoriche per lo sviluppo dei moderni calcolatori sono ora mature.
Problemi, algoritmi e programmi Un algoritmo può essere definito come un metodo per risolvere in modo efficiente, univoco, universale, formalmente preciso e finito un problema. Nella sua accezione più ampia, è possibile includere nella categoria degli algoritmi anche una semplice ricetta di cucina oppure il libretto di istruzioni di un elettrodomestico. Entrambi infatti sono una successione di istruzioni precise per la realizzazione di un risultato. Il termine algoritmo deriva dal nome del matematico Muhammad ibn Musa al-Khuwarizmi. Le proprietà fondamentali di un algoritmo sono: finitezza delle operazioni da svolgere; non ambiguità del linguaggio in cui sono scritte le operazioni da effettuare. Questo significa che le istruzioni devono essere scritte in un linguaggio codificato e formale; universalità della procedura algoritmica, nel senso che essa deve valere per tutti i problemi dello stesso genere; completezza delle operazioni, nel senso che ogni operazione necessaria allo svolgimento del compito deve essere esplicitamente dichiarata. Nonostante sia più semplice affrontare algoritmicamente calcoli matematici, o geometrici, è possibile affrontare nello stesso modo qualsiasi problema, a patto che se ne possa fornirne una definizione formalmente corretta e non ambigua. Questo esercizio di formalizzazione trascende l'uso del computer e aiuta gli individui ad affrontare i problemi in modo astratto. Va notato che ogni problema può essere affrontato e descritto in molti modi diversi; quindi non esiste un unico algoritmo per la risoluzione di un problema. Questo significa che lo sviluppo di algoritmi è un'attività che richiede, tra le altre cose, creatività e ingegno. A tal proposito, vale la pena citare una famosa battuta di Bill Gates (co-fondatore della Microsoft): " Sceglierò sempre un pigro per fare un lavoro difficile perché troverà il modo più facile per farlo ". Si sottolinea inoltre come l'efficacia e la complessità di un algoritmo dipendano anche dall'organizzazione dei dati a disposizione dell'algoritmo per la risoluzione del problema. Esistono molti modi di organizzare i dati, ognuno dei quali ha pregi e difetti. In genere gli aspetti più rilevanti di cui tenere conto sono: la quantità di spazio occupato; la velocità con cui è possibile reperire un determinato dato; la facilità con cui si possono aggiungere, modificare o eliminare dati. Infine, un programma può essere definito come un algoritmo scritto in un linguaggio comprensibile al calcolatore, che utilizza dati organizzati secondo una determinata strategia ed è vincolato alle risorse disponibili e alle condizioni al contorno del calcolatore sul quale il programma viene eseguito.
Informazione e codifica L’informazione può essere definita come un insieme di dati espressi mediante una rappresentazione simbolica ed inseriti in un contesto interpretativo. In generale, per rappresentare le informazioni è possibile adottare sistemi di simboli diversi. Ad esempio, come mostrato nella Figura 2.1, le lettere dell’alfabeto, i numeri arabi, i numeri romani o ancora i segnali stradali sono sistemi di simboli comunemente usati per rappresentare e comunicare informazioni. Figura 2.1. Sistemi di simboli per la rappresentazione di informazioni. Esiste dunque una corrispondenza arbitraria fra ogni singolo simbolo e l’informazione che esso intende rappresentare. Questa corrispondenza viene chiamata codifica dell’informazione. Un codice è un insieme di simboli e di regole. Queste ultime sono necessarie a definire l’uso e il significato dei simboli. Codificare un’informazione significa determinare una corrispondenza fra i segni di un codice e i dati che costituiscono l’informazione e il suo significato. Figura 2.2. Due diverse codifiche del divieto di fumo. Di una stessa informazione sono possibili diverse codifiche che usano regole e segni diversi. Ad esempio, in un ristorante si può trovare un cartello con la scritta “vietato fumare” o più semplicemente il simbolo della sigaretta con il divieto. Nonostante l’informazione sia sempre la stessa, ossia che in quel ristorante non si può fumare, per trasmetterla si possono utilizzare codici (cioè simboli) anche molto diversi tra loro.
Riduzione del numero di simboli Nell'esempio della Figura 2.3, è stato mostrato un codice che richiedeva 15 simboli per rappresentare altrettante informazioni diverse. Un codice costruito in questo modo è molto semplice e di rapida realizzazione, ma comporta che il numero di simboli che compongono il codice e la tabella di codifica crescano con il numero di informazioni da rappresentare. È facile intuire che la gestione di un codice con un elevato numero di simboli possa essere molto complessa. È possibile costruire un codice che consenta di rappresentare lo stesso numero di informazioni diverse utilizzando un numero inferiore di simboli. Ciò significa ridurre il numero di simboli a disposizione senza tuttavia ridurre il numero di informazioni che possono essere codificate. E' evidente che, avendo meno simboli a disposizione, la rappresentazione di un’informazione richiederà una combinazione di più simboli e quindi una maggiore lunghezza dei messaggi codificati. Con riferimento all'esempio del codice per rappresentare i voti di un esame universitario, si supponga di poter utilizzare soltanto i simboli! £ $ %. Nella Figura 2.4, si mostra un esempio di tabella di codifica basata sui quattro simboli considerati. Figura 2.4. Esempio di codice per i voti di un esame universitario basato su quattro simboli. In questo modo, dato un voto, la lunghezza del messaggio codificato sarà pari a due simboli, il doppio rispetto all'unico simbolo richiesto dal codice della Figura 2.3. Si noti inoltre che sono importanti tanto i simboli quanto la posizione che questi occupano nel messaggio. Infatti il significato di “!$” è ben diverso da “$!”.
Codifica binaria La rappresentazione dell’informazione numerica può adottare varie tecniche. Normalmente si usa la numerazione decimale posizionale, dove una cifra assume un valore dipendente dalla posizione che occupa nel numero. Per esempio, la cifra “2” nel numero 12 vale 2*10^0 (dove 0 è la posizione occupata dal 2 nel numero in esame) e nel numero 2987 vale 2*10^3 (dove 3 è la posizione occupata dal 2 nel numero in esame). Adottando una numerazione in base 10 si hanno 10 cifre con le quali costruire i numeri: 0, 1, 2, 3, 4, 5, 6, 7, 8 e 9. Esistono molti altri tipi di numerazione in cui il numero di cifre è minore a 10, come ad esempio nella numerazione binaria. Questa fu inventata nel XVII secolo da Gottfried Liebniz e si basa sull’utilizzo di soltanto due cifre: 0 e 1. La differenza è che mentre nella numerazione decimale il valore si misura in potenze di 10, nel caso della numerazione binaria il valore si misura in potenze di 2. A parità di valore da scrivere con la numerazione binaria, è necessario impiegare molte più cifre. Questo tipo di numerazione divenne fondamentale con l’avvento dei calcolatori elettronici, poiché le due cifre 0 e 1 sono intuitivamente associabili ai due possibili stati fisici del calcolatore, come ad esempio passaggio/non-passaggio di corrente attraverso un cavo elettrico; polarizzazione/non-polarizzazione di una sostanza magnetizzabile; c arica elettrica positiva/negativa di una sostanza. Per manipolare ed elaborare informazioni (numeri, testo, immagini, audio, video), il calcolatore ha bisogno che queste siano codificate attraverso un codice composto dai soli simboli di 0 e 1. Tale rappresentazione dell’informazione prende il nome di rappresentazione binaria o rappresentazione digitale. Un bit ( binary digit ) rappresenta l’unità minima di informazione, ossia una sola unità informativa che può avere valore 0 o 1. Per poter rappresentare un numero maggiore di informazioni sarà necessario combinare i bit in sequenze. Ad esempio, si supponga di voler fornire una rappresentazione binaria del codice della Figura 2.4. Ogni informazione, cioè ogni possibile voto, deve avere una rappresentazione binaria diversa dalla codifica degli altri voti, come mostrato nella Figura 2.5. Figura 2.5. Esempio di codifica binaria per i voti di un esame universitario. Si noti che, poiché il numero di simboli che costituiscono il codice binario è due (0 e 1), la lunghezza di ogni informazione è maggiore rispetto all'esempio della Figura 2.4 in cui si erano usati quattro simboli. All'aumentare del numero di bit di un simbolo, aumenta la quantità di informazioni rappresentabili. Ad esempio, nel caso in cui si voglia rappresentare un numero naturale (intero), il numero di bit determina il valore massimo rappresentabile, mentre nel caso di un numero irrazionale (con virgola), il numero di bit determina implicitamente anche la precisione con cui è possibile rappresentarlo. Nel primo caso sono frequenti le rappresentazioni a 8, 16 e 32 bit, mentre nel secondo caso sono più comuni rappresentazioni a 32 e 64 bit. A titolo di esempio, se si volesse rappresentare un numero intero non negativo con 8 bit, le combinazioni possibili sarebbero 2^8 =256, quindi i valori rappresentabili andrebbero da 0 a 255.
Il fatto che un codice “sia di 8 bit” significa che la rappresentazione di un singolo carattere occupa 8 bit (ad esempio, la lettera “a” nella codifica ASCII è rappresentata dal codice 01100001) e che, complessivamente, il codice è in grado di rappresentare fino a 2^8 =256 caratteri diversi. Questa considerazione è generalizzabile: dato un codice di N bit possiamo dire che ogni carattere di quel codice occupa N bit e che complessivamente il codice può rappresentare fino a 2N^ caratteri diversi. Il primo alfabeto codificato è stato l’alfabeto anglosassone. Questo primo codice venne chiamato ASCII ( American Standard Code for Information Interchange ). In origine l’ASCII era a 7 bit, cioè esistevano 2^7 =128 diverse combinazioni di bit per la rappresentazione dei caratteri. Questo significa che ASCII a 7 bit è in grado di rappresentare fino a 128 caratteri diversi. Figura 2.6. Il codice ASCII a 7 bit. In questo primo standard (mostrato nella Figura 2.6) non era possibile rappresentare caratteri come le lettere accentate, di uso comune nei paesi di influenza neolatina. A questo primo codice ne fece seguito una sua estensione, detta ASCII esteso. Questa si serve di un byte (8 bit) consentendo la rappresentazione di 2^8 = 256 caratteri diversi nei quali sono contenute anche le lettere accentate e altri simboli. Per codificare una parola occorre recuperare dalla tabella ASCII la sequenza di bit corrispondenti ad ogni lettera che la compone. Ad esempio si voglia rappresentare la stringa “Inf”. Essa richiede 3 byte, uno per ogni carattere, e l’insieme dei bit corrispondente ad ogni lettera sarà: I = 01001001 n = 01101110
f = 01100110 Per decodificare un testo ASCII il procedimento è inverso rispetto a quello di codifica. Data la sequenza 010010010110111001100110, dobbiamo suddividerla in gruppi di otto bit, e poi decodificare ogni gruppo con il carattere corrispondente mediante la tabella ASCII: 01001001 = I 01101110 = n 01100110 = f Si noti come alla lettera maiuscola corrisponde un simbolo diverso rispetto alla corrispettiva minuscola, infatti la lettera “i” corrisponde alla sequenza 01101001. I caratteri maiuscoli e minuscoli sono a tutti gli effetti diversi dal punto di vista della codifica binaria. Si noti inoltre che per decodificare un messaggio è necessario conoscere a priori il tipo di codifica usato. Dall'analogico al digitale La codifica di elementi come suoni, immagini e animazioni presenta aspetti molto diversi rispetto a quella di testi e singoli numeri. Il testo è naturalmente composto da un insieme discreto di simboli (che diventano quindi l'unità minima di informazione), mentre per i numeri ciò che conta è il loro valore (codificato direttamente in binario con la precisione desiderata). Ma quali sono le unità informative minime di un suono o di un'immagine? Suoni e immagini sono descrivibili come segnali , cioè variazioni di una certa grandezza fisica lungo una o più dimensioni: la pressione che varia in funzione del tempo nel caso di un suono, la luce che varia in funzione dello spazio nel caso di un'immagine, o la posizione di un corpo che varia in funzione del tempo nel caso di un'animazione. La particolarità di questi segnali è che sono continui (Figura 2.7): perchè la pressione sonora passi da un valore ad un altro, devono essere attraversati tutti gli infiniti valori intermedi. Lo stesso vale per una fotografia (la transizione tra due colori, per quanto repentina e impercettibile, non può essere immediata) e per il movimento (per andare da un punto ad un altro occorre passare per infiniti punti intermedi). Figura 2.7. Un segnale analogico e il rispettivo segnale digitale Se si volesse dunque usare tutti i valori assunti dal segnale come unità minime informative di suoni e immagini, ci si scontrerebbe con la necessità di una memoria infinita. Per questo motivo, per poter rappresentare suoni e immagini in un calcolatore, è necessario passare dal dominio analogico (continuo) a quello digitale (discreto, composto da un numero finito di punti) attraverso un processo chiamato campionamento.
Rappresentazione digitale delle immagini Per le immagini l’unità minima di informazione è rappresentata dal pixel ( picture element – elemento dell’immagine ). In sostanza si campiona l’immagine attraverso una griglia regolare in cui ogni cella è un pixel e a ogni pixel è associato un colore. Più la griglia è fitta, maggiore sarà il numero di pixel e di conseguenza migliore sarà la risoluzione dell’immagine. Un esempio di griglia di pixel applicata a un’immagine è mostrato nella Figura 2.9. La codifica di un'immagine realizzata in questo modo è chiamata bitmap o raster. Figura 2.9. Esempio di griglia di pixel. La risoluzione e la dimensione di un’immagine dipendono dal numero di pixel da cui è composta: un’immagine la cui griglia misura 800 colonne x 600 righe sarà divisa in 480000 pixel (0.48 megapixel). Ogni pixel rappresenta un punto di colore, la cui tonalità è descritta mediante una sequenza di bit. Se l’immagine è in bianco e nero sarà sufficiente un unico bit per descrivere ciascun pixel: 0 per il nero e 1 per il bianco. Se l’immagine è a colori sarà necessario un numero maggiore di bit per pixel, che dipende da come vengono codificati i colori. Un sistema per la rappresentazione digitale dei colori viene detto modello di colore , e ne esistono molti. La maggior parte usa i colori primari convenzionali per derivare tutte le possibili tonalità. Il più utilizzato è lo schema RGB , (Red Green Blue, rosso verde blu) che sono i colori primari su cui il modello è costruito. Per distinguere i colori l’occhio umano utilizza fotorecettori di tre tipi, rispettivamente più sensibili al rosso, al verde o al blu. Questi colori sono quindi detti primari perchè miscelandoli è possibile evocare la percezione di qualsiasi altro colore. Solitamente in RGB per ognuno dei tre colori primari è utilizzato un byte, per un totale di 24 bit per pixel. E' quindi possibile rappresentare 256 sfumature diverse per ogni colore primario, quindi complessivamente 256 x 256 x 256 colori diversi, cioè circa 16 milioni di tonalità di colore. In definitiva, la rappresentazione binaria di un’immagine è costituita da una sequenza di pixel, cioè gruppi di bit che descrivono il colore associato a ciascun punto. Se consideriamo un’immagine di dimensione 640 x 480 espressa secondo lo schema RGB, possiamo calcolare quanti byte saranno necessari per memorizzare tale immagine: 640 x 480 = 307200 pixel, ognuno dei quali richiede 3 byte per rappresentare il colore associato, quindi 307200 x 3 = 921600 byte = 900 KiB.
Rappresentazione digitale dei suoni Per i suoni l’unità minima di informazione è rappresentata da un campione di ampiezza, cioè il valore di ampiezza dell'onda sonora in un determinato istante. Gli esempi in Figura 2.7 e 2.8 si riferiscono proprio al suono (questa codifica prende il nome di Pulse Code Modulation, PCM). Un suono può essere descritto come la sensazione causata dall'oscillazione più o meno periodica dell'aria che incide sul timpano dell'ascoltatore. Oscillazioni di diversa ampiezza danno origine alla sensazione di volumi più o meno elevati, mentre il periodo delle oscillazioni incide sulla percezione di suoni gravi o acuti. L'orecchio umano può sentire suoni che oscillano da 20 fino a 20000 volte al secondo (da 20 a 20000 hertz, o Hz). Dunque, per il teorema di Nyquist-Shannon, in genere si campiona il segnale più di 40000 volte al secondo (solitamente 44100 o 48000). Tuttavia, per suoni particolari come la voce, tutte le oscillazioni sopra i 4000 Hz non hanno un particolare contenuto informativo; non è quindi raro vedere codifiche a 8000 campioni al secondo per applicazioni come telefonia o messaggistica vocale. Riguardo alla precisione di ogni campione audio, si è scelto un numero di bit consono a rappresentare la gamma di volumi a cui si è normalmente esposti, dal sussurro fino a rumori forti (ma sotto la soglia del dolore); questo valore è stato fissato a 16 bit. Tuttavia non è raro trovare suoni registrati a 24 bit, in modo da poter sfruttare una precisione maggiore durante le fasi di lavorazione di un prodotto, come può essere un disco musicale. Infine si noti che l'essere umano, in genere, è dotato di due orecchie. Questo gli permette di localizzare la direzione da cui provengono i suoni. Per poter codificare (almeno in parte) questo tipo di informazione, solitamente vengono rappresentati segnali audio stereofonici, cioè composti da due sequenze di campioni, una relativa al canale sinistro ed una al canale destro. Esistono poi codifiche a più canali (come il 5.1, composto da 6 canali indipendenti), che permettono una maggiore precisione spaziale. In definitiva, la rappresentazione binaria di un suono è costituita da una sequenza di campioni, cioè gruppi di bit che descrivono il valore di pressione sonora di ciascun canale. A scopo esemplificativo si può calcolare la memoria necessaria a memorizzare un minuto di musica in qualità CD: 60 secondi x 44100 campioni al secondo x 16 bit per campione x 2 canali = 84672000 bit = 10584000 byte =10336 KiB = 10.1 MiB
Principali formati multimediali Lo studente più attento si sarà accorto che il numero di bit necessario alla memorizzazione di suoni, immagini e video è decisamente superiore a quanto suggerisce l'esperienza: quasi 1 MiB per una piccola immagine, 10 MiB per un audio di 1 minuto e addirittura 10 GiB per un breve video ad alta qualità. Questa discrepanza trova una giustificazione nel fatto che il modo in cui viene rappresentato nativamente un dato non corrisponde necessariamente al modo in cui viene archiviato in un contenitore. Vi sono infatti 3 modi di memorizzare l'informazione: in modo non compresso , in modo compresso senza perdita di informazioni ( lossless ), e in modo compresso con perdita di informazioni ( lossy ). I metodi di memorizzazione non compressi comportano un'occupazione di memoria che corrisponde alla memoria necessaria per la rappresentazione originale. A fronte di questo utilizzo smodato di memoria vi è il vantaggio di poter manipolare il materiale multimediale in modo diretto, senza passaggi intermedi necessari a convertire le informazioni in una forma comprensibile al calcolatore. Formati di questo tipo sono ideali per le fasi di lavorazione del bene multimediale. Nella tabella seguente si illustrano i nomi di alcuni formati e contenitori di questo tipo: Esempi di codifiche non compresse
I metodi di compressione lossless si basano sull'idea di eliminare ciò che è ridondante, si evita cioè di memorizzare informazioni inutilmente ripetute. Questo comporta un risparmio di memoria che in media si aggira intorno al 50% dell'occupazione originale. Il costo di questo risparmio si riflette nella necessità di reintrodurre la ridondanza (decompressione) per poter elaborare le informazioni (fosse anche solo per visualizzare l'immagine su schermo o sentire il suono). Va comunque notato che la decompressione di un file lossless dà origine alle stesse informazioni di partenza, senza che sia scartato alcun dettaglio. Formati di questo tipo sono quindi l'ideale per l'archiviazione o la trasmissione di dati nella forma più conservativa, senza che però sia sprecata memoria. Nella tabella seguente si illustrano i nomi di alcuni formati e contenitori di questo tipo: Esempi di codifiche lossless
Tipo di dati Esempio di Codifica Esempio di Contenitore Esempio di funzionamento Audio
Se un campione è ripetuto, viene memorizzato solo una volta con l'indicazione di quante volte va ripetuto Immagini RLE, LZW TIFF, PNG Se un pixel è ripetuto, viene memorizzato solo una volta con l'indicazione di quante volte va ripetuto Video HuffYUV, Animation
Viene memorizzata solo la porzione di fotogramma diversa dal fotogramma precedente Altro Huffman ZIP, RAR Si modifica la codifica in modo che i simboli più ripetuti abbiano un codice più corto Infine, i metodi di compressione lossy si basano sull'idea di eliminare ciò che è irrilevante, si evita cioè di memorizzare informazioni non percepibili dall'utente. Viene quindi persa in modo definitivo tutta quell'informazione che in media non viene percepita. Questo comporta un oggettivo degrado dell'informazione, con la potenziale introduzione di artefatti e distorsioni non presenti nel dato originale. Il risparmio che ne deriva può arrivare fino al 90% dell'occupazione originale. Oltre all'oggettiva perdita di informazioni, il costo è che la decompressone in genere è più onerosa per il calcolatore in termini di potenza di calcolo richiesta. Inoltre, sebbene la decompressione sia sempre necessaria per la fruizione del dato originale, è caldamente sconsigliata la manipolazione dei dati e la successiva ricompressione lossy, in quanto si affronterebbe una nuova perdita di informazioni, con l'introduzione di sempre più distorsioni e artefatti. Formati di questo tipo sono ideali per la fruizione in streaming da parte dell'utente finale. Nella tabella seguente si illustrano i nomi di alcuni formati e contenitori di questo tipo, mentre in Figura 2.10 si può vedere un esempio di immagine che ha subito diverse ri-codifiche (decompressione e ricompressione) in formato JPEG. Esempi di codifiche lossy