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


Algoritmi e codifiche: dalla ricerca binaria alle tecnologie di memorizzazione, Appunti di Fondamenti di informatica

Una panoramica sui programmi veloci e i nuovi strumenti di memoria, discutendo l'evoluzione degli algoritmi indispensabili come compressione dati, indicizzazione motori di ricerca, crittografia e apprendimento automatico. Verranno inoltre presentate diverse tecnologie di codifica come Unicode, Morse, Alfabeto NATO, codici a barre e QR code. Il testo illustra anche il controllo dell'errore e il modello di Von Neumann.

Tipologia: Appunti

2020/2021

Caricato il 21/04/2021

mattia-caschetto
mattia-caschetto 🇮🇹

4

(2)

2 documenti

1 / 50

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
INFORMATICA
Intro
Pensiero computazionale = processo mentale per far risolvere problemi ad un agente, sia esso
persona o macchina, fornendogli una serie di istruzioni che deve eseguire in autonomia.
COS’E’ L’INFORMATICA?
La disciplina dell’informatica è lo studio sistematico dei processi algoritmici che descrive e trasforma
l’informazione: la loro teoria, analisi, design, efficienza, implementazione e applicazione. La
domanda fondamentale sottostante a tutta l’informatica è: “cosa può essere efficacemente
automatizzato?”
COSA NON E’ L’INFORMATICA
- Non è l’uso delle applicazioni
- Non è la scienza dei computer
1) Informatica e sviluppo tecnologico
Computer = concetto legato allo svolgimento di calcoli numerici (in uso dal sedicesimo secolo).
Si parlava di computer umano – calcoli lunghi e noiosi svolti da parsone: astronomia, tavole
matematiche...
Dal fine ‘800 il computer diventa una macchina calcolatrice e dal 1930 diventa macchina digitale
programmabile.
STORIA DELLO SVILUPPO TECNOLOGICO
Sistemi di calcolo:
-Mani
-Osso di Lebombo, di Ishango, corno di Little Salt Sparing (risalgono al 40000 a.C.), i quali
contavano misure del tempo, calendari, fasi lunari...
-“Calculi”, sassolini con forme e decorazioni diverse per indicare valori numerici (3500 a.C.)
-Abaco, tavola su cui disporre i sassolini con poi l’aggiunta di righe (300 a.C.)
Dispositivi di calcolo:
-Calcolatrici meccaniche, meccanismi con ingranaggi che poteva svolgere solo alcune
operazioni numeriche (esempi – Pascalina e orologio calcolatore, 1600 circa)
-Macchine di Babbage, primi computer meccanici concettualmente simili ai computer
moderni. Progetto più importante ---> macchina analitica, programmabile tramite schede
perforate ma che non fu mai realizzata (1800 circa).
Ada Lovelace, figlia di lord Byron e contessa di Lovelace. Conobbe Babbage e fu la prima
programmatrice della storia. Pubblicò un algoritmo eseguibile dalla macchina analitica che calcolava
i numeri di Beroulli. Intuisce l’uso del computer oltre i calcoli numerici. In suo onore ----> linguaggio
ADA.
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32

Anteprima parziale del testo

Scarica Algoritmi e codifiche: dalla ricerca binaria alle tecnologie di memorizzazione e più Appunti in PDF di Fondamenti di informatica solo su Docsity!

INFORMATICA

Intro

Pensiero computazionale = processo mentale per far risolvere problemi ad un agente, sia esso persona o macchina, fornendogli una serie di istruzioni che deve eseguire in autonomia. COS’E’ L’INFORMATICA? La disciplina dell’informatica è lo studio sistematico dei processi algoritmici che descrive e trasforma l’informazione: la loro teoria, analisi, design, efficienza, implementazione e applicazione. La domanda fondamentale sottostante a tutta l’informatica è: “cosa può essere efficacemente automatizzato?” COSA NON E’ L’INFORMATICA

  • Non è l’uso delle applicazioni
  • Non è la scienza dei computer

1) Informatica e sviluppo tecnologico

