Il 0% ha trovato utile questo documento (0 voti)
20 visualizzazioni90 pagine

Informatica Generale

Caricato da

cincinnatus72
Copyright
© © All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Il 0% ha trovato utile questo documento (0 voti)
20 visualizzazioni90 pagine

Informatica Generale

Caricato da

cincinnatus72
Copyright
© © All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Sei sulla pagina 1/ 90

Cos’è l’informatica?

La disciplina dell’informatica è lo studio sistematico di processi algoritmici che descrivono e


trasformano l’informazione: i loro aspetti teorici, l’analisi, lo sviluppo, l’efficienza,
l’implementazione e applicazione. La domanda fondamentale alla base dell’informatica è:
cosa può essere efficacemente automatizzato?

Cosa non è l’informatica

Non è l’uso delle applicazioni (l'applimatica), non è la scienza dei computer.


L’informatica non è la scienza dei computer più di quanto l’astronomia non sia la scienza dei
telescopi, la biologia la scienza dei microscopi o la chimica la scienza dei baker e delle
ampolle. La scienza non si occupa degli strumenti ma di come questi vengono utilizzati e di
cosa si trova col loro aiuto.

Sviluppo tecnologico:

“Computer”: etimologia

Si tratta di una parola in uso dal 1600, è un concetto legato allo svolgimento di calcoli
numerici; la parola si riferiva a una persone che svolge quindi dei calcoli, il computer umano
era una figura ricorrente in molti ambiti scientifici dove erano necessari calcoli che
richiedevano molto tempo e noiosi (in ambiti come astronomia, meteorologia, tavole
matematiche, tavole balistiche…). A partire dal 1800 questi compiti di calcolo erano assegnati
specialmente a donne perché considerate più pazienti.

A partire dalla fine del 1800 il termine computer inizia a riferirsi a dei dispositivi, dal 1930 si
passa al concetto di “macchina digitale programmabile”.

Storia dello sviluppo tecnologico:

A partire dal Paleolitico: vengono sviluppati i primi sistemi per il calcolo automatico iniziando
dalle mani e altri sistemi semplici come calculi, abaco...

Dal '600 si inizia a parla di dispositivi meccanici per il calcolo automatico

A partire dal 1800/1840 troviamo i primi dispositivi meccanici “a programma”: telai Jacquard,
pianole, le macchine di Babbage

1843: pubblicazione delle note di Ada Lovelace sulla analytical engine di Babbage, e nascita
della programmazione
1896: Hollerith fonda la “Tabulating Machine Company” (poi IBM) che produce sistemi
meccanografici a schede

1930: prime macchine elettromeccaniche di grandi dimensioni (Zuse in Germania, Mark 1 ad


Harvard)

1946: ENIAC, elaboratore a valvole e a programma filato

1950: prime macchine a programma memorizzato (von Neumann: ENIAC, IAS Princeton)

Sistemi di calcolo:

Le mani sono un sistema di calcolo potente, non solo per contare ma anche per
memorizzare risultati parziali di operazioni aritmetiche e quindi svolgere anche operazioni
con addendi grandi; sono stati creati numerosi sistemi per permettere di svolgere calcoli con
le mani in maniera ottimale.

I numeri grafici sono tra i sistemi di calcoli più antichi usati dall’uomo; l’uso di dispositivi
esterni al nostro corpo per fare calcoli è molti antico. Alcuni esempi sono ossa di Lebombo
(40 000 a.C,) o di Ishango (20 000 a.C.) o il corno di little salt spring (10 000 a.C.). Sono tutti
strumenti che riportano incisioni che fanno pensare a calcoli legati allo scorrere del tempo e
usati quindi come misure di tempo, calendari…

Più recente è l’uso di piccoli oggetti sagomati per indicare valori numerici come i “calculi”, dei
piccoli sassi con forme o decorazioni diverse per indicare valori diversi (epoca
mesopotamica 3500 a.C.).

I calculi hanno portato allo sviluppo dell’abaco cioè di sassolini ordinati (ex. tavola di
Salamina 300 a.C.).

Le calcolatrici meccaniche arrivano nel 1600 che permettono di svolgere calcoli in maniera
automatica (ex. Orologio calcolatore di Schickard del 1623 e la Pascalina di Pascal del 1642).
Questi dispositivi potevano svolgere solo alcuni tipi di operazioni con addendi diversi in
maniera automatica, non erano dispositivi programmabili e quindi riconfigurabili per svolgere
operazioni diverse.

Le macchine di Babbage furono una rivoluzione concettuale portate da Charles Babbage


(1791-1871); a lui si devono i primi progetti, mai realizzati, di primi computer meccanici
concettualmente simili a computer moderni. Una delle più importanti fu la macchina
analitica, programmabile tramite schede perforate, la configurazione di questi ingranaggi
poteva essere riconfigurata per svolgere operazioni diverse.

Ada Lovelace (1815-1852) fu una matematica considerata la prima programmatrice della


storia (ispirata dalla macchina analitica di Babbage). Pubblicò un articolo in cui proponeva un
algoritmo, sequenza di operazioni, che la macchina analitica poteva essere programmata a
fare per calcolare i numeri di Bernoulli (programmazione: istruire una macchina a fare una
serie di calcoli che svolti in sequenza possono portare anche alla soluzione di calcoli
complessi). Ada riuscì a teorizzare che una macchina potesse elaborare informazioni
musicali oltre che a compiere calcoli numerici.

La scheda perforata è un buon esempio di traduzione di informazione in formato digitale e di


uso pratico di questo tipo di tecnologia. Queste schede vennero usate per la prima volta nel
1890 negli USA per fare un censimento della popolazione da parte di Herman Hollerith
(1860-1929). Le informazioni venivano inserite nelle schede tramite l’applicazione di fessure
corrispondenti ai dati, le schede potevano così venir lette in maniera automatica passando la
scheda in un dispositivo di lettura alimentata elettricamente. Questo è il primo esempio di
informazione digitalizzata.

Digitalizzazione dell’informazione: l’informazione digitale è composta da numeri binari,


composti da due cifre (0 e 1).
Un vantaggio della rappresentazione dell’informazione in formato digitale è che
l'informazione può essere salvata e copiata in maniera esatta, controllando che le due
sequenze numeriche siano identiche.
L’informazione in formato analogico, rappresentata e salvata per analogia, si modifica a
causa del processo di conversione e del degrado del supporto (dischi in vinile, nastri…).

L’ENIAC (Electronic Numerical Integrator & Computer) è considerato il primo computer


elettronico e risale al 1946; è un computer a valvole, dispositivi capaci di immagazzinare
informazione sotto forma di codici binari, il computer era composto da più di 17000 valvole
che si bruciavano ogni giorno e dovevano quindi essere sostituite.
L’ENIAC era una macchina programmabile tramite cavi collegati su pannelli: modificando dei
collegamenti dei cavi la macchina poteva essere riprogrammata per compiere calcoli diversi;
si parla quindi di “hardware”, le connessione dovevano quindi essere cambiate fisicamente,
non in modo automatico. Era un progetto militare finanziato dalla Marina statunitense.
L’ENIAC è considerato il capostipite dello sviluppo dell’informatica per tutto il resto del secolo.

Dopo l’ENIAC:
Transistor e circuiti integrati:

Un transistor è un dispositivo che, come una valvola, può assumere due stati (ex. acceso e
spento) e quindi di memorizzare due valori; rispetto alle valvole però consuma molto meno, è
molto più affidabile, al contrario delle valvole dell'ENIAC non si rompe con così tanta facilità
ed è estremamente più compatto, occupa uno spazio limitato.

Vi è poi un progressivo processo di miniaturizzazione in questo campo che è stato reso


possibile dai circuiti integrati che riuscirono a far stare un gran numero di transistor e di
connessioni tra essi in un unico chip di limitate dimensioni. Oggi si parla di VLSI (Very Large
Scale Integration), miliardi di transistor su un solo chip.

Secondo la legge di Moore, i transistor in un chip raddoppiano ogni due anni: a parità di
superficie il progresso tecnologico permette di contenere il doppio dei transistor in un unico
chip in soli due anni; la legge fu formulata da Gordon Moore, fondatore e presidente di Intel.
Si tratta però di un’osservazione, non di una legge che non può essere trasgredita: lo sviluppo
tecnologico può raggiungere una saturazione che richiederà di sviluppare tecnologie diverse.

Queste tecnologie hanno permesso di miniaturizzare i computer portando negli anni ‘80 ai
Personal Computer e negli anni ‘90 ai dispositivi mobili.

Processore, memoria e programmi:

Un programma è un insieme di istruzioni che nella loro individualità sono istruzioni


elementari (svolgono operazioni molto semplici) ma una lunga sequenza di operazioni
combinate permette di svolgere calcoli e operazioni complessi.
In un computer attuale basato su transistor, basato sull’informazione in formato digitale
(quindi basato su bit: zeri e uni), i programmi sono sequenze di istruzioni le quali sono a loro
volta sequenze di zeri e uni.
Nei computer digitali una componente fondamentale è la memoria dove non si salvano solo i
dati ma anche i programmi che vengono eseguiti da un processore, i CPU (central
processing unit).
Ora le istruzioni non sono più fisiche, hardware (come il cambiamento manuale dei cavi
dell’ENIAC) ma sono anch’esse rappresentate come dati digitali, software.
Questo tipo di assetto ha il vantaggio che un computer può eseguire molto più velocemente i
propri programmi e può passare più velocemente da un programma all’altro.

Sviluppo del software:

Fino agli anni ‘80 i programmi sono stati scritti in maniera “monolitica”, il programma era
un’entità a sé stante indipendente da altri programmi.
Oggi chi scrive i programmi deve ragionare in maniera diversa: lo sviluppo dei software
avviene su più livelli, ogni software dipende da altri software.
Questo permette ai programmatori di non riscrivere da zero funzionalità software già scritte
da altri, il programmatore non deve necessariamente conoscere come funzione un blocco di
software, deve solo sapere come usarlo velocizzando il processo di programmazione.

Un esempio è la “pila” del software Android:

Internet e www:

Internet nasce con ARPANet nel ‘69 e altre reti volte a connettere tra loro computer.
Nel 1973 l’idea chiave era quindi la creazione della rete delle reti tramite specifici protocolli
(nel caso specifico protocollo TCP/IP, Transmission Control Protocol/Internet Protocol) che
servono a specificare in quale maniera l’informazione viene trasmessa sulla rete, inviata e
decodificata.
La rete è quindi il circuito su cui navigano le informazioni, la WWW è il contenuto che circola
in rete, l’applicazione principale di internet che nasce alla fine degli anni ‘80.
Anche il WWW si basa su protocolli specifici, in questo caso l’HTTP (Hyper-Text Transfer
Protocol) sviluppato da Tim Berners e Lee al CERN.

Interfacce e metafore linguistiche:

Un aspetto importante dello sviluppo dei computer e come questi possono comunicare coi
propri operatori umani: come ricevere e come restituire informazioni; si parla in questo caso
di UI (user interface).
Le interfacce si basano su metafore, figure retoriche che implicano un trasferimento di
significato, vi è quindi un rapporto di somiglianza tra il termine di partenze e il termine
metaforico sfruttando un potere evocativo e comunicativo.
Sono importanti perché permettono all’utente di utilizzare i dispositivi senza leggere manuali
data la loro intuitività.
Un esempio di interfaccia abbastanza “primitiva” è un’interfaccia a linea di comando o CLI
(command line interface), l’unico tipo di informazione mostrata è il testo, senza alcun
contenuto grafico; mostra il testo scritto dalla persona e l’eventuale testo di risposta ai
comandi dell’utente.

Noi siamo invece più abituati a interfacce grafiche, GUI (graphical user interface) che hanno
elementi precisi: finestre, icone (associata a file o programmi), menù a tendina che ci
permettono di navigare e puntatori. Questi elementi vanno a formare l’acronimo WIMP
(windows, icons, menus, pointers).
I sistemi operativi più famosi come Microsoft e Apple sono basati sulla WIMP; basati sulla
metafora del desktop: le icone sono come gli oggetti su una scrivania che posso usare e
spostare.

Oggi le interfacce wimp sono parzialmente superate, l’interazione col computer non si basa
solamente su elementi grafici ma si basa su modalità più varie di interazione, modalità
sensoriali che includono il suono, la traduzione speech to text e altre modalità legate al
nostro movimento.
Algoritmi:

Storia:

Hilbert e il formalismo:
Alla fine dell'800 la matematica si interroga sui propri fondamenti, David Hilbert propone 23
problemi matematici fondamentali da risolvere nel corso del XX secolo. Uno di questi è il
problema della decisione (Entscheidungsproblem): esiste un procedimento per decidere se
una “proposizione” è o meno conseguenza logica di altre? Esiste quindi un modo per
comprendere se la mia proposizione è quindi giusta o sbagliata?
Hilbert è fiducioso: in matematica non esiste l'Ignorabimus! In matematica è quindi sempre
possibile verificare la veridicità o meno di una proposizione tramite la logica e assiomi
precedentemente dimostrati.

Turing-Church:
Teoria degli algoritmi: Alan Turing e Alonzo Church dimostrano (~1936) che tale procedura
non esiste: esistono proposizioni “indecidibili”, non sempre è possibile decretare la veridicità o
falsità di alcune proposizioni. Dato che la domanda era se esiste una sequenza di percorsi
logici che permettono di dimostrare la veridicità nasce il concetto di algoritmo: sequenza di
operazioni “elementari” che compongono una procedura di calcolo.
Viene inventata la macchina di Turing – un computer immaginario –una macchina
universale, in grado di calcolare ogni funzione calcolabile; è una macchina astratta non
esistente.

Tra le proposizioni decidibili – o funzioni calcolabili, problemi risolubili – alcune sono più
“facili” di altre. Esistono diverse classi di complessità, corrispondenti al tempo necessario per
risolvere i problemi . Alcuni problemi non sono risolubili in pratica, perché possono essere
risolti solo in tempi immensi (miliardi di anni).

Shannon, teoria dell'informazione:


Pone le basi teoriche per la progettazione di circuiti digitali (reti logiche) costituiti da bit
(binary digit), variabili che assumono solamente i valori 0 e 1. Shannon fonda la teoria
dell'informazione; problema di ricostruire in maniera affidabile informazioni trasmesse da un
mittente e affette da rumore; questa teoria è alla base della costruzione di reti di calcolatori.

Chomsky e i linguaggi formali:


Nel '900 linguisti e matematici cercano di formulare un approccio strutturale allo studio del
linguaggio. Linguaggi formali: definiti da insiemi di produzioni grammaticali che li generano.
Chomsky identifica quattro tipi di linguaggi formali, caratterizzati da diverse grammatiche e
che servono a classificare linguaggi informatici e automi.

Algoritmi:
Abu Ja'far Mu ammad ibn Mūsā ḥ al-Khowārizmī (c. 780 – c. 850) nativo di Khowarism
(Khiva, Uzbekistan); era un matematico, astronomo, geografo persiano, in particolare il
trattato “Algoritmi de numero Indorum”. “Algorismus”: sistema numerico decimale, poi evoluto
in “Algorithmus” (combinata con ἀριθμός, numero).

Risulta fondamentale studiare gli algoritmi in quanto essi dominano diversi aspetti della
nostra vita. Un’importante tipologia sono gli algoritmi di compressione dei dati utili appunti
per comprimere diversi tipi di file di nostro utilizzo per far occupare loro meno spazio:
- Essi possono essere senza perdite (“lossless, es. zip) oppure con perdite (“lossy”, es.
mp3)
- Questi algoritmi sono alla base della possibilità di trasmettere contenuti in rete.

Ci sono poi algoritmi di indicizzazione nei motori di ricerca:


- Sono utili per trovare pagine corrispondenti a una ricerca e ordinarle per rilevanza
(PageRank di Google)

Gli algoritmi di crittografia (a “chiave pubblica”):


- Permettono di comunicare in maniera sicura sulla rete

Algoritmi di apprendimento automatico:


- permettono di riconoscere volti, parlato, scrittura a mano, …

Algoritmo: descrizione di un metodo per la soluzione di un problema


- Un problema è caratterizzato da un insieme di dati di partenza (input)
- La soluzione del problema è rappresentata da un insieme di dati ottenuti al termine
dell’algoritmo (output)

Un algoritmo definisce tutti i passi (operazioni, istruzioni) necessari per calcolare un output a
partire da un input.
Un computer può risolvere soltanto problemi computazionali per i quali sia noto un
algoritmo.

Algoritmi, programmi, linguaggi:

Programma: traduzione di un algoritmo in un linguaggio di programmazione; non è


necessario conoscere un linguaggio di programmazione per scrivere un algoritmo, possiamo
scriverlo in linguaggio umano.

Un algoritmo per essere tale è un insieme di istruzioni che devono avere le seguenti proprietà:
- Determinatezza: descrizione priva di ambiguità; ad ogni passo (istruzione), si sa quale
sarà il successivo
- Efficacia: ogni passo è eseguibile, chi realizza l'algoritmo (persona o macchina) deve
sapere svolgere ogni operazione
- Terminazione: prima o poi il calcolo finisce, si arriva alla conclusione in un numero
finito di passi.
ex. Problema: dato un insieme di fotografie di paesaggi, dire qual è il paesaggio più rilassante
- Può essere risolto dal computer?
- Solo se si dà una definizione rigorosa di “paesaggio rilassante”, usata per
confrontare in modo univoco due paesaggi
- Un computer può risolvere solo problemi che potrebbero essere risolti anche
manualmente

ex. Problema: Calcolare l’area di un triangolo


- Input: base e altezza (ad es. base=6, altezza=2)
- Output: area
- Algoritmo: “base per altezza diviso 2”
1. Moltiplicare base per altezza
2. Dividere per 2 il risultato dell’istruz. 1
- Output: il risultato dell’istruzione 2

- Proprietà di un algoritmo
- Non è ambiguo (2 istruzioni consecutive)
- È eseguibile (sappiamo fare moltiplicazioni e divisioni)
- Termina (dopo l'istruz. 2 si genera l'output)

ex. Algoritmo: somma in colonna


- Formalizziamo i passi dell'algoritmo
1. Considera la prima colonna da destra
2. Considera un riporto pari a 0
3. Somma il riporto e le cifre dei due addendi nella colonna considerata
4. Scrivi la prima cifra del risultato e riporta la seconda cifra del risultato nella
colonna successiva
5. Spostati nella colonna successiva
6. Ripeti le istruzioni da 3 a 5 finché almeno uno dei due addendi ha una cifra,
altrimenti vai all'istruzione 7
7. Scrivi l'ultima cifra di riporto nell'ultima cifra del risultato

- Algoritmo: somma in colonna


- L'istruzione 6 definisce un ciclo: ripetizione di un insieme di istruzioni fino a
quando una certa condizione rimane vera, e passaggio all'istruzione
successiva quando la condizione diventa falsa

- Proprietà di un algoritmo
- Non è ambiguo (dopo ogni istruzione sappiamo qual è la successiva da
eseguire)
- È eseguibile (sappiamo fare la somma di due cifre decimali)
- Termina perché gli addendi hanno un numero finito di cifre, quindi
sicuramente il ciclo finisce

Cicli infiniti:
“Certi cicli non finiscono”, un ciclo dove non c’è terminazione, dove non si presenta
l’operazione che permette di uscire dal ciclo stesso.
- Esempio: ti prendo a schiaffi a due a due finché non diventano dispari
- È un “ciclo infinito”
- Non c'è terminazione
- Quindi questo non è un algoritmo

ex. Scrivere con gli occhi: Jean-Dominique Bauby (J-DB) era un uomo paralizzato dal mento
in giù (1995); egli scrisse il libro “Lo scafandro e la farfalla” (1997) usando la palpebra sinistra
Procedura: l'infermiera indica una lettera su una scheda, quando è la lettera giusta J-DB batte
la palpebra due volte, altrimenti una volta
Algoritmo
1. Parti dall'inizio della scheda;
2. Indica la lettera successiva sulla scheda;
3. Ripeti l'istruzione 2 finché J-DB non batte la palpebra due volte, altrimenti vai alla
istruzione 4;
4. Scrivi la lettera indicata;
5. Ripeti le istruzioni 1-4 finché il testo non è finito;
Contiene due cicli, uno dentro l'altro: cicli “annidati”
Le lettere sulla scheda sono scritte in ordine di frequenza, ovvero: in base alla frequenza di
utilizzo nella lingua francese, il vantaggio è che si ottiene una parola provando meno lettere
rispetto all'ordine alfabetico
L'algoritmo che usa ordine di frequenza è più efficiente di quello che usa ordine alfabetico
- Efficienza: velocità di esecuzione di un algoritmo in funzione della quantità di dati da
elaborare (ad es. numero di lettere del testo)

Un problema, molti algoritmi:

Dato un problema computazionale, ci sono molti algoritmi che lo risolvono, alcuni sono più
“intelligenti” (ovvero, più efficienti) di altri.

Problema della ricerca: dati una lista di elementi (numeri, libri, persone, ecc.) e un elemento
cercato, verificare se questo è contenuto nella lista, si tratta di un problema molto frequente
nell'elaborazione di dati che deve essere risolto velocemente soprattutto quando la lista in cui
cercare è grande (milioni, miliardi, ... di elementi).
Esaminiamo due algoritmi di ricerca:
- Ricerca lineare:
- algoritmo intuitivo, ma poco “intelligente” (lento con tanti dati)

- Ricerca binaria (o dicotomica)


- algoritmo più complicato ma più efficiente (veloce con tanti dati)

Cosa sono input e output? L’input corrisponde alla lista di elementi, elemento cercato; ci sono
varie modalità di indicare invece l’output
- vero/Falso (l'elemento è presente oppure no)
- posizione dell'elemento nella lista
- ...

Ricerca lineare:

Algoritmo:
Idea: esamino tutti gli elementi finché non trovo quello cercato, oppure fino alla fine della lista
Algoritmo:
- Elemento corrente = primo elemento della lista;
- Finché (elemento non trovato) E (lista non è finita)
- Se (elemento corrente = elemento cercato) elemento trovato
- Altrimenti passa all'elemento successivo;
- Se (lista è finita) e
- Elemento non trovato (output: FALSO);
- Altrimenti
- Elemento trovato (output: VERO);

Funzionamento:
Ex. cerco autore in uno scaffale di libri
- Caso “fortunato” (caso ottimo): Asimov, trovato con 1 confronto

- Caso “sfortunato” (caso pessimo): cerco Wells, trovato con 16 confronti

- Altro caso pessimo (elemento non presente) – cerco Zola, non trovato con 16
confronti
- Altro caso pessimo (elemento non presente) – (NB: la lista non è necessariamente
ordinata!) – cerco Eco, non trovato con 16 confronti

- Caso “probabile” (caso medio) – cerco Kafka, trovato con 8 confronti

Ricerca binaria (o dicotomica):

Come cercare zuzzurellone su un vocabolario di italiano?


- Strategia 1 (ricerca lineare): apro a pagina 1 e leggo tutte le parole finché non trovo
zuzzurellone
- Strategia 2 (più veloce): apro una pagina verso la fine, poi vado avanti/indietro di
qualche pagina

La strategia 2 è intuitivamente migliore


- Ipotesi implicita: le parole nel dizionario sono ordinate (scritte in ordine alfabetico);
altrimenti la strategia 2 produrrebbe risultati casuali (a volte potrebbe funzionare, altre
no)
Ipotesi: la lista è ordinata
- Il concetto di ordinamento dipende dai dati
- Numeri: ordine dei numeri naturali/reali
- Parole: ordine alfabetico
- Libri: ordine per autore, titolo, ISBN, editore, ...
Idea:
- Esaminiamo l'elemento a metà della lista
- Se siamo fortunati è quello cercato, altrimenti…
- Se è “più grande” (ad es. è una parola che sta dopo a quella cercata secondo l'ordine
alfabetico)
- Allora l'elemento cercato (se c'è) si trova per forza nella prima metà della lista
- Se è “più piccolo”, vale il ragionamento opposto

Funzionamento:
- Caso ottimo, Kafka, trovato con 1 confronto

- Caso pessimo – Wells, trovato con 5 confronti

- Altro caso pessimo (elemento non trovato) – Cerco Eco, non trovato con 4 confronti

- Caso medio – Cerco Moore, trovato con 3 confronti


Algoritmo:
- Sottolista da esaminare = tutta la lista;
- Finché (elemento non trovato) E (sottolista non è vuota)
- Elemento in esame = elemento intermedio della sottolista;
- Se (elemento in esame = elemento cercato) elemento trovato;
- Altrimenti se (è minore dell'elemento cercato) nuova sottolista = 2a metà
della precedente;
- Altrimenti nuova sottolista = 1a metà della precedente;
- Se (sottolista è vuota) Elemento non trovato (output: FALSO);
- Altrimenti elemento trovato (output: VERO);

Il problema dell'ordinamento:

Problema: data una lista di elementi, crearne un'altra con gli stessi elementi ma ordinati.
- Altro problema molto frequente nell'elaborazione di dati, che deve essere risolto
velocemente
- Problema più difficile della ricerca
- ovvero: l'algoritmo migliore per l'ordinamento è più lento dell'algoritmo
migliore per la ricerca.

Prestazioni di un algoritmo:

Domanda: quanto tempo impiega l'algoritmo di ricerca dicotomica per cercare un valore?
Domanda mal posta; la risposta dipende da:
- Quali e quanti sono i valori nella lista
- Qual è il valore da cercare
- Il linguaggio in cui è stato realizzato l'algoritmo
- Su quale computer viene eseguito
- Il momento in cui viene eseguito

Dobbiamo allora fare alcune ipotesi per definire formalmente il tempo di esecuzione T di un
algoritmo. La stessa sequenza di istruzioni eseguita sugli stessi dati da due computer diversi
impiega tempi diversi
- Diversi processori, sistemi operativi, ecc.
- Però le operazioni base hanno tutte lo stesso tempo di esecuzione (circa) su un
particolare computer

Definizione: il tempo di esecuzione T di un algoritmo è il numero di operazioni base eseguite.


Quindi non è un tempo in secondi, è un numero, questa definizione indipendente dal
computer su cui si esegue l'algoritmo.

Secondo il modello di costo il tempo d’esecuzione di un algoritmo dipende in generale da


- numero di operazioni base eseguite, che però a loro volta dipendono da
1. dimensione dei dati da elaborare (es. dimensione della lista in cui cercare)
2. valore dei dati da elaborare (es. l'elemento cercato coincide con il primo della
lista)
- Noi vogliamo stimare una funzione T(n) che descrive il tempo di esecuzione T
unicamente in funzione della dimensione n dei dati

Come tenere conto del valore dei dati? Di solito si stima T(n) per eccesso, ovvero nel caso
pessimo del valore dei dati. A seconda del problema, la definizione di “caso pessimo” assume
significati diversi (es. per algoritmo di ricerca: caso in cui il valore cercato non è presente
nell'insieme).
Si possono anche fare stime di:
- caso ottimo
- caso medio (con ipotesi statistiche, ad es. lista di numeri e numero da cercare
generati in maniera casuale)

Dimensione problema: n elementi nella lista


- Contiamo le operazioni base; in questo caso: confronti tra elementi
- Nel caso pessimo elemento non presente
- Allora si eseguono esattamente n confronti

T(n) = O(n)

- si dice che T(n) è un “O-grande di n”


- Notazione matematica, per i nostri scopi diciamo che significa “T(n) è
all'incirca proporzionale a n”

Come per la ricerca lineare:


- Contiamo confronti nel caso pessimo di elemento non presente in lista di n elementi

Dopo ogni confronto rimane da esaminare la metà degli elementi precedenti


- Confronto 1: lista di n elementi
- Confronto 2: sottolista di n/2 elementi
- Confronto 3: sottolista di n/4 elementi …
- Dopo k confronti: sottolista di 1 elemento: finito!
- Quindi …

T(n) = k
Ma quanto vale k?

Per trovare il valore di k bisogna affidarsi al concetto di logaritmo, l’inverso dell'esponenziale.


- Divulgato da Nepero, 1614
- 𝐿 = 𝑙𝑜𝑔 𝑏 𝑎
- b è la base, a è l'argomento
- L è l'esponente da dare alla base b per ottenere l'argomento
𝐿
- 𝑎=𝑏
- Esempio:
- 𝐿 = 𝑙𝑜𝑔 2
16(2 è la base, 16 è l'argomento)
4
- 2 = 16, quindi 𝐿 = 𝑙𝑜𝑔 2
16 = 4

Acharya Virasena (792-853), monaco matematico indiano studia il concetto di ardh accheda
cioè il numero di volte in cui un numero è divisibile per due
8
- Ad es: 256 = 2 (cioè, 8 = 𝑙𝑜𝑔 2
256)
- Divisibile per due 8 volte: 128, 64, 32, 16, 8, 4, 2, 1

𝑘 𝑘
In generale un numero 𝑛 = 2 è divisibile per due esattamente 𝑛 = 2 volte
- Altri numeri (non potenze di 2):
- Si usa la divisione intera
- es: 21/2=10, 10/2=5, 5/2=2, 2/2=1

Ripetiamo il ragionamento; dopo ogni confronto rimane da esaminare la metà degli elementi
precedenti
- Confronto 1: lista di n elementi
- Confronto 2: sottolista di n/2 elementi
- Confronto 3: sottolista di n/4 elementi …
- Dopo k confronti: sottolista di 1 elemento

Quindi numero k di confronti è proprio il numero di volte in cui n è divisibile per due
Ardhaccheda

𝑇(𝑛) = 𝑂(𝑙𝑜𝑔 2
𝑛)

In generale: 𝑙𝑜𝑔 2
(𝑛) < 𝑛
- Il numero di confronti effettuati dalla ricerca binaria è sempre minore di quello della
ricerca lineare
In un certo linguaggio di programmazione (ad es. Java) un computer esegue un confronto in
−8
10 nanosecondi (10 s)

Il gioco delle torri di Hanoi:

Si tratta di un esempio di problema


“intrattabile”, hanno una soluzione ma
richiede tempi troppo lunghi.
Scopo del gioco: spostare la torre di dischi
da un piolo “origine” ad un piolo
“destinazione”
Regole del gioco: si può spostare un solo disco per volta in ogni istante un disco non può
poggiare su un disco più piccolo

Problema a n=1 disco e n=2 dischi


- soluzione banale, rispettivamente 1 e 3 mosse

Problema a n=3 dischi


1. risolvo il problema a 2 dischi; ovvero sposto i 2 dischi più piccoli con le mosse del
problema a 2 dischi (il terzo è come se non ci fosse)
2. sposto il disco più grande
3. risolvo nuovamente il problema a 2 dischi; sposto i 2 dischi più piccoli sul disco più
grande

Problema a n=4 dischi


1. risolvo il problema a 3 dischi
2. sposto il disco più grande
3. risolvo nuovamente il problema a 3 dischi

In generale, soluzione del problema a n dischi


1. Risolvo il problema a n-1 dischi
2. Sposto il disco più grande
3. Risolvo nuovamente il problema a n-1 dischi

Regola mnemonica di soluzione


- Spostare il disco più piccolo una volta ogni 2 mosse, sempre nella stessa direzione;
ovvero: dal piolo 1 al piolo 2, dal piolo 2 al piolo 3, dal piolo 3 al piolo 1, e di nuovo da
capo
- La mossa intermedia tra due spostamenti del disco più piccolo è l'unica altra mossa
possibile

Numero di mosse con n dischi


- Il doppio +1 delle mosse con n-1 dischi
- 1 disco: 1 mossa
- 2 dischi: 3 mosse
- 3 dischi: 6+1=7 mosse
- 4 dischi: 14+1=15 mosse
- …

𝑛
- In generale con n dischi il numero di mosse è 2 −1

Il numero di mosse è funzione esponenziale del numero n di dischi, non esistono algoritmi
più veloci.

Racconto di origine medievale: Duplicatio scacheri


C'era una volta un ricchissimo Principe indiano […] avrebbe donato qualunque cosa richiesta a
colui che fosse riuscito a farlo divertire nuovamente. […] si fece avanti un mercante, [...]
estrasse una tavola con disegnate alternatamente 64 caselle bianche e nere, vi appoggiò
sopra 32 figure di legno […] Il principe] chiese all'inventore di tale sublime gioco quale
ricompensa desiderasse. Il mercante, con aria dimessa, chiese un chicco di grano per la
prima casella della scacchiera, due chicchi per la seconda, quattro chicchi per la terza, e via a
raddoppiare fino all'ultima casella. Stupito da tanta modestia, il Principe diede ordine affinché
la richiesta del mercante venisse subito esaudita...
1 + 2 + 4 + 8 + 32 + 64 + 128 + 256 + 512 + 1024 + 2048 + 4096 + … + 262 + 263 = ?? … … … … ...
= 264 – 1 = = 18 446 744 073 709 551 615

Complessità di un problema:

Diversi problemi computazionali possono avere diverse complessità.

Definizione: la complessità di un problema è data dalle prestazioni del più veloce algoritmo
(noto) in grado di risolverlo.

Esempio: la complessità del problema della ricerca è 𝑂(𝑙𝑜𝑔 2


𝑛)
- perché queste sono le prestazioni dell'algoritmo di ricerca binaria
- e questo è l’algoritmo più veloce in grado di risolvere il problema della ricerca

Classi di complessità:

Definizione: un algoritmo è
- efficiente se le sue prestazioni (caso pessimo) sono al più polinomiali, ovvero
2 3 𝑘
𝑂(𝑙𝑜𝑔 2
𝑛), 𝑂(𝑛), 𝑂(𝑛 ), 𝑂(𝑛 )… 𝑂(𝑛 )...
- inefficiente se le sue prestazioni (caso pessimo) sono almeno esponenziali, ovvero
𝑛 𝑛
𝑂(2 ), 𝑂(𝑛 )...

Definizione: un problema algoritmico è


- trattabile se la sua complessità è al più
polinomiale
- intrattabile se la sua complessità è almeno
esponenziale

Ci interessa cosa succede quando n è molto grande


- perché per n piccolo tutti gli algoritmi sono
veloci

Esempio in figura
- per valori piccoli di n i grafici si intersecano
2
- per 𝑛 > 1 (e per sempre) 𝑛 >𝑛
𝑛 2
- per 𝑛 > 4 (e per sempre) 2 >𝑛

2 𝑘 𝑛
In generale, per n grande 𝑙𝑜𝑔 2
(𝑛) < 𝑛 < 𝑛 <𝑛 <2

Esercizi algoritmi:

Esercizio 1:

Data la seguente lista di elementi


1, 3, 5, 6, 7, 9, 11, 12, 15, 17, 18, 21, 22, 23, 28, 29
e dato il numero 23 da cercare
1) Elencare gli elementi della lista che vengono confrontati dall'algoritmo di ricerca
lineare
2) Elencare gli elementi della lista che vengono confrontati dall'algoritmo di ricerca
dicotomica
Soluzione:
1) Ricerca lineare: 1, 3, 5, 6, 7, 9, 11, 12, 15, 17, 18, 21, 22, 23
2) Ricerca dicotomica: 12, 21, 23

