![]() | ![]() |
|
|
Efficienza: risposta ad un problema in tempi preventivati o più brevi.
Dato un problema, un programma che lo risolve è efficiente in termini di SPAZIO di memoria occupata e di TEMPO di esecuzione (si osserva la velocità del programma in sé tralasciando la dipendenza de 858g66i lla C.P.U. e quindi della velocità del calcolatore)
Operazioni di ricerca: per costatare l'efficienze del programma bisogna metterlo alla prova su migliaia di dati.
RICERCA INDIVIDUALE: interessata ad un elemento specifico
RICERCA per INTERVALLO: interessata a tutti gli elementi che hanno una particolare caratteristica comune.
ELENCO ORDINATO: interessata nell'ordine di un elenco
Come e quanto è efficiente un programma nella sua computazione, analizzare l'idea risolutiva nel calcolo necessario per risolvere il problema
(piccolo valore della complessità computazionale = meno tempo di esecuzione)
ricerca di un elemento 'x' in una sequenza di dati (es.128) per un algoritmo di ricerca sequenziale (ad accesso sequenziale):
CASO OTTIMO: lo trovo all'inizio n°confronti = 1
CASO MEDIO: media statistica delle possibilità n°confronti = 64
CASO PESSIMO: lo trovo alla fine n°confronti = 128
per un algoritmo di ricerca binaria:
CASO OTTIMO: n°confronti = 1
CASO MEDIO: n°confronti = 7
CASO PESSIMO: n°confronti = 8
SEQUENZIALE: seleziono uno per volta gli elementi di un certo campo (CAMPO CHIAVE di ricerca) e li confronto con il dato
CON INDICE: accesso tramite un indice. INDICE = struttura ausiliaria memorizzata in modo permanentemente su un file, correlato con il file primario, residente nello stesso disco, contenente tutti i dati.
Posizionamento diretto in Pascal: SEEK
HASH: trasformazione di una chiave di ricerca. Chiave K che può assumere diversi valori.
La query viene tradotta in un codice di più basso livello (linguaggio macchina) comprensibile dal file SYSTEM del sistema operativo (componente che consente l'interrogazione della base di dati fisica)
Compito dell'ottimizzatore è trovare la query più efficiente con il minor costo (tempo esecuzione).
Il minimo è il numero di tuple del risultato.
Esempio 1: se facciamo un interrogazione su due tabelle nel procedurale bisogna prima fare il prodotto cartesiano delle due.
1°strategia: prima si esegue il prodotto e poi l'accesso
2°strategia: prima si eliminano le colonne che non sono coinvolte, si svolge il prodotto cartesiano e poi l'accesso
3°strategia: semigiunzione eliminando ciò che non interessa.
a) si deve usare un metodo d'accesso alla lista (es. pittori) che consenta di rispondere alla domanda "chi sono i pittori di un determinato genere?" con un costo di n = 1
b) si deve usare un metodo d'accesso alla lista (es. Quadri) che consenta di rispondere alla domanda "Quali sono i quadri di un certo pittore?" con un costo di n = N° tuple che formano il risultato
c) si può ricorrere al un metodo d'accesso con un indice o hash? Perché?
Privacy |
Articolo informazione
Commentare questo articolo:Non sei registratoDevi essere registrato per commentare ISCRIVITI |
Copiare il codice nella pagina web del tuo sito. |
Copyright InfTub.com 2025