Docsity
Docsity

Prepara i tuoi esami
Prepara i tuoi esami

Studia grazie alle numerose risorse presenti su Docsity


Ottieni i punti per scaricare
Ottieni i punti per scaricare

Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium


Guide e consigli
Guide e consigli


Informatica StartUnito, Appunti di Elementi di Informatica

Elementi base di Informatica: Codifica Binaria, Rappresentazione del testo e immagini, UTF8, ASCII table, Componenti del Calcolatore, Algoritmica e Variazioni/Estensioni

Tipologia: Appunti

2020/2021

In vendita dal 08/12/2021

bianca-bogliolo
bianca-bogliolo 🇮🇹

4.3

(3)

6 documenti

1 / 21

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
INFORMATICA
Lezione 1 PT.1
LA CODIFICA BINARIA
Rappresentazione dell’informazione
BIT E BYTE
Il bit l'unit# minima di misura dell'informazione (dall'inglese “binary digit”), definita come la
quantit- minima di informazione che serve a distinguere due possibili eventi. Un bit una cifra
binaria, ovvero uno dei due simboli del sistema numerico binario, classicamente chiamati “zero” 0 e
“uno” 1.
Una sequenza di 8 bit viene chiamata byte, nome che deriva dalla parola inglese “bite” (“morso”,
“boccone”, “pezzo” in Italiano) coniato anche per assonanza col termine “bit”, ma rinominato per
evitare confusioni accidentali di pronuncia con questo.
Il byte divenuto l'unit# di misura fondamentale della quantit- di informazione e delle capacit- di
memoria
La possibilit- di rappresentare informazioni di varia natura attraverso numeri permette di
manipolare le informazioni rappresentate attraverso operazioni fra numeri che i calcolatori sono in
grado di compiere in modo efficiente.
Rappresentazione di numeri in bit
Comunemente, i numeri vengono scritti in notazione posizionale. In notazione posizionale, il
significato di ogni cifra dipende dalla sua posizione. Per esempio, i due numeri 73 e 37 hanno
significati diversi nonostante siano composti dalle stesse cifre (“3” e “7”). In base 10, le cifre che
compongono i numeri interi hanno significato (da destra verso sinistra) di unita`, decine, centinaia,
etc. Si veda il seguente esempio
Allo stesso modo, nella rappresentazione di numeri in base 2 (binaria), le “cifre” possibili sono
soltanto due “0” e “1” e, in modo analogo nella base 10, il loro valore uguale a potenze crescenti
della base numerazione 1 = 20, 2 = 21, 4 = 22, 8 = 23, etc (destra verso sinistra). Quindi, per
esempio, il numero binario 10011 sar- uguale al numero
Si osservi che si usa la notazione (x)p per dire che il numero x e rappresentato in base p.
In una sequenza di bit si usa chiamare il bit pi< a destra come il meno significativo (in quanto e
quello che “vale” meno, come le unit- in base 10). Analogamente, il bit pi< a sinistra si chiama bit
pi< significativo.
Oltre alla rappresentazione in base 10, che per noi pi< naturale, e quella binaria appena descritta,
esiste un'altra rappresentazione che riveste un ruolo di notevole importanza nell'informatica: la
rappresentazione esadecimale.
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15

Anteprima parziale del testo

Scarica Informatica StartUnito e più Appunti in PDF di Elementi di Informatica solo su Docsity!

INFORMATICA

Lezione 1 PT.

LA CODIFICA BINARIA

Rappresentazione dell’informazione

BIT E BYTE

Il bit è l'unitá minima di misura dell'informazione (dall'inglese “binary digit”), definita come la

quantità minima di informazione che serve a distinguere due possibili eventi. Un bit è una cifra

binaria, ovvero uno dei due simboli del sistema numerico binario, classicamente chiamati “zero” 0 e

“uno” 1.

Una sequenza di 8 bit viene chiamata byte, nome che deriva dalla parola inglese “bite” (“morso”,

“boccone”, “pezzo” in Italiano) coniato anche per assonanza col termine “bit”, ma rinominato per

evitare confusioni accidentali di pronuncia con questo.

Il byte è divenuto l'unitá di misura fondamentale della quantità di informazione e delle capacità di

memoria

La possibilità di rappresentare informazioni di varia natura attraverso numeri permette di

manipolare le informazioni rappresentate attraverso operazioni fra numeri che i calcolatori sono in

grado di compiere in modo efficiente.

Rappresentazione di numeri in bit

Comunemente, i numeri vengono scritti in notazione posizionale. In notazione posizionale, il

significato di ogni cifra dipende dalla sua posizione. Per esempio, i due numeri 73 e 37 hanno

significati diversi nonostante siano composti dalle stesse cifre (“3” e “7”). In base 10, le cifre che

compongono i numeri interi hanno significato (da destra verso sinistra) di unita`, decine, centinaia,

etc. Si veda il seguente esempio

Allo stesso modo, nella rappresentazione di numeri in base 2 (binaria), le “cifre” possibili sono

soltanto due “0” e “1” e, in modo analogo nella base 10, il loro valore è uguale a potenze crescenti

della base numerazione 1 = 2

, etc (destra verso sinistra). Quindi, per

esempio, il numero binario 10011 sarà uguale al numero

Si osservi che si usa la notazione (x) p

per dire che il numero x e rappresentato in base p.

In una sequenza di bit si usa chiamare il bit più a destra come il meno significativo (in quanto e

quello che “vale” meno, come le unità in base 10). Analogamente, il bit più a sinistra si chiama bit

più significativo.

Oltre alla rappresentazione in base 10, che è per noi più naturale, e quella binaria appena descritta,

esiste un'altra rappresentazione che riveste un ruolo di notevole importanza nell'informatica: la

rappresentazione esadecimale.

Il sistema numerico esadecimale (a volte abbreviato come hex) è un sistema numerico posizionale

in base 16. Per questo motivo, ha necessità di usare 16 simboli per rappresentare le cifre. Oltre alle

“classiche” cifre da 0 a 9 presenti nella numerazione in base 10, che hanno lo stesso valore della

base 10, la rappresentazione esadecimale utilizza le seguenti sei cifre aggiuntive:

 “a” oppure “A”, con valore 10

 “b” oppure “B”, con valore 11

 “c” oppure “C”, con valore 12

 “d” oppure “D”, con valore 13

 “e” oppure “E”, con valore 14

 “f” oppure “F”, con valore 15

La seguente tabella

elenca tutte le cifre esadecimali (seconda colonna), il loro valore in base 10 (prima colonna) e la

rappresentazione di ogni cifra in base 2 (terza colonna).

Si noti come la cifra più grande in ogni base di numerazione abbia sempre il valore della base meno

uno: in base 10 la cifra più grande è 9=10-1, in base 2 la cifra più grande è 1=2-1, mentre in base 16

la cifra più grande è (F) 16

= 16-1 che vale 15.

Di seguito si riporta un esempio di rappresentazione in esadecimale

Ricordando che le cifre di valore 11 e 14 in base 16 sono rispettivamente “B” e “E”, possiamo

concludere che

=(EB)

Conversione fra binario ed esadecimale e viceversa

La conversione di un numero rappresentato in una certa base b in un'altra base b

a

, quindi potenza a-

esima di b, è molto semplice in quanto si riesce a fare senza compiere la sequenza di divisioni viste

in precedenza. È questo il caso della conversione da base 2 a base 16=

, molto frequente in

informatica.

Nel passaggio da base 2 a base 16=

è sufficiente:

  1. raggruppare le cifre binarie in gruppi di 4 a partire dal bit

meno significativo

  1. codificare il singolo gruppo di bit con la cifra esadecimale corrispondente
  2. affiancare le cifre esadecimali ottenute secondo l'ordine dei gruppi di 4 bit che le hanno generate

Segue un esempio

Analogamente, per convertire da esadecimale (base 16) a binario (base 2), si possono affiancare le

conversioni delle singole cifre, per esempio

Si osservi che questa proprietà che permette la conversione fra basi senza fare le divisioni, si può

sfruttare soltanto per conversioni fra basi di cui una è potenza dell'altra (come 16 e 2). Non si può

fare invece nel passaggio da base 10 a base 2. Difatti:

Operazioni fra bit (e byte)

I calcolatori compiono le operazioni su bit a partire da alcune operazioni fondamentali dette

operazioni booleane. Approfondiremo le seguenti operazioni booleane:

  • NOT corrisponde alla negazione: NOT x è la negazione della variabile x
  • AND corrisponde alla congiunzione: x AND y è vera se sia x che y sono vere
  • OR corrisponde alla disgiunzione: x OR y è vera se almeno una fra x e y è vera;
  • XOR corrisponde alla OR esclusivo: x XOR y è vera se soltanto una fra x e y è vera. Lo XOR si

può anche vedere come un “indicatore di diversità”: x XOR y vale 1 se x e y hanno un valore

diverso, 0 se hanno lo stesso valore.

Un'operazione si dice:

  • unaria, se richiede soltanto una variabile (la NOT è un’operazione unaria)
  • binaria, se utilizza due variabili (le operazioni AND, OR e XOR sono binarie)

Bisogna prestare attenzione al fatto che in questo caso, l’aggettivo “binario” sottolinea il numero di

operandi dell’operazione, non la base di numerazione in cui si opera.

La combinazione di operazioni booleane, anche con l'uso di parentesi, definisce espressioni

booleane. I valori delle espressioni booleane si rappresentano in tabelle di verità.

In una tabella di verità sono elencate tutte le possibili combinazioni delle variabili coinvolte in

un’espressione su ogni riga. Inoltre, per ogni possibile valore delle variabili viene scritto il valore

dell’espressione. Nelle tabelle di verità, il valore “1” rappresenta “vero”, mentre lo “0” rappresenta

“falso”. In seguito sono riportate le tabelle di verità delle sopra menzionate operazioni elementari.

Èpossibile comporre espressioni booleane complesse. Per esempio, la seguente espressione

w = (x AND y ) XOR (x OR z) ha la seguente tabella di verità

Si osservi che:

  • il numero di combinazioni possibili, ovvero il numero di righe, è pari a 2

n

con n uguale al numero

delle variabili coinvolte nell'espressione

I file salvati sul disco hanno dei nomi. Per convenzione la loro estensione (ultimi caratteri dopo il

punto “.”) determina l'informazione rappresentata e la sua codifica. Esempio:

 txt, file di testo con codifica ASCII

 pdf, documenti con codifica PDF (Portable Document Format)

 html, pagina web

 zip, file compresso con metodo Zip

 exe, eseguibile su macchine Windows

 jpg, immagine con codifica JPG (Joint Photographic expert Group).

 gif, immagine con codifica GIF (Graphics Interchange Format).

Le convenzioni possono cambiare nel tempo e fra computer diversi. Le convenzioni possono anche

essere un rischio: Windows si affida molto all'uso di estensioni e proverà quindi a eseguire tutti i

file che hanno estensione “.exe”. Nei sistemi operativi che fanno molto affidamento alle estensioni

(per esempio, Windows), il cambio dell'estensione potrebbe determinare una difficoltà nell’apertura

del file. Con il doppio click, infatti, tali sistemi operativi selezionano l'applicazione con cui aprire il

file sulla base dell'estensione.

PT.

INTRODUZIONE ALLA RAPPRESENTAZIONE DEL TESTO

Come codificare un testo in una sequenza di byte? Per comprenderlo è necessario capire da cosa sia

fatto il testo. Il testo è una sequenza di lettere maiuscole o minuscole, spazi e segni di punteggiatura.

Èpossibile codificare il testo in un file, codificando ogni singolo carattere e affiancando poi le

codifiche dei singoli caratteri secondo l'ordine con cui compaiono nel testo.

Esistono varie codifiche di caratteri. Quella più diffusa è certamente la codifica ASCII (American

Standard Code for Information Interchange) proposta dall'organismo di standardizzazione ANSI

(American National Standard Institute).

Attraverso la codifica ASCII, ad ogni carattere viene associato un numero da 0 a 127, quindi

rappresentabile su 7 bit. Se rappresentata su un byte, ovvero 8 bit, la codifica ASCII ha sempre il bit

più significativo uguale a 0. La tabella riportata sotto elenca i caratteri codificati e i loro codici

(numeri sia in esadecimale che decimale).

Il codice ASCII fu inventato per le comunicazioni fra telescriventi. Per questo motivo, oltre ai

caratteri che possiamo trovare nei testi (con codifiche dal 32 al 126), i primi 32 caratteri (detti

speciali o non stampabili) corrispondono a comandi da dare ad una telescrivente. Si veda, per

esempio, il carattere con codice 4 che codifica il comando “End of transmission”, che non è

certamente un carattere che può apparire nei testi.

Alcuni di questi caratteri speciali, vengono però usati anche nella codifica del testo. Per esempio, il

carattere con codifica 10 “New line” viene usato per andare a capo in un testo.

La codifica dei caratteri stampabili segue l'ordine naturale. Per esempio, la codifica delle lettere

minuscole (alfabeto inglese di 26 lettere) inizia con 97 (codifica della “a”) e termina con 122

(codifica della “z”). Si osservi che i caratteri stampabili c'è anche lo spazio (con codica 32).

Per esempio, la codifica del seguente testo

Ciao

a tutti

in ASCII è data da un file che ha il seguente contenuto, scritto in esadecimale

43 69 61 6F 0A 61 20 74 75 74 74 69

Solitamente le codifiche dei file si scrivono in esadecimale perché in questo modo tutti i byte si

possono scrivere con lo stesso numero di cifre (ovvero 2).

Gli editor di testo semplici (come Blocco Note) permettono di scrivere testo non formattato e di

salvare la sua codifica ASCII su file testo (tipicamente con estensione .txt ).

Codifica ASCII dei caratteri.

UTF-

Il passaggio da un'immagine originale alla sua rappresentazione in pixel introduce un errore. Una

risoluzione alta permette quindi di cogliere particolari fini di un'immagine, al prezzo, ovviamente,

di un numero maggiore di pixel da codificare e quindi di una maggior dimensione del file che

contiene la codifica dell’immagine.

Codifica del colore

La scelta di una risoluzione permette di passare dalla rappresentazione di un'immagine, alla

rappresentazione di un singolo pixel. Il pixel è rappresentato dal suo colore. Esistono vari modi per

rappresentare il colore. Di seguito se ne illustrano alcuni.

  • La codifica più conosciuta e diffusa è quella RGB (Red Green Blue). Tale codifica deriva dal

vecchio modo di generare il colore nelle televisioni a tubo catodico. In queste televisioni, ogni pixel

della televisione veniva colorato a seconda dell'intensità con cui veniva colpito da tre fasci di

elettroni, ciascuno corrispondente a colori rosso, verde e blu. In codifica RGB, quindi, il colore

viene rappresentato dall'intensità di ciascuno dei tre colori. Tale intensità è tipicamente

rappresentata da un byte. Un colore RGB, quindi, si rappresenta con 3 byte. Il bianco è il colore

ottenuto con l'intensità massima di tutte e 3 le componenti, difatti la sua rappresentazione è FF FF

FF.

 La codifica CMYK (Cyan, Magenta, Yellow, Key black), detta anche di quattricromia, è

usata principalmente nelle stampanti a getto di inchiostro. In questo caso, un colore è

rappresentato da 4 numeri, corrispondenti alla quantità della singola componente necessaria

a riprodurre il colore.

 La codifica HSV (Hue, Saturation, Value) dall'inglese “tonalità, saturazione, valore", è

particolarmente orientato al modo in cui i colori vengono percepiti dall'essere umano,

essendo basato sulla percezione che si ha di un colore in termini di tinta, sfumatura e tono.

Palette (tavolozza)

I possibili colori ottenibili con la codifica RGB sono pari a tutte le possibili configurazioni di 3 byte

ovvero 2

3x

≃ 16 x 10

Siccome è molto difficile che in un’immagine ci possano essere pixel con tutti i 16 milioni di colori

diversi (si pensi ad una foto con un panorama in cui gran parte dell'immagine è fatta da pixel del

cielo di colore simile), è stato pensato un sistema più efficiente per codificare il colore dei pixel.

In alcuni formati (per esempio, il formato GIF (Graphics Interchange Format), viene definita una

tabella di colori, detta palette, che svolge una funzione analoga alla tabella ASCII usata per la

codifica del testo. Un pixel di un determinato colore sarà quindi codificato dall'indice di quel colore

all'interno della tabella. In un'immagine con una palette di 256 colori, ogni pixel sarà codificato da 8

bit.

Allo stesso modo, se una palette contiene soltanto due colori, come nel caso di un'immagine in

bianco e nero, ogni pixel può essere rappresentato da un bit soltanto. Questo spiega come mai le

immagini in bianco e nero abbiano una dimensione molto minore rispetto alle immagini a colori.

Lezione 1

ARCHITETTURA DEL CALCOLATORE

COMPONENTI DI UN CALCOLATORE

Processore : dispositivo hardware che permette l'esecuzione di istruzioni (in Inglese: Central

Processing Unit, CPU

Memoria cache : memoria dedicata a contenere parte del contenuto della memoria principale che

viene utilizzata più frequentemente (in Inglese: cache memory)

Memoria principale : dispositivo hardware dedicato a contenere programmi da eseguire e dati utili

alla loro esecuzione. Programmi e dati sono presenti in memoria (memorizzati) sotto forma di

sequenza di byte. La memoria principale è volatile: il suo contenuto viene perso dopo che il

calcolatore viene spento. (in Inglese: main memory)

Bus di comunicazione : canale attraverso cui avviene la comunicazione fra i vari dispositivi

presenti (in Inglese: bus)

Periferiche di input/output : dispositivi che permettono al calcolatore di comunicare con l'esterno.

(in Inglese: I/O devices)

Controllore I/O : dispositivo che permette l'utilizzo delle varie periferiche (in Inglese: I/O

controller)

IL PROCESSORE

Il processore esegue continuamente istruzioni. Non appena viene acceso inizia ad eseguire la prima

istruzione contenuta in una locazione di memoria nota e continua così fino allo spegnimento.

Registri

Per l'esecuzione delle istruzioni utilizza i registri. I registri sono piccole zone simili alla memoria,

ma interne al processore, su cui il processore può scrivere e leggere i dati più velocemente rispetto a

quanto farebbe sulla memoria. I registri vengono identificati da un nome. Il nome dei registri è

diverso da processore a processore in base a caratteristiche interne (per esempio, i registri dei

processori Intel si chiamano: EAX, EBX, etc.). Seguendo la metafora della cucina, i registri

rappresentano il piano di lavoro sul cui gli ingredienti (i dati) vengono messi appena prima di essere

elaborati: il cuoco, prima di iniziare a cucinare prende gli ingredienti di cui ha bisogno e li tiene a

verrà prelevata la prossima istruzione. All'accensione, il valore del PC è pari a zero. Inizia quindi a

prelevare la prima istruzione dall'indirizzo zero e così via come descritto in precedenza, fino al suo

spegnimento.

Modalità di codifica delle istruzioni

Ci sono modalità diverse per codificare le istruzioni. Le due famiglie di codifica principali sono:

  1. Complex Instruction Set Computer (CISC)
  2. Reduced Instruction Set Computer (RISC)

La codifica CISC è una codifica ricca: permette di avere a disposizione istruzioni complesse che

possono fare più cose. La codifica RISC, invece, è più povera in quanto mette a disposizione poche

elementari istruzioni. Per questo motivo, per eseguire uno stesso compito ci sarà bisogno di più

istruzioni RISC rispetto al numero di istruzioni CISC necessarie. Inoltre, l'esecuzione di una singola

istruzione RISC è più veloce rispetto all'esecuzione di una CISC.

Per capire meglio, si paragonino i due alfabeti cinese e latino. Il primo, parallelamente a CISC,

permette di tradurre più informazioni con un unico simbolo (ovvero l'istruzione); al contrario per

tradurre nell'alfabeto latino la stessa informazione da un carattere cinese si deve usare più di un

carattere. Per esempio, il singolo carattere cinese “成” viene trascritto con 5 caratteri latini con

“cheng”.

Inoltre, una stessa parola si esprime con un numero minore di caratteri cinesi, rispetto al numero di

caratteri latini necessari. Per esempio, la parola “computer” composta da 8 caratteri, in cinese si

scrive “电脑” quindi con 2 caratteri.

Tipicamente, i processori all'interno di Desktop Computer e Personal Computer sono Intel e usano

una codifica CISC. Diversamente, i processori degli smart-phone sono tipicamente processori

ARM, che usano una codifica RISC delle istruzioni.

Confronto fra CISC e RISC.

La scelta di codifica delle istruzioni determina l'Instructure Set Architecture (ISA), che è il modo

con cui sono codificate le istruzioni del processore. CISC e RISC sono due famiglie di ISA. La

scelta dell'ISA è influenzata da motivi commerciali (Monopolio Intel) e dalle tipologie di

applicazioni da eseguire (le applicazioni del Desktop sono diverse dalle applicazioni sullo

Smartphone).

La codifica delle istruzioni è chiamata anche linguaggio macchina. Un modo più semplice per

esprimere un programma è attraverso l'uso dei linguaggi di programmazione di alto livello. Il

compilatore svolge un lavoro di traduzione dal linguaggio ad alto livello al linguaggio macchina

costituito da byte. In linea teorica, è possibile scrivere un programma direttamente in linguaggio

macchina. In pratica, si ricorre ad un linguaggio di alto livello (C, Java, Pascal, Fortran, etc.) che

permette di descrivere le operazioni in un modo più naturale e vicino all'uomo. La creazione del

codice in linguaggio macchina è delegata al compilatore.

Velocità del processore

La velocità del processore è determinata dalla frequenza del clock. Il processore compie un

progresso ogni ciclo di clock (si veda sotto). La velocità di un processore è quindi proporzionale

alla frequenza del clock. La frequenza del clock si misura in Hertz (Hz). Per esempio, in un clock

con frequenza di 3 GHz, ci sono 3 x 10

cicli di clock ogni secondo.

Ciclo di clock

Il numero di cicli di clock necessari per eseguire un'istruzione varia a seconda di diversi fattori:

 Il tipo di istruzione. Ci sono operazioni che sono intrinsecamente più complesse da svolgere

di altre (per esempio, la moltiplicazione è più complessa di una addizione o di un'operazione

logica AND , OR , NOT , XOR ).

 La tipologia di ISA. Come detto in precedenza, una singola operazione richiede mediamente

un numero minore di cicli di clock su architettura RISC rispetto a CISC (in architettura

RISC il numero di cicli di clock per operazione varia da 1 a 4, mentre nella CISC oscilla da

2 a 20. Queste informazioni vanno interpretate come ordine di grandezza e potrebbero

cambiare con l'evoluzione della tecnologia di realizzazione dei processori).

 La disponibilità di operandi (i dati su cui l'istruzione opera). Istruzioni che operano su dati

presenti nei registri sono più veloci rispetto alle stesse che operano su operandi in memoria,

perché l'accesso alla memoria è più lento dell'accesso ai registri.

Il numero di cicli per singola istruzione varia da 2 a 20 su macchine CISC e da 1 a 4 su macchine

RISC (questi devono essere considerati ordini di grandezza).

Cache memory

Potenzialmente, il processore potrebbe eseguire istruzioni anche ogni nanosecondo, ma la memoria

ha un tempo di accesso di circa 50 nanosecondi. Quindi tutte le istruzioni che richiedono un accesso

in memoria sono evidentemente rallentate. Si dice che la memoria costituisce un collo di bottiglia.

Caratteristiche di vari tipi di memoria. I valori riportati hanno puramente un carattere

esemplificativo. La differenza tra SSD (Solid-State Drive) e HDD (Hard Disk Drive) è che la

seconda è costituita da un vero e proprio disco movimentato da un motore, mentre la seconda è

costituita unicamente da componenti elettronici.

Si osservi che anche i registri, i dischi e la capacità di

memorizzazione offerta dai data center (cloud storage) si possono considerare come forme di

memoria. La tabella elenca i vari tipi di memoria dal più vicino al processore (registri) al più

lontano (cloud). Si osservi difatti che i tempi di accesso aumentano all'aumentare della distanza dal

processore (i valori sono puramente indicativi e variano al variare della tecnologia impiegata). Non

sorprendentemente, anche le capacità tipiche aumentano. Difatti avere memorie molto grandi e

molto vicine

al processore non è tecnologicamente fattibile. Mentre avere memorie piccole (bassa capacità) e con

tempi di accesso grandi è semplicemente inutile. Allo stesso tempo, il costo di ogni singolo byte di

memoria diminuisce all'aumentare della distanza dal processore. Un’utile metafora, in questo caso,

èdall’osservazione del mercato immobiliare. Difatti, il prezzo al metro quadro degli appartamenti

non può che diminuire all'aumentare della distanza dal centro della città dove si svolgono molte

attività (assimilabile al processore).

Oltre al tempo di accesso, capacità e costo, hanno un'importanza anche

 il tempo di vita di una memoria, che indica per quanto tempo i dati possono rimanere

memorizzati,

 l'affidabilità, che indica il grado di errore che si può incontrare nel rileggere dalla memoria

un dato scritto e la capacità di mantenere l'informazione immagazzinata anche in presenza di

disturbi (per esempio, di origine elettromagnetica)

Architetture multi-processore

Il processore, le memorie e tutti i circuiti integrati (integrated circuits, ICs, in inglese) sono circuiti

elettronici realizzati su silicio. Attraverso a un processo simile alla stampa chiamato litografia, il

silicio può diventare sia conduttore che isolante. Questo permette di disegnare circuiti integrati sul

silicio. Inoltre, il silicio è disponibile in quantità abbondante e a basso prezzo.

Fino al 2004 circa, l'aumento delle prestazioni della CPU è avvenuto aumentando la densità di

integrazione: sulla stessa area di silicio si era in grado di disegnare un numero sempre maggiore di

transistor e quindi di realizzare circuiti sempre più complessi e processori sempre più potenti. Lo

sviluppo dei processori ha seguito una legge empirica detta Legge di Moore (Moore's law) che

determina una crescita esponenziale del numero di transistor in un circuito integrato. Secondo

Moore, il numero di transistor presenti in un circuito integrato raddoppia ogni 2 anni. Nel 2004, il

nuovo processore della Intel (Intel Tejas) fu cancellato dallo sviluppo perché era fisicamente

impossibile raffreddarlo. Difatti, raggiungeva una densità di calore pari al reattore di un missile.

Dal 2004 in poi si è passati da un'architettura a singolo processore a una multi-processore. Oggi

l'aumento delle prestazioni non avviene più migliorando la singola CPU, ma aggiungendo un

numero sempre crescente di processori. In questo caso si parla di architetture multi-processore o

multi-core.

Algoritmica

IL PICCOLO E IL GRANDE

Selection Sort (ordinamento per selezione)

Un metodo che si può usare con il computer è chiamato selection sort. Funziona cos`ı: trovate per

prima cosa l’oggetto più leggero e riponetelo da un lato. Successivamente, trovate il più leggero tra

gli oggetti rimasti e mettetelo vicino a quello più leggero trovato precedentemente. Ripetete questa

operazione fino a che non avete terminato gli oggetti da pesare.

Contate quanti confronti avete effettuato.

Extra per esperti: mostrate come potete calcolare matematicamente quanti passi sono necessari per

ordinare 8 oggetti? E 9 oggetti? 20?

Quicksort

Quicksort è molto più veloce di selection sort, in particolare quando si hanno insiemi di oggetti

molto grandi. Infatti, è uno dei migliori metodi di ordinamento conosciuti. Funziona così : scegliete

a caso un oggetto e posizionatelo su un piatto della bilancia. Ora confrontate ciascun oggetto

rimanente con quello precedentemente selezionato. Mettete quelli più leggeri a sinistra, l’oggetto

selezionato per primo al centro e quelli più pesanti a destra. (Si potrebbero anche avere molti più

oggetti da un lato rispetto all’altro).

Scegliete uno degli insiemi di oggetti, quello a destra o quello a sinistra e ripetete le precedenti

operazioni. Fate lo stesso per l’altro insieme. Ricordatevi di mantenere al centro l’oggetto che

selezionate per primo.

Continuate a ripetere questa procedura in tutti i gruppi fino a che ciascun gruppo conterr à un

oggetto solo. A questo punto, gli oggetti saranno in ordine dal più leggero al più pesante.

Quanti confronti sono necessari in questo procedimento?

Quicksort è più efficiente di selection sort a meno che non accada di iniziare con l’oggetto più

leggero o pesante in assoluto. Se foste così fortunati da aver scelto l’oggetto con il peso intermedio,

dovreste aver effettuato solo 14 confronti, la metà di quelli effettuati con il selection sort. In ogni

caso, quicksort non sarà peggiore di selection sort e, anzi, potrà essere molto molto più efficiente!

Cosa c’entra tutto questo?

L’informazione è molto più facile da trovare in un insieme ordinato. Gli elenchi telefonici e gli

indici dei libri usano l’ordine alfabetico. La vita sarebbe molto più complessa se non lo facessero...!

Se una lista di numeri è ordinata, i casi agli estremi sono più facili da notare perchè questi sono

all’inizio o alla fine della lista. I casi duplicati sono anch’essi facili da notare, perchè sono vicini tra

loro.

I computer passano molto del loro tempo a mettere in ordine oggetti, per questo motivo gli

informatici hanno cercato di trovare metodi veloci ed efficienti per farlo. Alcuni dei metodi più

lenti, come insertion sort, selection sort o bubble sorti, possono essere utili in situazioni speciali, ma

sono generalmente usati quelli più veloci come quicksort perchè sono molto veloci quando operano

su enormi liste. Per esempio, per ordinare 100.000 elementi, il quicksort è normalmente 2 mila volte

più veloce del selection sort. Se però vogliamo ordinare un milione di elementi diventa 20 mila

volte più veloce. I computer spesso devono elaborare milioni di elementi (moltissimi siti web hanno

milioni di clienti e ogni fotografia scattata con una fotocamera digitale ha milioni di pixel); la

differenza fra i due algoritmi può corrispondere a un secondo di elaborazione o più di cinque ore

per svolgere esattamente lo stesso compito. Non solo il ritardo nella risposta non sarebbe tollerabile,

ma questo significherebbe anche che sarebbe stata usata 20 mila volte più elettricità (che non solo

causa un maggiore impatto ambientale ma riduce anche la vita delle batterie nei dispositivi portatili.

La scelta dell’algoritmo giusto o errato ha quindi serie conseguenze.

Quicksort sfrutta un concetto chiamato ricorsione. Questo significa che si continua a dividere una

lista di oggetti in parti più piccole applicando lo stesso tipo di ordinamento alle nuove parti più

piccole. Questo approccio in particolare è denominato divide et impera. La lista è ripetutamente

suddivisa finché è sufficientemente piccola da conquistare (impera). Per quicksort, le liste sono

suddivise finché non contengono un solo elemento. è banale ordinare un solo elemento! Sebbene

sembri molto laborioso, questo metodo è incredibilmente più veloce di altri.

Soluzioni e suggerimenti

  1. il modo migliore di trovare l’oggetto più leggero è quello di considerare tutti gli oggetti uno

alla volta tenendo traccia del più leggero fino a quel momento. Quindi, confrontate due

oggetti e tenete il più leggero, ripetendo il metodo fino a che tutti gli oggetti siano stati

considerati.

  1. Confrontate i pesi su una bilancia. Ciò può essere fatto facilmente con 3 pesate e qualche

volta 2 se i bambini comprenderanno che il confronto è un operatore transitivo (cioè , se A è

più leggero di B e B è più leggero di C, allora A dev’essere più leggero di C).

LA CITTà FANGOSA

Variazioni ed estensioni.

Quello che segue `e un modo alternativo di rappresentare città e strade:

Le case sono rappresentate da cerchi, le strade fangose da linee e la lunghezza delle strade da un

numero vicino alla linea.

Gli informatici e i matematici usano spesso questo diagramma per rappresentare problemi. Lo

chiamano grafo. Questo potrebbe causare un po’ di confusione poiché ́e la parola assomiglia a

quella usata in ambito statistico per rappresentare dati numerici cioè il “ grafico ”, ma sono due cose

diverse, anche se i nomi si assomigliano. In un grafo, le lunghezze delle linee possono non essere

correlate al numero che hanno vicino.

Costruite un vostro esempio di città fangosa e risolvetelo con i vostri compagni. Potete trovare una

regola che descriva quante strade o connessioni sono necessarie per la miglior soluzione? Dipende

da quante case ci sono nella città?

Cosa c’entra tutto questo?

Supponete di dover progettare come portare ad una nuova comunità l’energia oppure il gas o

l’acqua. Una rete di fili o di tubi deve connettere tutte le case all’azienda elettrica o di fornitura

dell’acqua. Ciascuna casa deve essere collegata alla rete in un qualche punto e il percorso di

collegamento tra la casa e l’azienda non e importante più di tanto, ciò chee importante `e che la

casa sia collegata.

Il problema di progettare una rete con un percorso totale minimo è chiamato minimal spanning tree.

I minimal spanning tree non sono utili solo per il gas o l’elettricità ; ci aiutano anche a risolvere

problemi nelle reti di computer, nelle reti telefoniche, nelle condotte petrolifere, nelle rotte aeree.

Ad esempio, quando si decide quale rotta di viaggio è la migliore per una persona, occorre

considerare non solo quanto costerà al viaggiatore, ma anche quanto costerà in generale. Nessuno

vorrebbe passare ore in aereo prendendo la rotta più lunga perché è più economica. Il problema

della città fangosa potrebbe non essere di molto aiuto per queste reti, perché ́e calcola il percorso

minimo totale delle strade o dei voli aerei.

Ci sono algoritmi efficienti per risolvere i problemi minimal spanning tree. Un metodo semplice

che conduce ad una soluzione ottima `e quello di partire senza alcun collegamento, aggiungendoli a