Esercizio 2:

Se l'algoritmo di ricerca dicotomica impiega 1 millisec. a effettuare una ricerca su 1 000 000
di elementi, quanto tempo impiega a effettuare una ricerca su 1 000 000 000 di elementi?

𝑇(𝑛) = 𝑙𝑜𝑔 2(𝑛)


10 3
𝑛 = 1000 000 2 ∼ 1 000 ∼ 10
20 20 6
𝑇 = 𝑙𝑜𝑔 2(1 000 000) → 𝑙𝑜𝑔 2(2 ) = 20 2 ∼ 10

𝑛 = 1000 000 000


30 30 9
𝑇 = 𝑙𝑜𝑔 2(1000 000 000) → 𝑙𝑜𝑔 2(2 ) = 30 2 ∼ 10

Il logaritmo di ricerca binaria per cercare un elemento in un insieme di 1 000 000 000 elementi
fa 30 confronti.

Il tempo è proporzionale al numero di azioni, quindi un confronto viene eseguito in


1/20 𝑚𝑠𝑒𝑐 = 50𝑚𝑖𝑐𝑟𝑜𝑠𝑒𝑐

30
1 000 000 000 è circa 2 quindi la ricerca compie circa 30 confronti

Quindi il tempo di ricerca è 50 microsec * 30 = 1.5 millise

