Innanzitutto ad un algoritmo si richiede di rispettare le specifiche poste dal problema e di risolverlo correttamente. Poi ai programmi che implementano gli algoritmi in un particolare linguaggio di programmazione chiediamo di essere leggibile e modulare e di essere commentato per poterlo facilmente modificare nel seguito. Quest'ultimi criteri afferiscono alla sfera dello stile di programmazione. Ma ancora non abbiamo parlato dei criteri per valutare la bontà degli algoritmi. Sono tutti ugualmente buoni? e cosa vuol dire essere buono? Risolvere il problema velocemente? Esiste una teoria degli algoritmi che insegna ad analizzare gli algoritmi in funzione della loro complessità. Gli algoritmi venmgono valutati in funzione del modo più o meno efficace con cui usa le risorse della macchina e del tempo impiegato per risolvere il problema. È importante notare che si può studiare un algoritmo per stimarne il tempo impiegato a risolvere un problema e la memoria utilizzata allo scopo, indipendentemente dalla macchina. Questo ci consente di sapere se un problema è di lenta soluzione anche su una macchina potente e veloce e ci consente di stabilire che esistono dei limiti propri dell'algoritmo, che non potranno venire superati con l'introduzione di macchine ancorchè velocissime. Così sappiamo che certi problemi che pure sono comuni (ad esempio il problema detto del commesso viaggiatore, che avendo un itinerario da seguire per visitare numerose città cerca, di ottimizzare il percorso in funzione della kilometri percorsi, toccando tutte le città una e una sola volta) sono problemi molto onerosi da risolvere. Nell'esempio specifico, gli algoritmi trovati hanno tempi di soluzione del problema proibitivi già per itinerari con poche decine di città. Sempre dalla teoria sappiamo che certi problemi non potranno
essere risolti in modo più semplice, perchè è il
problema in sè che è intrinsecamente complesso.
Non abbiamo cioè la speranza che prima o poi qualcuno possa trovare una soluzione
brillante che migliori drasticamente il tempo di calcolo. |
![]() |
Lezione 1. L'analisi degli algoritmi Copyright © 2002. Alberti. DSI, Università degli Studi di Milano. |
![]() |
![]() |