Criteri generali


Vogliamo individuare dei criteri oggettivi da usare per scegliere tra due algoritmi, risolutivi dello stesso problema, quello che offre prestazioni migliori...

Correttezza dell’algoritmo

Un algoritmo risolve un problema se dà risposte esatte per ogni istanza del problema.

Conviene allora prevedere subito le successive fasi di debugging utilizzando un ambiente di sviluppo integrato o aggiungendo delle istruzioni adatte allo scopo.

Interfaccia utente del programma

La facilità d’uso per l’utente finale è quasi sempre determinante nell’acquisto di un sistema (anche la piacevolezza dell’interfaccia grafica...).

Comprensibilità e modificabilità del codice

Un codice molto efficiente, secondo certi criteri, ma incomprensibile per chi non lo ha realizzato potrebbe diventare inutilizzabile.

Spesso del codice risulta incomprensibile anche all’autore stesso se è passato molto tempo dalla stesura (perché non lo ha documentato).

Velocità e dimensione dell'eseguibile

Hardware, sistema operativo, linguaggio di programmazione, compilatore, ... concorrono alle prestazioni finali del codice ma ipotizziamo che siano fissati.
Diventa significativo ottenere per il prodotto finale massima velocità e minima dimensione.

La concorrenza non aspetta che venga messo in commercio hardware più veloce di quello attuale, nel frattempo migliora le prestazioni del suo prodotto!

Dispositivi di memorizzazione
La velocità di esecuzione di un programma è condizionata dalle diverse velocità di accesso e diverse capacità dei dispositivi di memorizzazione.
CPU2 GHz~KB
Cache1 GHz~MB
RAM0.5 GHz~GB
HD0,1 GHz~TB


È evidente che utilizzare strutture dati quanto più piccole possibile significa garantire ad esse maggiore vicinanza al microprocessore, quindi maggiore velocità di accesso e quindi minor tempo d'esecuzione.

Sottoprogrammi
L’uso dei sottoprogrammi rallenta l’esecuzione del codice perché richiede l’allocazione dinamica dei parametri (1) e delle risorse locali (2) oltre che la chiamata (gosub) (3) e il ritorno al chiamante (ret) (4).
Si tratta di operazioni che provocano sicuramente un rallentamento nell'esecuzione.

Rinunciare ai sottoprogrammi è un problema che si può risolvere solo caso per caso: se una procedura viene chiamata poche volte si può pensare di eliminarla inserendo direttamente il codice dove serve senza per questo aumentare troppo la dimensione dell’eseguibile.

Conclusioni

Tutti i criteri che non riguardano l’algoritmo ma la sua codifica non fanno parte della teoria degli algoritmi, che restringe il suo campo d’azione, allora, al consumo atteso di risorse hardware generiche ma sempre presenti: CPU, RAM, memoria di massa.

Il consumo di memoria porta a definire dei criteri di complessità in spazio mentre quello della CPU viene caratterizzato dalla complessità in tempo (di occupazione della CPU).
Di nuovo dobbiamo trascurare tutti i giudizi tecnici sulle diverse possibilità di acquisto ma dobbiamo concentrare la nostra attenzione sull’algoritmo risolutivo...

Se diamo per scontato che tutti i criteri precedenti siano sempre applicati allora non rimane che mettere in discussione le singole istruzioni, cioè l’algoritmo.
There are no comments on this page.
Valid XHTML :: Valid CSS: :: Powered by WikkaWiki