Esercizio 3:
Input: lista di numeri;
Output: numero m;
m prende il valore del primo elemento della lista;
Finché (la lista non è finita)
- Passa all'elemento successivo;
- Se (elemento corrente > m)
- m prende il valore dell'elemento corrente;
- Altrimenti
- m mantiene il valore precedente;
Output: m

1) Calcolare il valore dell'output m quando l'input è la lista


10, 13, 8, 7, 11, 15, 3, 5
Simuliamo l'esecuzione dell'algoritmo un passo alla volta
- Inizialmente m = 10
- Secondo elemento vale 13>10, allora m=13
- Terzo elemento vale 8<13, allora m rimane 13
- …
- Alla fine m ha il valore dell'elemento più grande della lista, ovvero
𝑚 = 15

2) Calcolare prestazioni in funzione di dimensione n della lista ;


Contiamo il numero di confronti, il ciclo esamina sempre tutti gli n elementi della lista
quindi si eseguono sempre esattamente n confronti

𝑇(𝑛) = 𝑂(𝑛)

Esercizio 4:

Input: numero intero positivo n;


Output: numero m;
m prende il valore 0;
Numero intero p prende il valore 1;
Finché (p < n)
- m si incrementa di 1;
- p si moltiplica per 2;
Output: m;

1) Calcolare il valore dell'output m quando l'input è il numero


𝑛 = 32
Simuliamo l'esecuzione un passo alla volta
- p = 1 < n=32 allora m diventa 1
- p diventa 2 – p = 2 < n=32 allora m diventa 2
- p diventa 4 – p = 4 < n=32 allora m diventa 3
- p diventa 8 – p = 8 < n=32 allora m diventa 4
- p diventa 16 – p = 16 < n=32 allora m diventa 5
- p diventa 32 – p = 32 = n=32 allora il ciclo è finito
Output: m= 5

2) Calcolare il numero di ripetizioni del ciclo in funzione dell'input n


Quante volte può raddoppiare il numero 1 prima di diventare n ? Ardaccheda!
Si può raddoppiare 𝑙𝑜𝑔 2(𝑛) volte 𝑇(𝑛) = 𝑂(𝑙𝑜𝑔 2𝑛)

Rappresentazione de ’informazione:

Simboli e informazione:

Per rappresentare l'informazione si può usare un insieme di simboli qualsiasi, ad esempio,


simboli su tastierino per rappresentare 10 cifre.

L’informazione dunque è costituita da un insieme di dati espressi mediante una


rappresentazione simbolica; della stessa informazione sono possibili diverse
rappresentazioni, che usano segni e regole diverse

Rappresentazione digitale:

In informatica per rappresentare qualsiasi informazione si usano solo due simboli perché due
simboli si possono far corrispondere facilmente a stati fisici di un dispositivo elettronico (ad
es. transistor “acceso” o “spento”).
Definizione: BIT (Binary digIT): unità minima di informazione, che può assumere solo due
valori (ad es. “0” e “1”).

Suddividiamo l'informazione in due soli casi


- Presente o assente
- PandA (Presence and Absence), “assenza” non è mancanza di informazione!

Tante possibili interpretazioni, a seconda del contesto

Esempio:
DVD: Digital Versatile Disc
- Oggi sorpassato da altre tecnologie (blue ray,…)
Plastica trasparente pressata:
- Buchi (pit) e sporgenze (land)
- Pit disposti in spirale dal centro verso l'esterno

Luce laser riflessa rileva pit/land: dati PandA !

Quanti valori?

Per rappresentare l'informazione dobbiamo


1) Determinare le informazioni da rappresentare
2) Definire un insieme di simboli per rappresentarle
3) Associare ogni simbolo a un’informazione

Esempio: rappresentare voti di esame


1) L'informazione può assumere 15 diversi valori.
“Insufficiente”, “18”, “19”, … , “29”, “30”, “30 e lode”
2) Potrei scegliere 15 simboli diversi, uno per valore.
Ad es. lettere “A”, “B”, …, “P”, “Q”
3) Potrei definire questa associazione valore/simbolo

Quanti valori? Sequenze di bit:

Con un bit posso rappresentare solo 2 valori, è una risorsa limitata. Con una sequenza di n bit
posso rappresentare molti più valori. Quanti?
- Si possono creare tanti “codici” quante sono le possibili combinazioni dei bit

Esempio: sequenza di n=4 bit. Le possibili combinazioni (codici) sono 16

Esempio: rappresentare voti di esame


L'informazione può assumere 15 diversi valori.
“Insufficiente”, “18”, “19”, … , “29”, “30”, “30 e lode”

Potrei scegliere sequenze di 4 bit con cui posso generare 16 combinazioni (codici); bastano
per rappresentare 15 valori, e ne avanza uno.
Potrei definire questa associazione valore/simbolo

𝑛
Con n bit si possono creare 2 simboli

𝑛
Nulla di strano: con n cifre decimali si possono rappresentare 10 numeri, è lo stesso
principio
Sequenze di bit: byte

Una sequenza di otto bit si chiama byte


- Il byte è ad es. l’unità di misura della memoria
8
- Con un byte si possono creare 2 = 256 simboli

Si usano spesso multipli del byte:


3 6 9
- “kilobyte” (1 KB=10 byte), “megabyte” (1 MB=10 byte), “gigabyte” (1 GB=10 byte),
12 15 18
“terabyte” (1 TB=10 byte), “petabyte” (1 PB=10 byte), “exabyte” (1 EB=10 byte), …

In informatica si usano anche potenze di 2:


10 20 30
- “kibibyte (1 KiB=2 byte), “mebibyte” (1 MiB=2 byte), “gibibyte” (1 GiB=2 byte),
40
“tebibyte” (1 TiB = 2 byte), ...
10 3
- Quasi la stessa cosa, perché 2 = 1024 ~ 1000 = 10

Numeri binari:

Proverbio: nel mondo ci sono 10 tipi di persone: quelli che capiscono il codice binario e quelli
che non lo capiscono.

Quantità e numeri:

Le quantità sono nella natura, i numeri nelle nostre menti, sono un’invenzione umana,
esistono infatti civiltà “anumeriche”; ci sono molti schemi diversi di numerali.

Notazione posizionale decimale:

Solitamente rappresentiamo i numeri in notazione posizionale in base decimale

- Base decimale: usiamo dieci cifre diverse (simboli da 0 a 9)


- Notazione posizionale: cifre uguali in posizioni diverse hanno peso diverso; il peso di una
cifra è uguale alla base (10, in questo caso), elevata alla potenza pari alla posizione della
cifra (da destra a sinistra a partire da 0)
- Non è l'unica notazione possibile: i numeri romani non usano notazione posizionale

2 1 0
Esempio:434 = 4 × 10 + 3 × 10 + 4 × 10

Il numero zero fu un’invenzione importantissima, nella notazione posizionale serve a indicare


assenza di contributi nella corrispondente posizione.

Altre basi:

Civiltà sumero-babilonese usavano un sistema sessagesimale

- Base 60
- Si può contare fino a 12 con una mano
- Pollice indica le 3 falangi delle altre 4 dita

Due simboli

- Cuneo stretto (uno), cuneo largo (dieci)


- Notazione non posizionale

Rimasto in uso

- Angoli
- Coordinate geografiche
- Tempo

Civiltà Maya e Atzeca usavano un sistema vigesimale

- Base 20
- Si può contare fino a 20 con le dita
delle mani e dei piedi

Tre simboli

- Guscio (zero), punto (uno), linea


(cinque)
- Notazione non posizionale
- Inventarono lo zero
- Sistema usato per sviluppare il calendario

Ci sono tracce di sistema vigesimale in lingue europee

- Quatre-vingt-neuf…
Lingua Oksa Pmin (Nuova Guinea)

- Parole per 27 numeri


- Corrispondenti a una sequenza di parti del corpo

Notazione posizionale binaria:

I computer usano numeri rappresentati con notazione posizionale in base binaria

- Si usano solo due cifre diverse (simboli 0 e 1)


- Per il resto la notazione posizionale funziona allo stesso modo, usando però la base
due

Esempi:

1 0
(10) 2
= (1 × 2 +0×2 ) 10
= (2) 10

