Strutture informative
1
Strutture Informative
•   I dati utilizzati ed elaborati da un programma, che possiamo
conservare nella memoria di un computer, possono essere di
diversi tipi: numerici, alfanumerici, alfabetici, logici e possono
essere distinti , a loro volta, in costanti e variabili. Essi
dipendono in genere dalla natura del problema da risolvere.
•   Tali dati, che abbiamo finora considerato soltanto dal punto di
vista della loro tipologia, possono essere allocati nella
memoria di un computer purché vengano messi prima in
relazione tra loro.
•   I dati si presentano quindi strutturati in modi differenti, per
ciascuno dei quali è necessario individuare una
rappresentazione interna al calcolatore che risulti conveniente
per le elaborazioni da eseguire e per lo scambio di
informazioni con l’esterno
2
Esempi
I dati elaborati in un programma, in genere, non sono mai dati
singoli, ma fanno parte di insiemi di dati che possono essere
variamente strutturati.
Es.: Tabella delle distanze stradali tra diverse città:
BARI
FIRENZE
BOLOGNA
-
681
784
FIRENZE
681
-
106
BOLOGNA
784
106
-
BARI
L’informazione “distanza tra la città X e la città Y” viene facilmente
trovata esaminando la tabella. Questo risulta semplice in quanto i
dati sono stati strutturati, cioè legati tra di loro secondo uno
schema logico.
Un altro esempio ci è fornito dall’elenco telefonico. Qui, il numero
di telefono di un abbonato è facilmente reperibile in quanto gli
utenti sono elencati in ordine alfabetico per Cognome e Nome.
3
Strutture Informative
Nella rappresentazione delle informazioni non è
sufficiente considerare l’insieme dei valori, ma anche
la loro STRUTTURA, cioè le relazioni logiche che
legano tra loro i valori stessi.
Un insieme di dati e la struttura che li lega
costituiscono una STRUTTURA INFORMATIVA.
La parte più piccola e indivisibile della struttura
informativa si dice ELEMENTO.
4
Strutture informative
•
Di conseguenza è opportuno esaminare i principali tipi di aggregati
dal punto di vista della struttura logica, cioè le cosiddette strutture
astratte di dati, e i sistemi per la loro rappresentazione nella
memoria di un calcolatore, cioè le possibili strutture concrete adatte
a contenere le strutture astratte.
•
In altri termini, la formulazione di un problema sarà espressa
tenendo conto anche del tipo di rappresentazione dei dati in
memoria che si pensa di adottare
5
Tipi di Strutture Informative
Con il termine strutture informative, si comprendono,
–   le strutture astratte, proprie del problema e dipendenti unicamente da
questo. Esse studiano ed organizzano le relazioni logiche che
intercorrono tra i dati; vengono usate per descrivere le proprietà
dell’insieme dei dati indipendentemente da come questi saranno
memorizzati (insieme di leggi che definiscono le relazioni esistenti fra
i dati di un insieme finito);
–   le strutture concrete, analizzano il processo dal punto di vista
hardware, cioè come i dati vengono allocati nella memoria del PC.
Sono le strutture interne che vengono usate per rappresentare in
memoria le strutture astratte.
6
Strutture Astratte
Definire una STRUTTURA ASTRATTA significa stabilirne il
TIPO, precisando:
•   l’aspetto STATICO, ovvero
–   quali sono gli elementi di base che la caratterizzano;
–   quali sono le relazioni possibili tra gli elementi e come si accede
ad essi
•   l'aspetto DINAMICO, ovvero
–   le operazioni sui dati, cioè se e in quale modo è possibile operare
sui dati mediante inserimenti, variazioni e cancellazioni.
7
Tipi
Un’altra classificazione prevede la distinzione tra
•   STRUTTURA STATICA: quando il numero degli
elementi che lo compongono rimane costante nel
tempo. Ciò significa che, una volta costruita la
struttura, essa viene usata solo per operazioni di
ricerca o per modificare qualche valore.
•   STRUTTURA DINAMICA : quando il numero degli
elementi può subire variazioni nel tempo (esempio:
elenco telefonico, in cui si possono inserire nuovi
abbonati, o cancellarne)
8
Accesso
L'ACCESSO specifica il modo con cui si “raggiunge”
l'informazione all'interno della struttura (attraverso operazioni di
lettura e/o scrittura).
Può essere:
•   ACCESSO SEQUENZIALE: quando per raggiungere un
elemento è necessario consultare tutti gli elementi che lo
precedono;
•   ACCESSO DIRETTO: quando è possibile raggiungere
direttamente l'informazione desiderata, o mediante la sua
posizione all'interno della struttura (es.: nei vettori tramite
l'indice) o mediante altre informazioni.
9
Operazioni
•   OPERAZIONI LOCALI: sono quelle che interessano
uno solo elemento alla volta (ricerca, modifica,
inserimento, cancellazione di un elemento)
•   OPERAZIONI GLOBALI: sono quelle che
interessano tutti gli elementi della struttura
(creazione, fusione, scansione, ordinamento)
10
Strutture astratte di dati: array
•
Si tratta di un insieme finito di elementi in corrispondenza biunivoca con un
insieme di n-ple di numeri interi (indici)
•
Gli indici possono assumere valori compresi in un intervallo determinato:
–   per n=1, si parla di vettore (array monodimensionale)
–   per n=2, si parla di matrice (array bidimensionale)
•
L array è una struttura a lunghezza fissa (struttura statica) in cui l accesso
ad un suo elemento avviene attraverso la n-pla di indici e non in modo
sequenziale come avviene nelle liste (accesso diretto)
•
Un vettore si distingue quindi da una lista lineare per il fatto che l accesso
all elemento di indice i avviene direttamente attraverso l indice i, mentre
l accesso ad un elemento della lista avviene tramite una ricerca sequenziale
che esamina tutti gli elementi della lista fino al reperimento dell i-simo
elemento voluto
11
Memorizzazione delle strutture astratte: matrici
•
Si usa tipicamente una struttura sequenziale accodando gli elementi
riga dopo riga oppure colonna dopo colonna
•
Per una matrice avente m righe e n colonne, l indirizzo del generico
elemento Aij è:
IND (Aij) = IND (A11) + (i-1)*n*l + (j-1)*l
dove:
IND (A11) è l indirizzo iniziale della struttura sequenziale
l è la lunghezza di ciascun elemento, i l’indice di riga e j l’indice di
colonna
•
Se la memorizzazione avviene per colonne, basta sostituire
nell equazione m ad n e i a j
•
Il discorso si può estendere anche a matrici a k dimensioni
12
Memorizzazione delle strutture astratte: matrici
•
Se la matrice ha grandi dimensioni, ma ha molti zeri (matrice
sparsa), può essere opportuno organizzare gli elementi non nulli,
insieme con i loro indici, in una TAVOLA.
•
Un altra possibilità è quella di usare una doppia famiglia di catene
circolari: ogni elemento non nullo appartiene a 2 catene, una di riga
ed una di colonna; quindi l elemento della catena è formato:
–   dal dato
–   dai suoi due indici
–   da due puntatori agli elementi successivi su riga e colonna
13
Ricerca sequenziale
•
Gli elementi nella tabella sono allocati senza seguire alcuna regola
di ordinamento
•
L operazione di ricerca si effettua scandendo gli elementi della
tabella fino al reperimento della chiave desiderata
•
È una tecnica scarsamente efficiente in cui il tempo medio di ricerca
è pari a N/2, se N è la lunghezza della tavola
•
Si può migliorare il tempo di accesso concentrando gli elementi in
cui si prevede un accesso frequente nelle prime posizioni
•
Una tavola su cui si opera una ricerca sequenziale può essere
memorizzata come struttura sequenziale o a catena
14
Ricerca binaria
•
La tavola deve essere ordinata secondo le chiavi
•
La ricerca binaria richiede il confronto fra la chiave cercata e quella
dell elemento centrale della tavola
•
Il risultato del confronto indica se la ricerca ha termine oppure in
quale metà della tavola deve continuare
•
Il procedimento viene iterato
•
Il tempo massimo di ricerca è log2N
•
E
una tecnica di ricerca veloce, ma è difficile inserire nuovi
elementi (riordino delle chiavi)
•
Una tavola su cui si opera una ricerca binaria deve essere
memorizzata come struttura sequenziale con elementi di lunghezza
costante, dato che l accesso deve avvenire tramite calcolo
dell indirizzo
15
Accesso diretto
•
È applicabile solo a tavole per cui le chiavi permettano di stabilire
una corrispondenza biunivoca con gli indirizzi di memoria
corrispondenti agli elementi della tavola
•
Esiste quindi una funzione di accesso che, a partire dalla chiave
dell elemento ricercato, permette di ottenere l indirizzo di memoria
•
A chiavi diverse corrispondono indirizzi diversi
•
È difficile prevedere l inserimento di nuovi elementi (le relative
chiavi devono ancora permettere l identificazione di indirizzi
diversi)
•
Alta velocità di accesso, ma scarsa applicabilità a causa delle
ipotesi restrittive
•
Tavola memorizzata in una struttura sequenziale
16