Esiste un'intera branca dell'informatica che si occupa di analisi della complessità di un algoritmo,ovviamente i metodi si basano sull'analisi del codice in maniera svincolata dal particolare elaboratore su cui si fa girare l'algoritmo.I risultati che fornisce questa analisi non sono ovviamente delle stime precise ma semplicemente danno un'idea delle prestazioni dell'alogritmo al crescere di un certo(o di certi) parametri di input,si parla di complessità asintotica(se sei interessato esiste un libro molto ben fatto a riguardo di cui non ricordo il titolo ma i cui autori dovrebbero essere CORMEN e LEISERSON).Ad esempio si dice che la ricerca in una lista concateata ha una complessità lineare rispetto a n dove n è il numero di elementi della lista,cioè il suo tempo di esecuzione cresce in maniera direttamente proporzionale a n.Ci sono casi in cui la crescità è proporzionale a n^2,n*log(n) etc..comunque è possibile effettuare anche unanalisi machine dependent ma molto precisa sui tempi di esecuzione o il numero di istruzioni eseguite da un certo programma in un certo calcolatore,questo si fa inserendo nei punti giusti del codice degli appositi timer e contatori di istruzioni.Per quanto riguarda l'analisi della complessità di un programma già pronto (di cui non si ha il codice)è un'altro paio di maniche e sinceramente non sono molto informato sull'argomento.Comunque se cipensi non è difficile scrivere un programma che valuti i tempi di esecuzione di un altro sotto diverse condizioi e poi effettui una tabulazione dei risultati al fine di costruire ad esempio un grafico.

Rispondi quotando