3 2 1 0
(1001) 2
= (1 × 2 +0×2 +0×2 +1×2 ) 10
= (9) 10

La rappresentazione binaria è più naturale per i computer perché è più facile costruire circuiti
logici che distinguono tra due livelli invece che dieci.

Conversione da base 2 a base 10:

Facile, basta applicare la definizione


Esempio: quanto vale (11 1111 0010) 2

In generale, poiché le potenze di 2 crescono più lentamente delle potenze di 10 ci vogliono


più cifre per rappresentare un numero

Conversione da base 10 a base 2:

Conversione meno immediata.


- Chiediamoci come ragioniamo in base 10
- Usiamo un algoritmo (senza accorgercene...)
- Per capire che cifre scrivere nelle varie posizioni ci chiediamo quante volte la base 10
(e le sue potenze) rientrano nel numero da rappresentare

Esempio: come si scrive il numero “millenovecentodiciassette” in base 10


In base 2 si usa lo stesso algoritmo
- Dividere il numero per 2, eliminando l’eventuale resto e continuando a dividere per 2 il
quoziente ottenuto fino a quando non si ottiene 0.
- OUTPUT: la rappresentazione binaria del numero si ottiene scrivendo la serie dei resti
delle divisioni, iniziando dall’ultimo resto ottenuto

Esempio: come si scrive (100) 10


in base 2

Somma di numeri in base 2:

Si fa la somma tra i singoli bit usando le regole della somma in colonna


- 0+0 = 0
- 0+1 = 1+0 = 1
- 1+1 = 0, con il riporto di 1
- 1+1+1(di riporto) = 1, con il riporto di 1

Somma in base 2: errori di trabocco

Un computer usa un numero predefinito n di bit per rappresentare numeri (o altro…)


- Ad es. n=32 bit o n=64 bit

Quindi c'è un limite ai numeri rappresentabili


32 64
- Ad es. 2 o2 : sono tanti, ma non infiniti
- Se il risultato di una somma è più grande del limite il computer commette un errore di
“trabocco”
Esempio: numeri rappresentati con n=4 bit
4
- Si possono rappresentare 2 = 16 numeri, da 0 a 15
- La somma avrebbe bisogno di un quinto bit per il riporto

Numeri in base 16:

A volte si usa la notazione posizionale in base 16, esadecimale (abbreviato in hex) – Notare
4
che 16 = 2
- Notazione comoda per rappresentare numeri binari con poche cifre
- Servono 16 simboli per rappresentare le cifre!
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F
- Dove le lettere A,B,C,D,E,F, rappresentano le “cifre” 10,11,12,13,14,15

Esempio:

3 2 1 0
𝐶1𝐴0 = 𝐶 × 16 + 1 × 16 + 𝐴 × 16 + 0 × 16 = 49568

Conversione tra base 2 e base 16:

Una sequenza di 4 bit corrisponde a una cifra esadecimale


Da base 2 a base 16
- Scrivere bit in gruppi di 4 e sostituire cifre hex
- (0100 1011) 2 = (4𝐵) 16

Da base 16 a base 2
- Ogni cifra hex diventa un gruppo di 4 bit
- (𝐹9) 16 = (1111 1001) 2
Digitalizzare il testo: caratteri e codici

Idea semplice: a ogni carattere testuale da rappresentare si assegna un codice numerico


- Esempio: decido che il carattere “A” ha il codice 65 (cioè (1000001) 2), “B” il 66 (cioè
(1000010) 2), ecc.
- Problema: quanti caratteri voglio codificare?
- Promemoria: con n bit si hanno 2n simboli (codici)

Ad esempio:
- Caratteri di punteggiatura . , ; : ! ? ...
- Caratteri “non stampabili” “A capo”, “spazio”, “tabulazione”, …
- Numeri, simboli matematici, caratteri non latini, ecc.

Codice ASCII:

Alfabeto anglosassone: 128 simboli


- maiuscole, minuscole (diverse da maiuscole!), cifre, punteggiatura, parentesi, ecc.
7
- Allora per la codifica sono sufficienti 7 BIT: perchè danno 2 = 128codici diversi

Codice ASCII (1963): American Standard Code for Information Interchange

Limiti:
- Non basta per rappresentare i caratteri dei linguaggi diversi dall’inglese
- Lingue latine (ad es. lettere accentate), nord europee (ä, å, æ, ð, ø, ...), ecc.

Come interpretare la tabella


Ad es. la riga

Significa
- Il carattere “%”
- Ha il codice ASCII 37 (Decimal, ovvero base 10)
- Ovvero il codice ASCII 25 (Hex, ovvero base 16)
11 0
Infatti (25) 16
= 2 × 16 + 5 × 16 = 2 × 16 + 5 = 37
- Quindi ha il codice ASCII 0100101 (in base 2)

Osservazione: i primi 32 codici rappresentano caratteri “speciali” (caratteri “non stampabili”)

Codificare in ASCII:

Esempio: codifichiamo Ciao! (5 caratteri)


- Nota: non c'è spazio tra la “o” e il “!”, se ci fosse sarebbe anch'esso un carattere da
codificare
- Nota: codifichiamo caratteri in 8 BIT (anche se ASCII è a 7 BIT) perché usiamo BYTE
L'ottavo BIT, quello più a sinistra, ha sempre il valore 0

Decodificare da ASCII:

Per decodificare un testo ASCII, occorre ripercorrere il processo contrario alla codifica.

- Separiamo in gruppi di 8 BIT (BYTE)

- Sostituiamo il corrispondente carattere ASCII


Digressione: ASCII Art

Forma peculiare di design grafico


- Immagini composte con i 95 caratteri stampabili del codice ASCII
- Nata perché le prime stampanti potevano stampare solo caratteri!

Altri codici: ASCII esteso

Proposto inizialmente da DEC e IBM, primi '80 è un codice a 8 BIT (1 BYTE)


8
- Quindi 2 = 256caratteri, il doppio di ASCII
- È diventato standard internazionale ISO-8859-1, spesso indicato con il nome Latin-1

Include tutti i caratteri di molte lingue


Come interpretare la tabella:
Ad esempio la cella

Significa
- Il carattere “Ô
- Ha il codice ASCII esteso 11000011 (base 2) ottenuto componendo i due sottocodici
di 4 BIT a inizio riga e colonna
Osservazione: i primi 128 codici sono gli stessi di ASCII, per compatibilità

Altri codici: Unicode

Codice universale, http://www.unicode.org


- Proposto da Xerox e Apple, 1987
- Inizialmente 2 byte (16 bit) per ciascun carattere
16
2 = 65536codici disponibili

Poi 21 bit per ciascun carattere, fino a (10FFFF) 16


- 1114112 codici disponibili

Espandibile a codici di lunghezza maggiore, attualmente (2020) codificati 143859 caratteri


- Praticamente tutti i caratteri degli alfabeti umani esistenti (e quelli di varie lingue
morte)
Osservazione: i primi 256 codici coincidono con Extended ASCII, per compatibilità

Esempio: sezione “Greek and Coptic” 144 caratteri, da (0370) 16


a (03FF) 16

Come interpretare la tabella


Ad esempio la cella

Significa
- Il carattere “δ”
- Ha il codice Unicode 03B4 (base 16) ottenuto componendo i due sottocodici di 3 e 1
cifre esadecimali a inizio colonna e riga
- Ovvero il codice 948 (base 10)
- Ovvero il codice 0000 0011 1011 0100 (base 2)
UTF-8:

Unicode Transformation Format 8-bit


- Codifica a “lunghezza variabile” di caratteri
- Una delle più usate codifiche di Unicode
Ad es. sul web! http://trigeminal.com/samples/provincial.html
Codici Unicode trasformati in altri codici, caratteri più frequenti codificati con meno byte
- Ad esempio: caratteri ASCII iniziali

Esempio: il carattere “€”


- Unicode: (20AC) , cioè (0010 0000 1010 1100)
16 2
- Quindi codifica UTF-8 a 3 byte:
1110 0010 1000 0010 1010 1100

Altri codici: codice MORSE

Sviluppato per il telegrafo (1837) è formato da linee e punti


- Ottimizzato: simboli più corti per caratteri più frequenti

Primo codice digitale con cinque stringhe di bit


- 1 → punto
- 111 → linea
- 0 → separatore tra punti e linee di un carattere
- 000 → separatore tra caratteri
- 0000000 → separatore tra parole

Altri codici: alfabeto NATO


Codice ridondante per trasmissione via radio; lettere intellegibili anche in presenza di rumore
Altri codici: codici a barre

Universal product code, codifica A (UPC-A)


- Sette bit per codificare cifre da 0 a 9 (ridondante!)
- Bit rappresentati con righe nere (1) e bianche (0)
- Inizio e fine: sequenza di controllo 101
- A metà: sequenza di controllo 01010

Lo scanner capisce se ha letto al contrario


- Es: legge 0001001, codice inesistente
- Allora è 8 al contrario

Esempio
- Sinistra: codice produttore
- Destra: codice prodotto

Schema generale:
Altri codici: QR code

“Quick response” code, codice bidimensionale sviluppato nel 1994 da Toyota per tracciare
parti in fabbrica
- Leggibile in diversi orientamenti
- Leggibile anche quando il 30% dell'immagine è occluso (con la correzione di errore
più robusta)

Ce ne sono di diverse tipologie in funzione di


- Tipo/quantità di dati codificati
- Tipologia di correzione dell'errore

QR code: struttura
Byte e controllo di errore: errori in bit e byte

La memoria del computer è soggetta a errori


- Un bit 0 può diventare 1 e viceversa
- In caso di errori di questo tipo, un programma un computer si può arrestare
improvvisamente
Quando si trasmette l'informazione su una rete di comunicazione aumenta la possibilità di
introdurre errori: il canale di comunicazione è “rumoroso”
Esistono tecniche di rilevamento di errori e di correzione di errori.

Controllo di parità:

Si tratta di una semplice tecnica di rilevamento di errori, ad ogni byte di dati si aggiunge un
nono bit
- Vale 0 se i bit che valgono 1 sono pari, 1 altrimenti
- Così in un gruppo di 9 bit quelli che valgono 1 devono essere sempre pari.
- Se non è così: errore

Byte: etimologia
Werner Buchholz, IBM, giugno 1956, nome “a prova di errore” per l'unità di memoria; la scelta
del nome venne da questo spunto: dopo il bit (pezzettino) c'è il bite (boccone)

Si scelse di usare la “y” al posto della “i” come tecnica di prevenzione dell'errore: la
dimenticanza della “e” avrebbe potuto trasformare un bite in un bit!

Esercizi:

Esercizio 1:

Quanti numeri interi posso rappresentare...


- Con 5 bit?
- Con 9 bit?
- Con 12 bit?

Soluzione:
5
- 2 = 32numeri interi
00000, 00001, 00010, 00011, 00100, … , 11110, 11111
9
- 2 = 512numeri interi
12
- 2 = 4096numeri interi

Esercizio 2:

Quanti bit ci vogliono per codificare…


1. i semi delle carte ♠ ♣ ♥ ♦
2. i nomi delle note della scala musicale
3. i mesi dell’anno
4. i codici di 100 prodotti di un distributore automatico

Soluzione:
2
1. Sono 4 = 2 valori, quindi 2 bit
- quattro codici: 00, 01, 10, 11
2. Sono 7 valori, quindi 3 bit
- 8 codici, uno rimane inutilizzato: 000, 001, 010, 011, …
4
3. Sono 12 valori, quindi 4 bit (perché 2 = 16)
- 4 codici inutilizzati
7
4. Sono 100 valori, quindi 7 bit (perché 2 = 128)
- 28 codici inutilizzati

Esercizio 3:

Si supponga che la temperatura di questa stanza venga comunicata tramite la luce della
stanza stessa
- Si sa che i valori di temperatura sono sicuramente compresi tra 15 e 28 gradi, estremi
inclusi
- La luce può avere solo due stati (accesa, spenta) e il suo stato viene letto una volta al
secondo
Es.: accesa, accesa, spenta, accesa, spenta, spenta, ...

Quanti secondi servono a dare un valore?

Soluzione:
- Valori possibili: 14; simboli a disposizione: 2
4
- Servono sequenze di 4 bit: 2 = 16valori
- Servono 4 secondi per comunicare un valore

Esercizio 4:

Scrivere la rappresentazione in base 10 dei seguenti numeri interi positivi


- (101)2
- (001011)2
- (1101101)2
- (01011010)2

Soluzione:
2 1 0
- 1×2 +0×2 +1×2 = (5) 10

5 4 3 2 1 0
- 0×2 +0×2 +1×2 +0×2 +1×2 +1×2 = (11) 10
6 5 3 2 0
- 1×2 +1×2 +1×2 +1×2 +1×2 = 64 + 32 + 8 + 4 + 1 = (109) 10
6 4 3 1
- 1×2 +1×2 +1×2 +1×2 = 64 + 16 + 8 + 2 = (90) 10

Esercizio 5:

Scrivere la rappresentazione in base 2 di


- (9)10
- (22)10
- (47)10
- (73)10
Esercizio 6:

Scrivere il risultato (in base 2) delle seguenti addizioni

Esercizio 7:

Scrivere la rappresentazione in base 10 dei seguenti numeri rappresentati in base 16


- (C1) 16
- (AFA) 16
- (C0FF33) 16
- (F00D4ABEE) 16

Soluzione:
1 0
- 𝐶 × 16 + 1·16 = 12·16 + 1 = (193) 10
2 1 0
- 10 × 16 + 15·16 + 10·16 = (2810) 10
5 3 2 1 0
- 12 × 16 + 15 × 16 + 15 × 16 + 3 × 16 + 3 × 16 = (12648243) 10
- … Fatelo voi …

Esercizio 7bis:

Scrivere la rappresentazione in base 2 dei seguenti numeri rappresentati in base 16


Soluzione: [1 cifra esadecimale → 4 bit]
- C vale 12, cioè 1100, 1 vale 0001 → (11000001) 2
- A vale 1010, F vale 1111 → (101011111010) 2
- (110000001111111100110011) 2
- … Fatelo voi …

Esercizio 8:

Scrivere la rappresentazione in base 16 dei seguenti numeri rappresentati in base 2


⎼ (0110) 2
⎼ (101101)2
⎼ (0101101100111100)2

Soluzione: (raggruppare bit 4 a 4)


⎼ (0110) 2 →(6) 10 →(6) 16
⎼ (0010) 2(1101) 2
→(2) 10
(13) 10
→ (2𝐷) 16
⎼ (0101 1011 0011 1100) 2
→ (5𝐵3𝐶) 16

Esercizio 9:

Scrivere la rappresentazione in base 16 dei seguenti numeri rappresentati in base 10


⎼ (14) 10
⎼ (107) 10
⎼ (293) 10

Soluzione: (algoritmo divisioni successive)


⎼ (𝐸) 16[facile, una sola cifra]
⎼ 107/16=6 resto 11; 6/16=0 resto 6 → (6𝐵) 16
⎼ 293/16=18 resto 5; 18/16=1 resto 2;
1/16=0 resto 1 → (125) 16