Computer = concetto legato allo svolgimento di calcoli numerici (in uso dal sedicesimo secolo). Si parlava di computer umano – calcoli lunghi e noiosi svolti da parsone: astronomia, tavole matematiche... Dal fine ‘800 il computer diventa una macchina calcolatrice e dal 1930 diventa macchina digitale programmabile. STORIA DELLO SVILUPPO TECNOLOGICO Sistemi di calcolo:

  • Mani
  • Osso di Lebombo, di Ishango, corno di Little Salt Sparing (risalgono al 40000 a.C.), i quali contavano misure del tempo, calendari, fasi lunari...
  • “Calculi” , sassolini con forme e decorazioni diverse per indicare valori numerici (3500 a.C.)
  • Abaco , tavola su cui disporre i sassolini con poi l’aggiunta di righe (300 a.C.) Dispositivi di calcolo:
  • Calcolatrici meccaniche , meccanismi con ingranaggi che poteva svolgere solo alcune operazioni numeriche (esempi – Pascalina e orologio calcolatore, 1600 circa)
  • Macchine di Babbage , primi computer meccanici concettualmente simili ai computer moderni. Progetto più importante ---> macchina analitica , programmabile tramite schede perforate ma che non fu mai realizzata (1800 circa). Ada Lovelace , figlia di lord Byron e contessa di Lovelace. Conobbe Babbage e fu la prima programmatrice della storia. Pubblicò un algoritmo eseguibile dalla macchina analitica che calcolava i numeri di Beroulli. Intuisce l’uso del computer oltre i calcoli numerici. In suo onore ----> linguaggio ADA.

- Scheda perforata , primo impiego produttivo di informazioni digitali. Schede perforate usate per censimento della popolazione negli USA (1890). Digitalizzazione dell’informazione: Dati rappresentati da numeri binari, composti da 2 cifre 0/1.

  • Dati digitali : l’informazione può essere copiata e salvata in maniera esatta, le 2 sequenze numeriche sono identiche.
  • Dati analogici : l’informazione si modifica a causa del processo di conversione e del degrado del supporto (dischi, nastri, vinile...). ENIAC = eletronic numerical integrator e computer: È il primo computer elettronico (1946), composto da più di 1700 valvole che si bruciavano ogni giorno. Era programmato per specifici problemi tramite cavi collegati su pannelli e la programmazione era puramente hardware. Quando si accendeva diminuiva l’illuminazione stradale di Philadelphia. Il progetto era finanziato dalla marina statunitense e più tardi venne utilizzato per catalogare i dati del servizio demografico statunitense. L'ENIAC è considerato il capostipite dello sviluppo informatico. Transistor = dispositivo che è in grado di assumere 2 stati, di memorizzare 2 valori. Rispetto alla valvola però è:
  • Più a basso consumo
  • Più affidabile
  • Più compatto Circuiti integrati = tecnologia che permette di far stare molti transistor in un cip ---> VLSI (very large scale integration) miliardi di transistor in unico cip.

INTERNET E WWW

  • Arpanet (1969),
  • Creazione della rete delle reti, protocollo TCP/IP (trasmission control protocol/internet protocol)
  • Navigazione ( browse ) nei contenuti. Protocollo HTTP (Hyper-text transfer protocol), sviluppano al CERN. INTERFACCE E METAFORE TECNOLOGICHE UI (user interface), queste interfacce sono basate su metafore:
  • Rapporto di somiglianza tra il termine di partenza e termine metaforico
  • Potere evocativo e comunicativo Le metafore aiutano gli utenti a utilizzare dispositivi senza leggere manuali e intuitivamente Esempio: CLI (command line interface), l’unica interazione con l’utente è la testiera e il monitor. Interfacce grafiche:
  • Xerox
  • Interfaccia desktop
  • WIMPS ---> windows, icons, menus, pointers Sistemi operativi più famosi ---> Apple e Microsoft Elemento importante delle interfacce grafiche – MUOSE (1967)

2) Gli algoritmi – (parte 1)

HILBERT E IL FORMALISMO

L'informatica nasce come branca della matematica ---> alla fine dell’800 i matematici si interrogavano sui fondamenti della matematica. Hilbert propose 23 problemi fondamentali matematici fondamentali da risolvere nel corso del XX secolo. Il più importante – il problema della decisione : esiste un procedimento per decidere se una proposizione è o meno conseguenza logica di altre? Per Hilbert in matematica si può sempre stabilire se un’affermazione è vera o falsa. THRING E CHURCH, TEORIA DEGLI ALGORITMI Turing e Church contestarono Hilbert dicendo che esistono proposizioni indicibili. Partendo da ciò nasce l’idea di ALGORITMO. -------> invenzione della macchina di Turing , una macchina in grado di calcolare ogni funzione calcolabile (è una macchina immaginaria). Tra le proposizioni decidibili alcune sono più facili di altre. Ci sono quindi diverse classi di complessità di problemi. Alcuni problemi possono essere risolti solo in tempi immensi. SHANNON E LA TEORIA DELL’INFORMAZIONE Pone le basi teoriche per la progettazione di circuiti binari che sono costituiti da bit ( binary digit ), variabili che assumo o il valore 0 o 1. Fonda la teoria dell’informazione: pone il problema di come ricostruire informazioni emesse da un emittente e affette da rumore. CHOMSKY E I LINGUAGGI FORMALI Ha inventato i linguaggi formali : definiti da insiemi di produzioni grammaticali che li generano. Identifica 4 tipi di linguaggi formali caratterizzati da diverse grammatiche. ETIMOLOGIA DEGLI ALGORITMI La parola deriva da un matematico persiano che ha scritto un trattato riferito ai sistemi numerici indiani. Algorismus = sistema numerico decimale ------> poi si trasforma in Algorithmus Algoritmi indispensabili:

  • Compressione dei dati – senza o con perdite
  • Indicizzazione nei motori di ricerca – trovare pagine corrispondenti a una ricerca
  • Crittografia – comunicazione in maniera sicura nella rete
  • Apprendimento automatico – riconoscere volti, parlato, scrittura a mano... COS’E’ UN ALGORITMO? Algoritmo = descrizione di un metodo per la soluzione di un problema.
  • Un problema è caratterizzato da un insieme di dati di partenza