Esercizio 10:

Mettere in ordine i seguenti numeri, dal più piccolo al più grande


⎼ (01010101) 2
⎼ (89) 10
⎼ (101011) 2
⎼ (4𝐷) 16

Soluzione:
⎼ (101011) 2
= (43) 10
⎼ (4𝐷) 16
= (77) 10
⎼ (01010101) 2
= (85) 10
⎼ (89) 10

Esercizio 11:

Kepler-186f, sistema Kepler186, costellazione del Cigno, 500 anni-luce dalla terra, è un
esopianeta abitabile, e la lingua parlata dai suoi abitanti è composta da 352 suoni (quasi tutti
gorgoglii).
Quante cifre esadecimali deve avere un codice di tutti questi suoni?

Soluzione:
9
Servono 9 bit, perché 2 = 5120
8
Invece2 = 256, quindi 8 bit non bastano
- Quindi servono 3 cifre esadecimali

Esercizio 12:

Date le seguenti porzioni di testo (virgolette escluse) in un file:


- “Computer Science sucks!”
- “π = 3.14”

Quanti byte occupano se la codifica è UTF-8?

Soluzione:
23 byte
- sono tutti caratteri ASCII, un byte l'uno
- bisogna contare anche spazi e punteggiatura
9 byte
- tutti caratteri ASCII (quindi 1 byte l'uno), tranne π che fa parte della sezione “Greek
and Coptic” (quindi 2 byte)

Esercizio 13:
Sapendo che il codice ASCII della lettera “A” (maiuscola) è (65)10, decodificare le seguenti
parole
- 01000010 01000101 01001001
- 01000110010001010100010001000101

Soluzione:

01000010 01000101 01001001


(66) 10(69) 10(73) 10 BEI

01000110 01000101 01000100 01000101


(70) 10(69) 10(68) 10(69) 10FEDE

Esercizio 14:

Sapendo che il codice ASCII della lettera “a” (minuscola) è (97)10, decodificare il messaggio di
questa simpatica maglietta

Soluzione:

Come prima
- (121) (111)
10 10
(117) (97)
10
(114)
10
(101)
10
(100)
10
(117)
10
(109)
10
(98)
10 10

- you are dumb

Informazione multimediale:
Rappresentare l'informazione multimediale:

Multimedia, termine coniato da Bob Goldstein, luglio 1966


- Show "LightWorks at L'Oursin", Long Island
- Musica e video

Definizione: contenuto che usa varie “forme di contenuto”


- Testo, audio, immagini, animazioni, video, contenuto
interattivo

Multimedia “lineare”
- La presentazione del contenuto procede in maniera lineare,
senza controllo di navigazione da parte dell'utente
- Ad esempio: cinema

Multimedia “non-lineare”
- La presentazione del contenuto viene controllata in maniera interattiva
- Ad esempio: videogiochi, ipertesto, ...

Vogliamo capire come un computer rappresenta e memorizza


- Un colore
- Un'immagine
- Un video
- Una canzone
- Una voce
- …

Tutto è bit, i bit sono tutto, si tratta di rappresentazioni digitali

Rappresentazione digitale di immagini:

Ci sono due principali formati di rappresentazione:

Formato bitmap (“mappa di bit”) o raster:


- immagine divisa in punti di colore
- Raster: da latino rastrum, rastrello, come nel funzionamento di un monitor a tubo
catodico
Formato vettoriale: immagine codificata come un insieme di linee e figure geometriche

Nella rappresentazione raster: l’immagine viene vista come un insieme di punti di colore,
viene suddivisa per mezzo di una griglia in sotto porzioni, dette pixel; il raster va bene per
immagini complesse o irregolari (vettoriale per immagini regolari, es. grafici).

Definizione pixel (da Picture Element) unità elementare che compone un'immagine, o un
monitor
- un computer (monitor) visualizza un’immagine riproducendo i pixel che la
compongono
- Più pixel → più qualità

La risoluzione di un’immagine è il numero di pixel in cui è divisa.

Monitor/immagini:
- indicata con divisioni verticali e orizzontali
Es: immagine con risoluzione 800x600 ha 480000 pixel
- Immagine 1024x800 ha 819200 pixel

https://upload.wikimedia.org/wikipedia/commons/6/63/Vector_Video_Standards.svg
Nei monitor la qualità dipende non solo da risoluzione ma anche da dimensione (lunghezza
diagonale); l’unità di misura più utile: densità di pixel
- Pixels per inch, PPI, o dots per inch, DPI
- N. di pixel per unità di superficie
- Migliore indicatore di qualità
- Es.: monitor 15 pollici
- risoluzione 1024x768
- diagonale 15, quindi lati 12x9 pollici
- 1024/12=768/9 = 85
- quindi 85 PPI

Pixel e bit:

Per tradurre un’immagine in BIT occorre pensare a ogni pixel come a un punto di colore
- Convenzione: rappresentiamo pixel dal basso in alto e da sinistra a destra

Se associamo a ogni colore una codifica binaria, ogni pixel corrisponde a una sequenza di
BIT

Caso più semplice: immagine in bianco e nero


- Ogni pixel può avere solo due colori
- Basta quindi un BIT per ogni pixel
- 0 indica il bianco, 1 indica il nero

Esempio:

Immagine in bianco e nero


- Un triangolo
Rappresentata su una griglia di pixel
- Risoluzione 7x4
- Molto bassa!

Esempio:

Triangolo approssimato molto male


- Bassa risoluzione
- Con risoluzione più alta il risultato sarebbe migliore

I pixel neri/bianchi sono associati a valori 1 o 0


Rappresentazione:
0000000011111000111000001000

Rappresentazione dei colori:

Definizione: colori primari, insieme di colori che si possono combinare in varie proporzioni per
produrre una gamma di colori
- … Combinare in maniera additiva, sottrattiva, ...

Combinazione additiva di colori


- Sorgenti luminose di colori diversi che stimolano la
stessa area della retina sommano i propri effetti
- Tre buoni colori primari additivi:
- Rosso, Verde, Blu
- Red, Green, Blue: RGB
A piena luminosità dei tre colori:
- R+G+B = bianco
- R+G = giallo
- G+B = ciano
- R+B = magenta

Variando le luminosità si ottiene


un'ampia gamma di colori
- Palette di 125 colori e codici
esadecimali
- Tipica rappresentazione in un programma di
grafica

Monitor a cristalli liquidi


- Liquid-Crystal Display (LCD)
- La matrice attiva (Thin Film Transistor, TFT) crea
pixel che sono gruppi di 3 subpixel (3 luci RGB)
- Combinazioni diverse producono i vari colori

Esempio: puntatore mouse sul monitor, molti pixel bianchi (sfondo) prodotti da luci RGB
sommate a piena intensità; alcuni pixel neri (contorno della freccia)
prodotti da luci RGB spente

Per ognuno dei 3 colori (subpixel) si possono avere 256 livelli di luminosità
- Quindi la luminosità di un subpixel è codificata in un byte (8 bit, 28
= 256 combinazioni)
- Il numero di colori diversi è 256x256x256:
- Circa 16,7 milioni
Modificare intensità di un colore

- È il colore (206,206,206), quindi un grigio chiaro


- Aumentare la luminosità significa aggiungere la stessa quantità a ciascuno dei tre bit:

- Si ottiene un grigio ancora più chiaro

Si può aggiungere qualsiasi quantità al byte di un colore, ma il risultato deve essere minore di
255, altrimenti errori di trabocco!

RGB: esempio in scala di grigi

Aumentare luminosità di un'immagine


- Grafico dei livelli dei pixel: nessun pixel completamente nero o bianco
- Aggiungiamo 16 a tutti i pixel

Aumentare contrasto di un'immagine


- I pixel scuri devono rimanere invariati, quelli chiari si devono schiarire
progressivamente di più
- Esempio: intervallo 38-239 deve diventare 38-255
Modifichiamo in maniera differenziata pixel di luminosità diverse
- Ad es.: definiamo “luci” il 25% più chiaro dei pixel, “ombre” il 25% più scuro, “mezzitoni”
il resto

Esempio di modifica differenziata per zone:

Abbiamo creato un “effetto seppia”


Immagini: formati e compressione

Spazio occupato da un'immagine:


- Immagini in bianco e nero: 1 BIT per pixel
- Immagini in RGB: 8 BIT x 3 colori
quindi 3 BYTE per pixel

Quindi lo spazio di un'immagine è il n. di bit (o byte) per pixel moltiplicato per il n. di pixel
Es.: immagine bianco e nero risoluzione 800x600
- 1 BIT/PIXEL x (800x600)PIXEL =
= 1 BIT/PIXEL x 480000 PIXEL =
= 480.000 BIT = 60.000 BYTE
Circa 60 KByte

Stessa immagine in RGB


- 24 x 480000 = 11.520.000 BIT = 1.440.000 BYTE
Circa 1.4 MByte

Le immagini bitmap occupano molto spazio


- Formato BITMAP (.bmp), non compresso

Esistono tecniche di compressione


- Meno bit per la memorizzazione/trasmissione

Compressione senza perdita (lossless)


- La rappresentazione originale si può ricostruire perfettamente dalla rappresentazione
compressa
Ad es. formato PNG (.png, portable network graphics)

Compressione con perdita (lossy)


- Impossibilità di ricostruire in modo esatto la rappresentazione originale da quella
compressa
Ad es. formato GIF (.gif) e formato JPEG (.jpg)

Formato GIF:

GIF (Graphic Interchange Format):


- È uno dei formati più usati per Internet
- Usa al massimo 256 colori
- Meccanismo di compressione lossy

All’inizio si definisce tabella di colori RGB, in ogni riga della


tabella:
- Indice colore (numero da 0 a 255)
- Tre byte RGB del colore
Poi si identifica un colore solo tramite il suo indice nella tabella, quindi codifica colore a 1 byte

Altri due principi importanti sono:


Codifica tipo “run-length”:
- Compressione di tipo lossless
- Invece che specificare il colore per ogni pixel, indica sequenze di pixel consecutivi che
hanno lo stesso colore
Compressione “LZW” (Lempel-Ziv-Welch)
- Compressione di tipo lossless
- Estende l’idea della codifica “run-length”, comprime di più

Esempio:

File GIF: bandiera dell'Ungheria:

[15 x 9] 45:1, 45:2, 45:3

- File con risoluzione 15x9 pixel


- 45 pixel consecutivi di colore 1 (verde), poi 45 di colore 2 (bianco), poi 45 di colore 3
(rosso)

Dimensioni file
- Una coppia lunghezza-colore occupa 2 byte
- In questo caso tre coppie: 6 byte
- In realtà compressione LZW: in generale va meglio
- In realtà ci sono altri pezzi: formato, tabella colori, ecc.

Le dimensioni in formato bitmap sarebbero:


3 byte RGB x (15x9) pixel = 405 byte

Esempio:

File GIF: bandiera dell'Italia:

Come prima, ma questa volta gruppi di 5 pixel, il formato GIF preferisce strisce di colori
orizzontali anziché verticali.

Dimensioni file (stesso ragionamento)


- Sono 27 coppie lunghezza-colore, quindi 54 byte
- In realtà compressione LZW: le dimensioni sarebbero più simili all’esempio
precedente
- Dimensioni bitmap come prima: 405 byte

GIF animate:
Un singolo file .gif può contenere molte immagini
- Codificate una dopo l’altra all’interno del file

Varie immagini (frame) sovrapposte a tempi diversi: semplice videoclip


- Molto popolare nei primi browser
- Animazioni elementari senza usare veri video

GIF: etimologia e pronuncia


Discorso di Steve Wilhite (autore del formato) durante i Webby Awards 2013
- “The Oxford English Dictionary accepts both pronunciations. They are wrong. It is a
soft ‘G,’ pronounced ‘jif.’ End of story.”
Il nome doveva ricordare il burro di arachidi marca Jif

Formato JPEG:

Inventato dal Joint Photographic Experts Group di ISO (International Standard Organization)
- Formato con perdita di informazione, lossy
- Nato con lo scopo di standardizzare diversi formati per immagini con compressione
di qualità
- Codifica colore a 24 bit
- Il grado di compressione può essere regolato dall’utente
- Si possono raggiungere dei livelli di compressione alti (10:1 o più, contro il 4:1 del GIF)
Definizione: livello di compressione, rapporto tra dimensione del file non compresso e quello
compresso.

Codifica percettiva
- Sfrutta limiti della percezione visiva umana

Due idee principali: l’occhio umano


- su un’area ampia è molto sensibile a piccole variazioni di luminanza (luminosità) e
poco a piccole variazioni di crominanza (colore)
- su un'area piccola è poco sensibile a rapide variazioni di luminosità
Allora l'immagine viene “corrotta” nelle zone in cui l'occhio umano non lo nota

Formato JPEG: prima idea

Cambio dello “spazio di colori”


- Da RGB a YCbCr
- Luminance - Chrominance Blue - Chrominance Red

Componenti di colore (Cb, Cr) vengono “sottocampionate”


- L’occhio umano nota poco la perdita di dettaglio
JPEG: gradi di compressione

Per compressioni elevate si nota la “quantizzazione” dei colori

Grafica vettoriale (cenno):

Utile per immagini “regolari”


- Invece di informazioni di colore dei pixel si specifica ogni elemento geometrico
“primitivo”
- Immagini costruite a partire dalla descrizione di questi elementi mediante linguaggio
testuale o formule geometriche
- Spesso meno spazio occupato rispetto a bitmap

Esempio: grafica vettoriale a diversi livelli di risoluzione; la risoluzione in questo caso è data
dal numero di punti dell’oggetto che si vogliono rappresentare
Video (cenno):

Sequenza di immagini statiche (frame)


- Tipicamente almeno 25 fps (frames-per-second)
Codificare un filmato → codificare i fotogrammi
- Formati: AVI (Audio Video Interleave, Microsoft), MOV (QuickTime, Apple), ...
Compressione: MPEG (Moving Picture Expert Group) di ISO
- Frame compressi con JPEG
- Frame consecutivi sono molto simili → si codifica differenza tra frame successivi

Rappresentazione digitale del suono:

Cos’è il suono:

Un oggetto vibrante (corda, tamburo, ecc.) fa vibrare l'aria attorno a sé, le vibrazioni (onde di
pressione) si trasmettono all'orecchio e fanno vibrare il timpano
- Intensità: dipenda da ampiezza dell'onda sonora
- Frequenza: numero di vibrazioni al secondo

Esempio: onda sinusoidale (assomiglia molto a un fischio)


Campionamento del suono, misurazione a intervalli regolari dell'ampiezza dell'onda sonora

Definizione: campione [equivalente audio di pixel], valore dell'ampiezza dell'onda misurato in


un istante di campionamento
Definizione: frequenza di campionamento, numero di campioni
misurati in un secondo (in Hertz, Hz)

Due domande
1) Quale frequenza di campionamento?
2) Come rappresentare il valore di un campione?

Quale frequenza di campionamento?

Più è alta, meglio è (maggiore qualità, come per la risoluzione nelle immagini)

Teorema del campionamento di Nyquist


La frequenza di campionamento deve essere almeno doppia della più alta frequenza sonora
che si vuole registrare

Esempio: frequenze presenti nel parlato (vocali) arrivano al massimo a 4 KHz (ovvero 4000
Hz). Allora nelle trasmissioni telefoniche si usa una frequenza di campionamento di 8 KHz
(8000 campioni al secondo).

In generale l'uomo è in grado di percepire frequenze fino a 20 KHz


- Oltre si parla di ultrasuoni
Curve “equal-loudness”
- Siamo più sensibili alle frequenze medie, sentiamo poco le basse e le alte
Allora in generale serve freq. di campionamento di almeno 40 KHz
- Le frequenze standard usate sono leggermente più alte: 44.1 KHz (standard CD), 48
KHz

Digressione: suoni contro i vandali!


Percezione delle frequenze varia con l'età
- Presbiacusia: invecchiando si diventa progressivamente sordi alle alte frequenze

Valore di un campione:

Ogni campione ha una ampiezza che rappresenta il valore dell'ampiezza dell'onda (pressione
acustica dell’aria, segnale elettrico prodotto da un microfono...) nell’istante di
campionamento.

Rappresentazione digitale
- Campione → sequenza di bit che ne codifica l’ampiezza
Analogia con immagini
- Ogni pixel ha un colore (in bit)
- Ogni campione ha un’ampiezza (in bit)

Quanti bit per un campione?


- All’aumentare dei bit: minore quantizzazione, e maggiore dinamica
- Tipici valori: 16, 24, 32 bit

Esempio semplificato:

3 bit
- Un bit per il segno
- 3 valori positivi e 3 negativi
- Tutti i valori nella striscia blu (larga) vengono quantizzati a (10)2

4 bit (raddoppio valori)


- Tutti i valori nella striscia blu (più stretta) vengono quantizzati a (101)2
Catena audio: ADC-CoDec-DAC

Digitalizzazione
- Suono rilevato dal microfono (che trasduce onda acustica in onda elettrica)
ADC (Analog-to-Digital Converter)
- Convertitore analogico-digitale
- Segnale elettrico (analogico) viene campionato e trasformato in segnale digitale
Co (Compressor)
- Eventualmente il suono viene compresso (mp3, ecc.)

Catena audio: ADC-CoDec-DAC

Riproduzione
- Cammino inverso
Dec (De-compressor)
- Eventualmente suono viene decompresso
DAC (Digital-to-Analog Converter)
- Convertitore digitale-analogico
- Segnale campionato ri-trasformato in segnale elettrico
Alla fine segnale elettrico riprodotto da un altoparlante (diffusore, cuffie)
- Trasduzione da onda elettrica a onda acustica

Suono: formati e compressione

Bisogna sapere
- Quanti byte per campione
Es: 2,3,4 byte sono valori tipici
- Quale frequenza di campionamento
Es.: 8 KHz, oppure 44.1 KHz, oppure 48 KHz
- Quanti canali
Es.: 2 canali per una tipica canzone registrata in stereo
Quindi un file audio occupa

(n. byte per campione) x (n. canali) x (n. campioni)

E il numero di campioni è dato da

(freq. di campionamento) x (durata in secondi)

Spazio occupato da un suono:

“Qualità CD”: 2 byte per campione, 2 canali stereo, freq. di campionamento 44.1 KHz
- Quindi un file audio qualità CD occupa
4 byte x 44100 x durata in secondi

Definizione: bitrate
- Bit al secondo, ovvero numero di bit necessari per codificare/trasmettere un secondo
di audio

Qualità CD: bitrate


- 16bit x 2canali x 44100campioni = 1.41 Mbit/s
Un'ora di musica in qualità CD
- 1.41 Mbit x 60 x 60 = 5076 Mbit = 635 Mbyte
– È proprio la capacità di memoria dei vecchi CD!

Formati e compressione

Audio di qualità CD occupa molto spazio


- Formato wave (.wav), non compresso
Esistono tecniche di compressione
- Meno bit per la memorizzazione/trasmissione
Compressione senza perdita (lossless)
- Ad es. FLAC (Free Lossless Audio Codec), ALAC (Apple Lossless Audio Codec, usato
su iTunes), Monkey's Audio (ape).
Compressione con perdita (lossy)
- Ad es. formato “MPEG-1” layer 3 (.mp3)

Formato mp3:

Inventato dal MPEG di ISO (per video e audio), standardizzato nel 1991 è un formato con
perdita di informazione, lossy. Il grado di compressione può essere regolato dall’utente, che
può scegliere
- Frequenza di campionamento, ad es. 44.1 KHz
- Bitrate (in Kbit al secondo), ad es. 192 Kbit/s

Si possono raggiungere livelli di compressione alti (10:1 o più contro meno di 2:1 per FLAC)
La codifica percettiva sfrutta i limiti della percezione umana del suono; idea principale:
mascheramento
- Un suono può essere reso inudibile da un altro suono simultaneo (o quasi) a
frequenza vicina

Allora bit assegnati a diverse zone di frequenza


- Una frequenza mascherata da altre viene rappresentata con pochi bit
- “Rumore di quantizzazione”, che però non si sente (o si sente poco) grazie al
mascheramento

Come si valutò la qualità della codifica mp3?


- Test di ascolto con molti soggetti e molti brani
- Confronto tra brani non compressi e compressi con diverse tecniche / livelli di
compressione
“Tom's diner”, di Suzanne Vega
- Brano molto utilizzato nei test del gruppo MPEG
- Voce “a cappella”, quasi monofonica: i difetti introdotti dalla compressione sono più
evidenti all'ascolto

Rappresentazione dell'informazione: conclusioni

I bit sono tutto, cosa significa questa sequenza di bit?

0000 0000 1111 0001 0000 1000 0010 0001

Domanda mal posta: a seconda del contesto e della codifica può significare molte cose
diverse; ad esempio
- Il numero intero positivo (15796257) 10
- Il colore RGB (241, 8, 33) – ultimi 3 byte
- Quattro caratteri di ASCII esteso: NU ñ B S !
- Due campioni audio: L:+241; R:+281

Principio del mezzo universale indifferente.


- I bit possono rappresentare qualsiasi informazione discreta
- I bit non hanno alcun significato intrinseco
Prima parte: “Informazione discreta”
- Composta da insiemi di valori “enumerabili”, che si possono contare (a cui si può
attribuire un codice)
- Se è “continua” (es. disegno su un foglio, suono da un microfono) va prima
discretizzata (pixel, campioni)

Seconda parte: “I bit sono bit”


- Il loro significato dipende dall'interpretazione
Ad es. in rete si trasmettono bit. Chi li trasmette/riceve li interpreta come un testo,
una foto, un mp3, ecc.

Architetture:

Architettura di un computer:

Architettura: elementi hardware (fisici) di un computer, loro funzioni e connessioni; quasi tutti
i computer odierni hanno architettura simile
- Server, personal computer, laptop, tablet, smartphone, embedded computer in
automobili, elettrodomestici, ...

Il modello di von
Neumann:

Autore del primo documento che descrive una macchina elettronica nella cui memoria
vengono registrati dati e programma; l'architettura dei moderni computer è molto simile a
quella descritta nel documento.
- Sono quindi dette Macchine di von Neumann
- In realtà già prima di allora esistevano molte macchine che adottavano questa
architettura

Quattro blocchi connessi da un canale di scambio di informazioni


Schema:

i bus sono la quinta componente del modello di Von Neumann e hanno lo scopo di mettere in
comunicazione le altre parti tra loro

Unità centrale di elaborazione:

CPU (Central Processing Unit), cuore del computer, spesso definita “processore”
- Individua ed esegue le istruzioni del programma
- Effettua elaborazioni aritmetiche e logiche con la sua unità aritmetico-logica
- Reperisce dati dalla memoria e altri dispositivi periferici e ve li rispedisce dopo averli
elaborati
- È costituita da uno o più chip (miliardi di transistor interconnessi)
Dal punto di vista logico, tre parti principali
- Unità aritmetico-logica (Arithmetic-Logic Unit, ALU): operazioni aritmetiche e logiche.
- Unità di controllo: governa il funzionamento
- Registri: spazi di memoria ad accesso molto veloce per dati e istruzioni da eseguire
Unità di controllo:
- Esegue le istruzioni dei programmi
- Coordina le attività del processore
- Controlla comunicazione tra CPU e memoria
Svolge la sua attività in modo ciclico e ha un funzionamento ciclico scandito dall’orologio
di sistema (clock)
- Frequenza di clock: ad es. 1.8GHz (Gigahertz), 1.8 miliardi di cicli al secondo

La CPU esegue le istruzioni di tutti i programmi in esecuzione sul


computer
- Una istruzione alla volta, secondo una scansione governata
dall'unità di controllo e dal clock

Ciclo fetch-decode-execute (carica-decodifica-esegui)


- O fetch-execute

Accesso (fetch): istruzione presa dalla memoria e memorizzata in


un registro
Decodifica (decode): istruzione letta e compresa
Esecuzione (execute): istruzione eseguita, eventualmente utilizzando dati e restituendo
risultato
- Esempio: somma di due addendi

Il Contatore di Programma:
Program Counter (PC): “il PC del PC”
- È un registro “speciale” della CPU
Ogni istruzioni ha un indirizzo
- Indirizzo della locazione di memoria in cui è scritta
Il registro PC contiene l'indirizzo della prossima istruzione in
memoria da eseguire
- Nella fase di “fetch” viene letta in memoria l'istruzione il cui indirizzo è contenuto nel
PC
- Poi il PC si incrementa
- Incremento dipende da lunghezza istruzioni
- Es.: istruzioni a 32 bit, il PC si incrementa di 4 byte

I programmi eseguiti dalla CPU sono composti da istruzioni macchina


- Istruzioni elementari, che in sequenza possono far svolgere al computer compiti
diversi e complessi
- Es.: somma due numeri, confronta due numeri, leggi/scrivi dalla memoria, ...
Possono avere vari formati
- Esempio: istruzione a 32 bit, diverse porzioni di bit hanno diversi significati

Ogni tipo di processore è in grado di eseguire un numero limitato di istruzioni, che


costituiscono un particolare linguaggio macchina
- Famiglie di processori: Intel, Motorola, Sun, ...
Processori della stessa famiglia conoscono lo stesso linguaggio macchina mentre
processori di famiglie diverse non possono eseguire gli stessi programmi scritti in linguaggio
macchina (perché le istruzioni che “capiscono” sono diverse).

Memoria primaria e secondaria:

Ci sono due tipi di memoria: primaria e secondaria; entrambe


immagazzinano dati e istruzioni, ma con ruoli diversi. La memoria è
suddivisa in celle, ognuna delle quali ha un indirizzo (numero intero);
ogni cella contiene un numero predefinito di bit(di solito 8 bit, 1 Byte).

Di solito le istruzioni e i dati occupano più di 1 Byte


- Si usano gruppi di celle contigue (parole, word) per
rappresentare un dato o un'istruzione
- L'indirizzo di una parola è l'indirizzo del suo primo byte
- Ad esempio, parole da 4 byte: gli indirizzi delle parole si incrementano di 4 alla volta

Le operazioni che si eseguono sulla memoria sia primaria che secondaria sono operazioni di
lettura e scrittura.
È veloce (tempi di lettura/scrittura di circa 10-50 nanosecondi), ma è costosa.

Ci sono due tipi principali di memoria primaria


- Memoria di sola lettura (ROM, Read-Only Memory)
- Memoria ad accesso casuale (RAM, Random Access Memory)
Sono costituite da chip, come la CPU
- In questo caso i transistor servono da bit di memoria

Memoria RAM
Consente sia lettura che scrittura dei dati e dei programmi in essa contenuti; contiene dati in
fase di modifica e programmi che devono essere disponibili alla CPU.
È una memoria volatile
- Ovvero, perde i dati quando si spegne il computer
“Accesso casuale” significa che il tempo per accedere a una cella non dipende dalla sua
posizione (indirizzo)
- In realtà questo è vero anche per la ROM

Memoria ROM
Viene scritta una volta sola alla fabbricazione (a volte anche ROM riscrivibili)
- Contiene i programmi necessari all’avvio del computer, programmi che devono essere
sempre disponibili
Ad es. programma BIOS (Basic Input/Output System), che viene eseguito all'avvio del
computer
Conserva dati e programmi anche quando il computer viene spento
- È una memoria non volatile

Memoria secondaria (o di massa)


Molto meno costosa della memoria primaria ma molto più lenta (tempi di accesso in
lettura/scrittura). È una memoria non volatile
- Programmi e dati risiedono in memoria secondaria, vengono caricati in RAM quando
necessario alla CPU, per poi tornarvi aggiornati se e quando necessario
Tipiche memorie secondarie:
- Disco rigido (hard-drive), o disco fisso
- Memoria a stato solido (flash)
- Memorie ottiche (DVD, Bluray, ecc.)

Memoria secondaria: disco fisso


Primi hard-disk: “IBM 350 RAMAC”, 1956
- Capacità: 3.75MByte
- Dimensioni: 1.9m3
- Peso: 910 Kg
Attualmente
- Capacità: ~10 TByte
- Dimensioni: ~50cm3
- Peso: ~100g
Funzionamento:
Principali componenti
- Piatti (dischi magnetici) rotanti su perno centrale
- Testine mobili di lettura/scrittura
- normalmente due per piatto, una per lato del piatto;
- Tracce (o cilindri) concentriche su ciascun piatto
- Settori, in cui è suddivisa ciascuna traccia
Prestazioni:
Tempo di lettura/scrittura è somma di 3 tempi

Ttotale = Tposiz + Trotaz + Tdata

- Tposiz : tempo medio di posizionamento della testina sulla traccia giusta


- Trotaz : tempo rotazione del disco per raggiungere il settore giusto
- Dipende da velocità di rotazione che si misura in RPM (revolutions-per-minute,
rotazioni al minuto)
- Convenzionalmente è il tempo di mezzo giro del disco
- Tdata : tempo di effettiva lettura/scrittura dati
- Dipende da quantità di dati da trasferire e da bitrate (o data transfer rate),
velocità di trasferimento dati, che si misura in bit o Byte (o multipli di Byte) al
secondo

Valori tipici tempo di lettura/scrittura:


- Decine di millisecondi

Tempo di posizionamento (medio):


- Da 4ms (server ad alte prestazioni) a 12-15 ms (laptop)

Velocità di rotazione (RPM)


e tempo di rotazione (ms)

Data transfer rate (teorico)


- 300-600 MByte/s

Memoria secondaria: flash