3) algoritmi - (parte 2)

PER UN PROBLEMA CI SONO PIU’ ALGORITMI

Dato un problema computazionale, ci sono molti algoritmi che lo risolvono. Alcuni sono più efficienti di altri. Problema della ricerca :

  • Problema di trovare in una lista di dati un elemento cercato e verificare se questo è contenuto nella lista
  • Problema frequente nell’elaborazione di dati
  • Deve essere risolto velocemente soprattutto quando la lista in cui cercare è grande Esaminazione di 2 algoritmi di ricerca :
  1. Ricerca lineare - Algoritmo intuitivo ma poco intelligente
  2. Ricerca binaria – Algoritmo più complicato ma più efficiente Cosa sono input e output?
  • Input = lista di elementi dentro cui bisogna fare la ricerca e l’elemento cercato
  • Output = ci sono varie possibilità ---> risposta vero/falso, l’elemento è presente o no.
  1. RICERCA LINEARE Idea: esaminiamo tutti gli elementi finché non trovo quello cercato, oppure fino alla fine della lista Algoritmo: Elemento corrente = primo elemento della lista... a. Finché l’elemento non viene trovato e la lista non è finita:
  • se l’elemento corrente è uguale all’elemento cercato allora l’elemento è trovato
  • altrimenti passo all’elemento successivo b. Se la lista è finita
  • l’elemento non è trovato – output falso
  • Altrimenti elemento trovato – output vero

2) RICERCA BINARIA (DICOTOMICA)

Esempio: cercare zuzzurellone sul dizionario

  • Strategia 1 – apro dalla pagina 1 e leggo tutte le pagine non trovo la parola

Algoritmo di ricerca dicotomica Sotto-lista da esaminare = tutta la lista... a. Finché l’elemento non è stato trovato e la sottolista non è vuota, esamino l’elemento intermedio della sottolista:

  • Se l’elemento in esame è uguale all’elemento cercato allora l’elemento è trovato
  • Altrimenti se è minore dell’elemento cercato si fa una nuova sottolista (seconda metà della precedente)
  • Altrimenti nuova sottolista (prima metà della precedente) b. Se la 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 RIASSUNTO ALGORITMI E LINGUAGGI

Abbiamo scritto algoritmi in ---> pseudocodice = descrizione informale di un algoritmo che usa le convenzioni di un linguaggio di programmazione ma è pensata per essere letta da un umano e non da una macchina. Ci sono diverse tipologie di istruzioni:

  1. Istruzioni semplici (operazioni base)
  2. Cicli : finché la condizione è vera esegui istruzioni
  3. Decisioni : se la condizione è vera esegui istruzioni altrimenti esegui altre istruzioni

4) algoritmi - (parte 3)

PRESAZIONI DI UN ALGORITMO

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 Dobbiamo fare ipotesi per definire il tempo di esecuzione T di un algoritmo Stessa sequenza di istruzioni eseguita su stessi dati da 2 computer diversi impiega tempi diversi
  • Diversi processori, sistemi operativi ecc.
  • Però le operazioni base hanno tutte lo stesso tempo di esecuzione su un particolare computer il tempo di esecuzione T di un algoritmo = il numero di operazioni base eseguite. Quindi non è un tempo in secondi, è un numero; ed è indipendente dal computer su cui si esegue l’algoritmo. Modello di costo - il tempo di esecuzione di un algoritmo dipende da:
  • Il numero di operazioni base eseguite che a loro volta dipendono da:
  1. Dimensione dei dati da elaborare
  2. Valore dei dati da elaborare 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? 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. Si possono fare anche stime di: a. Caso ottimo b. Caso medio (con ipotesi statistiche)

In un certo linguaggio di programmazione esegue un confronto in 10 nanosecondi (10 alla –8 s). IL GIOCO DELLE TORRI DI HANOI Soluzione:

  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. La mossa intermedia tra 2 spostamenti del disco è l’unica altra mossa possibile. Quante mosse? Numero di mosse con n dischi: il doppio +1 delle mosse con n-1 dischi -----> 2 alle n – 1 Non esistono algoritmi più veloci