Memoria “a stato solido” (solid state memory, SSD)
- In rapidissima diffusione
- Non volatile e riscrivibile
- Senza parti mobili, resiste a sollecitazioni e urti
- Leggera e piccola, indicata per la trasportabilità (fotocamere digitali, cellulari, ecc.)
- Sostituisce hard disk di laptop
Controindicazioni
- Costi alti, anche se in costante diminuzione
- Numero di scritture possibile è alto ma limitato

Altre memorie secondarie:

A tecnologia ottica
- CD-ROM, come un CD audio; capacità ~700 MByte; sola lettura
- CD-R (Recordable), può essere scritto dall’utente (una volta; più volte se CD-RW)
- DVD, (Digital Versatile Disk, capacità 4.7 Gbyte)
- Blue-Ray (capacità 50 GByte)

Tape (nastri per dati)


- Elevata capacità, economici ma lenti
- Accesso sequenziale ai dati (bisogna avvolgere o svolgere il nastro per raggiungere
un dato)

Gerarchia di memoria:

Dispositivi di Ingresso/Uscita:

Dispositivi di Input/Output (I/O)


- Permettono interazione fra uomo e computer
- Si collegano a porte (o interfacce): USB, Firewire, HDMI, VGA, Ethernet, ecc.

Input: tastiera, mouse, microfono (comandi vocali), scanner, ...


Output: Monitor, stampante, altoparlanti, ...

Connessione di rete: Input e Output


- Scambio di dati con sistemi remoti
- Diretta (alta velocità, con rete locale), o remota (velocità più bassa, es. con linea
telefonica), cablata (es. ethernet) o senza fili (wireless)
Nuovi dispositivi di input/output “multimodale”
- Touchscreen, accelerometri, sensori di luce, output tattile (buzz), input gestuale, visori
3D, ...
Scheda madre:
In pratica quasi tutti i componenti esaminati (CPU, memoria primaria con alloggiamenti di
espansione, bus, porte per periferiche) stanno su una “scheda madre” (motherboard)

Linguaggi di programmazione:

La CPU parla solo in linguaggio macchina


Ma programmatori usano linguaggi ad “alto livello”
- Cioè in grado di formulare istruzioni più complesse

Es. che abbiamo visto (linguaggio Java):

Primi programmi: scritti in linguaggio macchina


- Bisognava conoscere codici numerici di tutte l e istruzioni macchina: lungo e a rischio
errori (bug!)
Per semplificare la programmazione si assegnavano codici simbolici alle operazioni
- Es. (istruzione di somma): ADD 4000, 2000, 2080
- È già scritto con codice simbolico, non macchina
Furono quindi sviluppati programmi per tradurre da codice simbolico a binario
- Programmi assemblatori (assembler)
- I linguaggi che usano codici simbolici (mnemonici) sono detti linguaggi assembly

Bug (cimice, insetto)


Termine usato già nel '800 per indicare malfunzionamenti di dispositivi meccanici o elettrici
- Poi usato anche per descrivere errori nei programmi
Ma a volte veri bug!
- Aneddoto famoso (1947) Falena in un relè del computer Mark II
- Erroneamente citato come origine del termine

Programmi assemblatori:

Ingresso: file di codice assembly


Uscita: file di codice macchina

Problemi:
- Istruzioni assembly uguali a istruzioni macchina, ne servono molte per eseguire
operazioni semplici
- Lo stesso programma per un'altra CPU deve essere riscritto (linguaggio macchina
diverso)

Sequenze di operazioni espresse a livello più astratto, indipendente da istruzioni macchina


- Esempio: while (sberle % 2 == 0) sberle = sberle +2;
- Ci vogliono molte istruzioni macchina per esprimere questa sequenza di operazioni

Breve storia
- Anni ‘50: primi linguaggi ad alto livello
- FORTRAN, BASIC, COBOL, ...
- Anni ‘60 e ‘70: programmazione strutturata
- Pascal, C, ...
- Anni ‘80 e ‘90, programmazione orientata agli oggetti
- C++ , Java, ...

Programmi compilatori:

Ingresso: file di codice sorgente


- Codice in linguaggio ad alto livello, non dipende dalla CPU e dal suo linguaggio
macchina
Uscita: file di codice eseguibile
- Codice macchina, dipende dalla CPU
- Occorre compilare con un diverso compilatore per ogni CPU su cui si vuole eseguire il
codice

Sistemi operativi:
Storia:

Unix
- 1960, Bell Labs. Molti OS basati su questo
MS-DOS (Disk Operating System)
- Primo OS (1980) utilizzato in personal computer IBM, realizzato da Bill Gates e Paul
Allen.
MS Windows
- Inizialmente (Win 1.0-3.11, 1985-93) solo interfaccia grafica a finestre per MS-DOS,
poi vero OS (Win 95, XP, Vista, 8, 10…)
Mac OS
- Classic (1984-2001), poi MacOS X basato su Unix
Linux ...

Struttura:
Operating system (OS)
Software fondamentale di un computer
Formato da programmi per
- Gestire efficientemente computer e dispositivi
- Creare interfaccia con l’utente
Struttura “a cipolla”
- Insieme di livelli, l'utente solo le operazioni del livello più alto e ignora quelle di tutti gli
altri

OS: componenti principali


Kernel (nucleo)
- Parte più interna, funzioni di base
- Gestione della memoria centrale
- “Driver” di periferiche
- Gestione del sistema di file (“file system”) nella memoria secondaria
Shell (“conchiglia”)
- Parte più esterna, interfaccia con l'utente
- Ad esempio interfaccia “command line” o interfaccia grafica

OS multiprogrammati (multitasking)
Più programmi (“processi”) possono essere eseguiti in contemporanea dalla(dalle) CPU
- OS gestisce la(le) CPU in modo che dedichi una frazione del proprio tempo a ciascun
processo
- Alcuni processi possono avere “priorità” più alta
- Se un processo si ferma (ad es. in attesa di dato dall’utente) la CPU può
eseguire le istruzioni di altri

OS multiutente
Computer può essere utilizzato da più utenti (anche in contemporanea)
- OS gestisce la memoria assegnando uno spazio diverso a ogni utente
- OS stabilisce livelli di autorizzazioni (permessi) per stabilire quali utenti possano
accedere a file e programmi condivisi
- OS prevede utenti speciali “amministratori” che possono gestire l'intero sistema

Reti:

Internet e il funzionamento delle reti: concetti e definizioni fondamentali

Comunicazione nel tempo


- Sincrona: mittente e destinatario attivi contemporaneamente (ad es. comunicazione
telefonica)
- Asincrona, invio/ricezione in momenti diversi (ad es. email o SMS)

Quanti comunicano
- Broadcast (o multicast), una singola fonte e tutti gli ascoltatori (ad es. radio o TV), o
molti ascoltatori (ad es. una rivista specializzata)
- Point-to-point, una singola fonte e un singolo ascoltatore (ad es. telefono)

Comunicazione su internet:

Mezzo di comunicazione universale

point-to-point asincrona
- e-mail, invece della posta tradizionale
point-to-point sincrona
- VoIP, invece del telefono
multicasting
- mailing list, chat, blog, invece di riviste specializzate
broadcasting e podcasting
- le pagine web possono sostituire radio e tv

La nuvola di internet:

Struttura generale che connette tra loro tutti i computer connessi a internet

Architettura client-server:

Modello generale: computer (client) richiede servizi a un altro (server). Nel caso di internet
- Client: vuole accedere a informazione (ad es. una pagina web)
- Server: contiene informazione richiesta

Un server può gestire più client “contemporaneamente” (centinaia o migliaia). Un client fa


riferimento a molti server (ad es. cambiando sito si cambia server)
Client e server comunicano su canale di comunicazione non permanente
- Non restano collegati su linea dedicata
- Esaudita una richiesta il server passa ad altre
Come fa ad es. un sito di e-commerce a tenere traccia dell'evolversi di un acquisto?
Cookie
- Piccoli file memorizzati da server su client e restituiti a server a ogni richiesta di
pagina
- Mantengono traccia di interazioni precedenti
Parametri URL
- aggiunte dal client all’URL durante richiesta

Internet: breve storia

The Daily Bruin


- Giornale studentesco di UCLA (University of California Los Angeles), 15 Luglio 1969

ARPANet:

Progenitore di Internet, la prima rete fu fisicamente costruita nel 1969 collegando… 4 nodi
- Univ. California LA
- Univ. Stanford
- Univ. Santa Barbara
- Univ. Utah

Primo messaggio: “login”


- … e fu spedito solo “lo” a causa di un blocco di sistema

1983: Governo americano chiude erogazione di fondi per il progetto ARPANET


- Priorità cambiate, necessaria segretezza assoluta a protezione delle informazioni

Il progetto sotto il controllo delle Università, fu un utile strumento per scambiare conoscenza
- Rete rinominata Internet

Anni '90: boom di Internet


- Tentativi di sfruttamento commerciale
- Nascita di World Wide Web (WWW): la “killer application” di internet!

Internet: struttura della rete

Reti geografiche: Wide Area Network (WAN)


- Regione, Stato, Continente
- Cablaggio su terreno “pubblico”: tramite operatore
- Punti non collegati direttamente (da un solo cavo)
- Le informazioni inviate compiono vari “salti” (hop)
Reti locali: Local area network (LAN)
- Stanza (10m), edificio (100m), campus (~1Km)
- Cablaggio “privato”

Esempio: rete aziendale geografica


- Rete WAN, composta da diverse reti LAN

Definizione: Internet Service Provider (ISP): struttura commerciale o organizzazione


pubblica/governativa che offre a utenti (privati o aziende) servizi relativi a Internet
(principalmente l'accesso stesso a Internet)

Architettura gerarchica
- Computer di utenti finali connessi a ISP locali
- ISP locali a loro volta collegati a ISP regionali (a volte
di estensione nazionale)
- ISP regionali collegati a ISP internazionali

Internet Service Provider:


Dorsale di internet:

- “Backbone” (spina dorsale)


- Esempio: la dorsale italiana
- Consorzio GARR (Gestione Ampliamento
Rete Ricerca)
- Dorsale più importante in Italia (Luglio
2019)

Dorsale: cavi sottomarini

Internet: protocolli di comunicazione

Protocollo TCP/IP
Transmission Control Protocol / Internet Protocol
Indirizzo IP
- Ogni computer connesso a Internet ha un indirizzo numerico univoco
IPv4 (versione 4)
- Quattro numeri separati da punti
- n.n.n.n dove 0 ≤ n ≤ 255 (quindi 4 byte)
- Es. l'indirizzo IP del Lab. di Informatica Musicale (LIM) di Unimi (www.lim.di.unimi.it) è
159.149.133.149

Indirizzi IP: v4 e v6
IPv4
8
- Per ogni byte ci sono 2 = 256valori (da 0 a 255)
4
- In totale un indirizzo IPv4 permette di indirizzare 256 = 4294967296 indirizzi IP
disponibili
- Ciò nonostante gli indirizzi si stanno esaurendo …

IPv6: prossima versione del protocollo IP


- Indirizzi IP composti di 16 numeri da 1 byte l'uno; in totale 128 bit
128 38
- Spazio di indirizzamento molto più ampio, in totale 2 = 3. 4 × 10 indirizzi
- Es. l'indirizzo IPv6 del LIM è (in esadecimale)
0:0:0:0:0:ffff:9f95:9006

Pacchetti IP
“Inviare info su Internet è come spedire il proprio romanzo da Tahiti all'editore a New York
usando solo cartoline”
[Vint Cerf, co-inventore di TCP/IP ]

Ovvero: informazione inviata a piccoli pezzi (“pacchetti”), ciascuno dei quali segue una strada
diversa.
L'informazione da inviare è divisa in una sequenza di pacchetti di dimensione prefissata.
Ogni pacchetto IP contiene
- Una “unità” di informazione
- L’indirizzo IP del destinatario
- Un numero progressivo
Dimensione di un pacchetto IP:
- “Intestazione”: 12 byte
- Indirizzo IP mittente e destinatario: 4+4 byte
- Dati (“unità di informazione”): max 65528 byte 2

Pacchetti sono inviati tramite uno alla volta


- Ogni pacchetto può seguire un cammino diverso
- Instradato attraverso switch (“commutatori”) e router (“instradatori”)
Robustezza: gestisce interruzioni di servizio e congestioni
Nomi di dominio:
Di solito ai computer connessi in rete si assegnano dei nomi di dominio
- Nomi simbolici comprensibili a esseri umani e organizzati secondo gerarchia di livelli

IANA: Internet Assigned Numbers Authority


- Coordina elementi chiave di Internet
- Ad es. lista dei domini di 1 o livello
- Inizialmente sette
com, edu, gov, int, mil, net, org
- Oggi ca. 1500
Esempio famoso: il dominio “.tv”
- Tuvalu, isole polinesiane
Ma usato per fini commerciali

La gestione di ogni dominio di primo livello è


assegnata a un'authority locale
- Es. il dominio .it è assegnato dal 1987 al CNR, Consiglio Nazionale delle Ricerche

Le authority locali raccolgono richieste di registrazioni di nuovi domini di 2o livello


- Registrati in database “Whois”

Nomi di dominio e IP: DNS


Come fa un nome di dominio a trasformarsi in un indirizzo IP?
Quando si configura un computer per l'accesso a internet gli si
dà l'indirizzo di uno o più Domain Name Server (DNS)
- Server che traduce nomi di dominio in indirizzi IP
- Fornito di una tabella a due colonne
- In ogni riga: nome di dominio ↔ indirizzo IP
- Es.: figaro.cs.unibo.it ↔ 130.136.2.116

DNS: struttura gerarchica


Per ogni livello dei nomi di dominio esistono dei nameserver autorevoli
- Livello root: 13 server “radice” che conoscono tutti i nameserver autorevoli di 1o livello
Ad es. i nameserver autorevoli del dominio .it
- Che a loro volta conoscono tutti i nameserver autorevoli di 2o livello
Ad esempio quelli di .it conoscono il nameserver autorevole di unimi.it
- E così via di livello in livello
Tutti i server DNS conoscono i 13 server root
- Possono “chiedere” a loro, i quali propagano la richiesta verso il basso fino alla
risposta

I 13 server “radice”
In realtà esistono molti siti “specchio” (mirror) che duplicano le macchine originali

DNS: esempio

- Un client vuole collegarsi a www.wikipedia.org


- Chiede al proprio DNS: se lui conosce l'indirizzo IP lo comunica al client. Altrimenti
Chiede a un authoritative name server (ANS) radice
- Che dice di chiedere a ANS del dominio di 1o livello .org
- Che dice di chiedere a ANS del dominio di 2o livello wikipedia che conosce la
risposta
Collegamento a Internet:

Collegamento a internet
Residenziale, tramite provider
- L’utente collega il computer a un computer del provider tramite modem (ad es. ADSL)
- Computer del provider connesso a Internet, agisce da tramite (ripetitore) per il cliente
Tramite LAN
- Organizzazione (azienda, ecc.) crea LAN (detta anche “intranet”)
- LAN usa internamente un proprio protocollo (es. ethernet) e si collega a Internet con
“gateway”:
- Gateway (“porta di passaggio”): dispositivo che gestisce il traffico tra due reti
diverse (ad es. internet che usa TPC/IP e una intranet che usa ethernet)

Collegamento tramite provider


Connessioni point-to-point
- Modem (56.6 kb/s), ISDN (128 kb/s), ADSL
(fino a 20Mb/s), fibra ottica (fino a 1Gb/s)
ADSL (Asymmetric Digital Subscriber Line)
- Banda in download maggiore di upload
- Usa cavi telefonici, con prestazioni variabili
Fibra ottica
- Cavi dedicati
- Copertura ancora parziale
- “Collo di bottiglia”: tratti di collegamento non in fibra

Reti LAN: Ethernet


Tecnologia più diffusa per reti LAN
Mezzo di trasmissione (“canale”): cavo fisico
- Doppino telefonico, cavo coassiale, fibra ottica
Trasmissione dei dati a vari bitrate:
- 10 Mbit/s (Ethernet), 100 Mbit/s (Fast Ethernet), 1 Gbit/s (Gigabit Ethernet)
Diverse “topologie” (schemi di connessione)

Ethernet
Inventato nel 1973 (Robert Metcalfe)
- Ogni computer è collegato al canale e può inviare messaggi rilevati da tutti gli altri,
che pescano quelli diretti a loro
- Un computer invia un messaggio quando “sente” che nessun altro lo sta facendo
- Analogia: barzellette raccontate a turno
- Rete “broadcast” per comunicazione point-to-point

Ethernet: pacchetti e indirizzi


Anche ethernet usa pacchetti come internet
- Ma più piccoli, 1500 byte
Su ethernet un computer è identificato non da indirizzo IP, ma da indirizzo MAC
- Media Access Control address
- Codice di 48 bit (6 byte), di solito rappresentato in notazione esadecimale
- Assegnato in modo univoco ad ogni scheda di rete di rete prodotta al mondo

Reti LAN: reti senza fili


Variante di rete locale (LAN)
- Usa un protocollo particolare: 802.11
(Wi-Fi)
- Router collegato fisicamente a
internet e tramite segnali radio a
terminali locali
Altre connessioni senza fili
- UMTS (cellulari)
- Bluetooth
World Wide Web (WWW) la killer application di internet

Servizi di rete
Internet è una infrastruttura su cui si possono creare diverse applicazioni o servizi
- Domain Name System
- Posta elettronica
- Trasferimento file
- Chat
- World Wide Web
Tutti usano il modello client-server ma ciascun servizio di rete definisce:
1) Un software per il client (con interfaccia utente)
2) Un software per il server
3) Un protocollo di comunicazione

World Wide Web:


“The current incompatibilities of the platforms and tools make it impossible to access existing
information through a common interface, leading to waste of time […] A link is specified as an
ASCII string from which the browser can deduce a suitable method of contacting an
appropriate server. When a link is followed, the browser addresses the request for the node to
the server.”
[Tim Berners Lee, Robert Cailliau, “Proposal for a HyperText Project”, 1989]

Perché killer application? Ingredienti principali


- Digitalizzazione dell’informazione
- Diffusione di Internet (dagli anni ’70)
- Diffusione dei PC (dagli anni ’80)
Tre nuovi standard
- URL: Uniform Resource Locator
Sistema di indirizzi standard per fare riferimento a tutte le risorse presenti nel Web
- HTML: HyperText Markup Language
Linguaggio utilizzato per scrivere pagine web
- HTTP: HyperText Transmission Protocol
Protocollo per le richieste di risorse

URL: Uniform Resource Locator


Costituito da tre parti
- Protocollo: dice al computer come gestire il file
Se non specificato è di default http
- Nome del server: indirizzo IP del server
Specificato tramite nome di dominio
- Path (percorso) del file: dopo il nome del server
Specifica il file oggetto della richiesta e la sua posizione nella gerarchia di directory
del server; se il file non è specificato è di default index.html
- Esempio
HTML: HyperText Markup Language
Linguaggio di descrizione di una pagina web
- Struttura, margini, font, sfondi, hyperlink (collegamenti), immagini e contenuti
multimediali
- Browser riceve descrizione html (codice sorgente) di una pagina web e la “rende”
come la vediamo; browser diversi possono renderla in maniera diversa
- Esempio:

HTTP: HyperText Transmission Protocol


Protocollo di comunicazione client-server
- Client: web browser; server: applicazione su computer che ospita un sito web
- Si “appoggia” a TCP/IP
- Anche HTTPS (HTTP Secure): connessione criptata (ad es. per invio password)

Navigazione e ricerche sul www:

Browser
Client web, applicazione interfaccia tra utente e WWW, mascherando complessità di Internet
- Comunica con server web per ottenere risorse
- Interpreta ed elabora codice HTML e altri file multimediali per visualizzare contenuto
di pagine
Motori di ricerca:
Servizio che aiuta ricerca di documenti su web, ricerca basata su una richiesta (query) che
usa parole chiave (keyword).
Il risultato è una lista di risorse Web che contengono la/e parola/e chiave richiesta/e.
Funzionamento base:
- Crawling: raccolta e catalogazione preliminare di un insieme di dati presenti sul web
“Offline”, ovvero non durante una richiesta
- Risposta a query: lista di contenuti ordinati per rilevanza rispetto alla richiesta
Risposta veloce grazie al crawling preliminare offline

Google:
Nato nel 1996 come progetto di ricerca da Larry Page e Sergey Brin, studenti di dottorato a
Stanford, California
- Inventano algoritmo PageRank che ordina per rilevanza risultati di query
- Società fondata nel 1998
Nome: storpiatura di “googol”
100
- Il grande numero 10 , 1 seguìto da 100 zeri
- Grandi quantità di informazioni
- Homepage dal design minimale
- Perché non sapevano HTML!
Crawling
“To crawl”: camminare/strisciare su ragnatela; un programma crawler (o spider, o robot) visita
tutte le pagine web che riesce a trovare
- Parte da una prima “to-do” list di URL
- Segue tutti i link ad altri URL che trova nelle pagine che visita
Crea un indice
- Lista di “token” (parole o elementi di testo), e di URL associati a ciascun token
- Continuamente aggiornato

Esempio:
N.B. Se ci sono parole che fanno parte di un'ancora, nel loro indice viene aggiunto l'URL a cui
puntano, non quello della pagina in cui si trovano

Indice di google
Dimensioni: più di 1017 byte (backuppato)
- Grande anche perché in realtà le liste contengono anche altre info
- posizioni delle parole nelle pagine, meta parole, ecc.

Il web invisibile:
Invisible web, o deep web, o hidden web; parti del www che non sono indicizzate dai motori di
ricerca, per varie ragioni
- Limitate capacità dei programmi crawler
- Protezione con password
- Servizi a pagamento
- Attività illegali (dark web)
Dimensione: impossibile da conoscere, alcune stime approssimative e
non affidabili

Dark web:
Contenuti accessibili solo attraverso reti che garantiscono anonimato
Esempio: Onion Routing (OR)
- Messaggi incapsulati in strati di cifratura
- Come gli strati di una cipolla
The Onion Routing project (Tor)
- Implementazione più famosa di OR
- Rete aperta (insieme di server) per anonimato, e browser
- Attività illegali ma non solo

Ricerche sul web: query

Query:
Elaboratore delle query (interrogazioni)
- Riceve dall'utente dei token e li cerca nell'indice
- Risponde velocemente (decimi di s) perché l'indice è stato creato in precedenza con
crawling
Esempio di query:

Oppure (equivalente):

L'elaboratore delle query cerca pagine che contengono “abilitazione” e “volo” e “acrobatico”;
per questo si dice che è una AND-query.

Query avanzate:

Query:

- Trova pagine con almeno una delle parole

Query:

- Oppure (equivalente) roma -calcio


- Trova pagine con la prima parola e non la seconda
AND, OR e NOT sono operatori logici
- Definiti da “tabelle di verità” (V=vero, F=falso):

Operatori logici possono essere combinati usando parentesi, come quelli aritmetici
(mandorla OR limone OR gelsi) AND granita
- Trova pagine con “granita” e una tra le altre tre
mandorla OR limone OR gelsi AND granita
- Significato diverso: trova pagine con “mandorla”, oppure “limone”, oppure “granita” e
“gelsi”

Query: ranking dei risultati


L'elaboratore di query deve restituire risultati in ordine di pertinenza rispetto alla richiesta
Algoritmo PageRank (di Page e Brin)
- Algoritmo di ordinamento (ranking) dei risultati di query che ha reso famoso google
- Prima versione dell'algoritmo pubblicata in articolo scientifico
Una pagina sale in classifica se
- Ha un alto numero di collegamenti in ingresso (o “backlink”, altre pagine che puntano
a lei)
- I collegamenti in ingresso sono “autorevoli”

Web 2.0 e social media:

Web 1.0: pochi creatori di contenuti, utenti semplici consumatori di contenuti


Web 2.0: “Social Web”, utente diventa creatore di contenuti
- Da Web “read-only” a Web “read-write”
- Termine coniato da Darcy DiNucci, 1999
“The first glimmerings of Web 2.0 are beginning to appear […] Web will be understood not as
screenfuls of text and graphics but as a transport mechanism, the ether through which
interactivity happens.”
Poi popolarizzato da Tim O'Reilly, 2004
"Customers are building your business for you"

Web visto come piattaforma di sviluppo collettivo, con nuovi servizi che consentono di
manipolare contenuti e inserirne di nuovi
Conseguenze:
- Utenti: da lettori passivi a partecipanti attivi
- Contenuti: da risorse standardizzate generate da pochi provider a contenuti molto
eterogenei generati dagli utenti
- Comunità: la partecipazione di molti utenti favorisce il cosiddetto social networking

Servizi e attività 2.0:

Blog: spazio personale, diario online pubblico che tutti possono leggere e commentare
Wiki: dizionari collaborativi a cui chiunque può aggiungere modificare informazioni
Media sharing/tagging: scambio/annotazione di info multimediali (Flickr, YouTube, ecc.)
Cloud computing: applicazioni web (strumenti di produttività, office, ecc.) accessibili da
browser e dati memorizzati in rete
Community: supporto alla creazione di comunità virtuali (Facebook, LinkedIn, ...)

Blog:
Etimologia: weblog (Jorn Barger, 1997), storpiato in “we blog” (Peter Merholz, 1999)
- Nato come diario personale online (~1995)
- Poi canale di comunicazione (politica, news, ecc.)
- Tool software per blog (es. WordPress)
Tipologie
- Blog personali
- Blog collaborativi
- Blog “aziendali”
- Microblog
Hanno dato origine a social network come Twitter,Facebook, ...

Wiki:
Etimologia: Wikiwikiweb (primo wiki)
- Ward Cunningham (1994)
- Da wiki-wiki shuttle bus dell'aeroporto di Honolulu, usato col significato di quick
Dizionario/enciclopedia collaborativa
- Ogni utente registrato può contribuire
- Tutte le versioni rimangono memorizzate e si può tornare a versioni precedenti
Esempio più famoso: wikipedia
- Circa 10 milioni di articoli, 250 lingue
- Affidabilità grazie a “controllo sociale”
- Nessuno sfruttamento commerciale (licenza CC)

Media sharing / Tagging:


Etimologia: tag → etichetta
Condivisione di contenuti multimediali (testo, immagini,
audio, video, ecc.)
Aggiunta di informazioni descrittive (tag)
- Usate per cercare contenuti
Esempi
- Flickr
- Youtube
- Google maps (geo-tagging)

Cloud computing:
Etimologia: da sempre ARPAnet e Internet vengono
rappresentati come una nuvola
Dati, programmi e risorse non devono più necessariamente risiedere sul PC personale
- Ospitati “in the cloud”
- Condivisi tra utenti e dispositivi
Esempi
- Dropbox, Google drive e suite office, ...

Concetto di “utility”, dalle quattro utility fondamentali...


- Gas, Acqua, Elettricità, Telefono/Rete
… Alla quinta utility
- Calcolo (computing)

Cloud computing:
Vantaggi
- Zero investimenti
- Disponibilità immediata
- Prezzo flessibile
- Rischi ridotti
- Sicurezza demandata a chi gestisce il servizio cloud
Rischi
- Sicurezza informatica e privacy degli utenti
- Continuità del servizio offerto
- Forti limitazioni in caso di non accessibilità del servizio (mancanza di
connessione di rete, servizio temporaneamente o definitivamente non
operativo, ...)

Social network:
Aggregazione di comunità sulla base di svariati interessi:
- Divertimento, lavoro, hobby, incontri, ...

Facebook: tuttora social con maggior numero di utenti ma: scandalo russiagate, privacy
utenti, calo utenti attivi e giovani,...
Computational social media:
Social media studiati da varie discipline

Informatica
- Usare dati di social media per problemi informatici (“big data” per machine learning)
- Analisi automatica (profilazione di utenti, raccomandazione automatica, struttura
della rete)

Psicologia, sociologia, economia, giurisprudenza


- Usare social media per studiare comportamenti quotidiani (amicizia, comunità, …)
- Problemi di privacy

Comunicazione, marketing
- Effetti su produzione e consumo di altri media, diffusione di notizie (“citizen
journalism”)
- Pubblicità virali, branding
- Comunicazione aziendale

Esempio: analisi struttura della rete


- Basata su teoria dei grafi
- Grafo: struttura computazionale composta da nodi e archi che li uniscono
- In un social network, nodi=utenti e archi=amicizie

Il mondo è piccolo (“small world”):


Teoria dei 6 gradi di separazione: ogni coppia di individui sulla terra è separata da non più di
sei connessioni intermedie (contatti personali)
- Proposta da Frigyes Karinthy in un racconto
(1929)
- Sperimentata da Stanley Milgram (1960)
- 296 persone nel midwest USA devono recapitare messaggio a residenti
dell'area di Boston
- Devono spedire messaggio a un loro contatto personale che con buona
probabilità conosce il destinatario finale
- 64 messaggi raggiunsero i destinatari
Numero medio di intermediari = 5.2
Distanza media = 6.2

Small world e facebook:


“Tre gradi e mezzo” di separazione
- Distanza media
- 5.28 nel 2008
- 4.74 nel 2011
- 4.57 nel 2016
Il fenomeno “small world” si verifica nelle reti che hanno nodi “hub”
- Ovvero nodi con molte più connessioni della media, in un social network: utenti con
moltissime connessioni

Web 3.0:
Termine generale che ingloba vari sviluppi e tecnologie
- Da Web “read-write” a Web “read-write-understand”

Data web: archivi di dati strutturati pubblicati sul Web in


formati utilizzabili da qualsiasi applicazione
Semantic web: comprensione del significato dei contenuti da
parte di motori di ricerca e applicazioni
Machine learning: riconoscimento, classificazione automatica, personalizzazione di
contenuti
Pervasive computing: elaborazione dati integrata in oggetti/attività quotidiani (Internet of
Things, IoT)

Potrebbero piacerti anche