COMPLESSITA’ DI UN PROBLEMA

Diversi problemi computazionali possono avere diverse complessità. Complessità di un problema = prestazioni del più veloce algoritmo in grado di risolverlo. Un algoritmo è:

  1. Efficiente se le sue prestazioni sono al più polinominali
  2. Inefficiente se le sue prestazioni sono almeno esponenziali Un problema algoritmico è:
  • Trattabile se la sua complessità è al più polinominale
  • Intrattabile se la sua complessità è almeno esponenziale

Le quantità sono nella natura, i numeri sono un costrutto umano (invenzione umana). Ci sono molti schemi diversi di numerali. NOTAZIONE POSIZIONALE DECIMALE Rappresentiamo i numeri in notazione posizionale in base decimale:

  • Base decimale (usiamo 10 cifre diverse)
  • Notazione posizione, cifre uguali in posizioni diverse hanno peso diverso, il peso di una cifra è uguale alla base, elevata alla potenza pari alla posizione della cifra.
  • Non è l’unica notazione possibile, i numeri romani usano notazione posizionale Il numero zero serve a indicare l’assenza di contributi nella corrispondente posizione. ALTRE BASI...
  • Civiltà sumero-babilonese
  • Sistema sessagesimale – base 60, si può contare fino a 12 con una mano
  • 2 simboli – cuneo stretto, cuneo largo
  • Altri rimasti in uso: angoli, coordinate geografiche, tempo...
  • Civiltà maya e Atzeca
  • Sistema vigesimale – base 20 perché si usano anche le dita dei piedi per contare
  • 3 simboli: guscio, punto, linea
  • Lingua oksapmin (nuova Guinea) - parole per 27 numeri NOTAZIONE POSIZIONALE BINARIA I computer usano numeri rappresentati con notazione posizionale in base binaria
  • Si usano solo 2 cifre diverse
  • Per il resto la notazione posizionale funziona allo stesso modo, usando però la base 2 La rappresentazione binaria è più naturale per i computer perché è più facile costruire circuiti logici che distinguono tra 2 livelli invece che 10. CONVERSIONE DA BASE 2 A BASE 10 In generale, poiché le potenze di 2 crescono più lentamente delle potenze di 10 ci vogliono più cifre per rappresentare un numero. Quanto vale (11 1111 0010) in base 2 Conversione meno immediata:
  • Chiediamoci come ragioniamo in base 10
  • Usiamo un algoritmo
  • Per capire che cifre scrivere nelle varie posizioni ci chiediamo quante volte la base 10 rientrano nel numero da rappresentare.

SOMMA DI NUERI IN BASE 2

Si fa la somma tra i singoli bit usando le somme in colonna Un computer usa un numero prederifinito n di bit per rappresentare numeri. Quindi c’è un limite ai numeri rappresentabili (es. 32 bit, 64 bit).

  • Se il risultato di una somma è più grande del limite il computer commette un errore di trabocco. A volte si usa la nozione posizionale in base 16, esadecimale. Notazione comoda per rappresentare numeri binari con poche cifre.

ASCII ART:

I caratteri usati nel codice Ascii possono essere usati anche per creare immagini grafiche. ALTRI CODICI 1) Ascii esteso

  • proposto inizialmente da DEC e IBM negli anni ‘80.
  • Codice a 8 bit (1 byte), quindi 2 alle 8 = 256 caratteri, il doppio di ascii
  • È diventato standard internazionale ISO-8859-1, spesso indicato con il nome latin-
  • Include tutti i caratteri di molte lingue. 2) Unicode
  • Codice universale proposto da Xerox e Apple
  • Inizialmente 2 byte (16 bit) per ciascun carattere, 2 alla 16 = 65.536 codici disponibili
  • Poi 21 bit per ciascun carattere, fino a 1.114.112 codici disponibili
  • Espandibile a codici di lunghezza maggiore
  • Attualmente codificati 143.859 caratteri, praticamente tutti i caratteri degli alfabeti umani esistenti
  • I primi 256 codici coincidono con l’Ascii esteso UTF-8 (Unicode trasformation format)
  • Codifica a lunghezza variabile di caratteri
  • Una delle più usate codifiche di Unicode, ad esempio sul web
  • Codici Unicode trasformati in altri codici
  • Caratteri più frequenti codificati con meno byte 3) codice MORSE
  • Sviluppato per il telegrafo con la codifica di linee e punti
  • Ottimizzato: simboli più corti per caratteri più frequenti
  • Primo codice digitale ----> 1 = punto, 111 = linea, 0 = separatore di punti e linee...