tux Torna alla home page Introduzione all'Analisi N
Precedente Prossimo Indice

Paragrafo 3.

NON ALGORITMI E DEALGORITMIZZAZIONE

La definizione di algoritmo da sempre è stata espressa in tutte le salse e in ogni più barbaro modo da generazioni di professori e affini o subordinati e non saremo certo noi a propinarvene una nuova. Diamo per scontato che chi legge sappia, almeno a grandi linee (parallele, perpendicolari, curve, lisce, a pois, come vi pare) cosa sia un algoritmo. Ci preme invece in questo contesto un'alternativa duale dell'algoritmo (o del modello matematico, che supporremo siano la stessa cosa per semplicità). Indicheremo con il termine non-algoritmo, o non-modello-matematico un insieme di passi (formule matematiche, parole di un linguaggio, istruzioni del manuale della lavatrice, etc.) attraverso i quali non si arriva a nessun risultato utile. Qualcuno, al solito, potrà ipotizzare una certa futilità di concetto, ma, almeno in questo caso, si sbaglia. La domanda è: che cavolo ce ne facciamo di un non-algoritmo? La risposta: introduciamo dei dati e osserviamo cosa accade. E cosa accade? I risultati, sperimentali e poi confermati e generalizzati dalla teoria, indicano nei non-algoritmi un modo efficiente di "contaminare" con errori tutto ciò che può essere affetto da errore. E badate che questa categoria di oggetti è di una vastità asintotica all'Universo conosciuto. Alcuni non-algoritmi, come vedremo tra non molto, massimizzano questo effetto, pressoché azzerando le probabilità di ottenere risultati corretti.
Esistono differenti modi di costruire non-algoritmi efficienti: indichiamo di seguito i più comuni, riservandoci di dettagliare solo l'ultimo, coerente con gli scopi di questo Capitolo.

  1. Tramite passaggi analgebrici.
    Presi come punto di partenza i tipi di dati a disposizione si manipolano con passaggi analgebrici creando un non-algoritmo di facile generazione, spesso molto intuitivo e che si presta a rapide modifiche. Per una trattazione dei passaggi analgebrici, vedere il Capitolo Quinto.

  2. Introducendo quantità non quantificabili in un algoritmo.
    Una tale operazione non è sempre possibile, a causa della natura algoritmica degli algoritmi. E' vero però che in taluni casi si può approssimare questa situazione introducendo quantità canoniche in misura tale da evidenziare i comportamenti non algoritmici dell'algoritmo, che sono sempre presenti, specie se chi ha ideato l'algoritmo è un incapace. Si hanno così, tanto per portare alcuni esempi, le situazioni di overflow, underflow, file not found, runtime error at..., parity error, general system failure, chiamare l'idraulico, etc.

  3. Tramite la dealgoritmizzazione.
    Ovvero la trasposizione passo-passo di un algoritmo in un non-algoritmo. Esistono diverse tecniche di dealgoritmizzazione: citiamo le più utilizzate. Si suppone, in ognuno dei casi presi in esame, di avere per ipotesi a disposizione un algoritmo (da dealgoritmizzare) e uno strumento per modificare i passi dell'algoritmo, che chiameremo convenzionalmente liberatore di classe n (la classe sarà un parametro variabile a seconda dei casi, poi si specificherà).

    • Metodo dei rovinatori costanti abbastanza variabili.
      Si scelga un riferimento p: esso è un numero intero positivo che "guiderà" le operazioni. Partendo dall'inizio della sequenza di passi dell'algoritmo, se ne contino esattamente p e si utilizzi il liberatore per cancellare il passo p-esimo. In questo caso il liberatore è detto di prima classe ed è in grado di agire su un solo passo dell'algoritmo per attuare la cancellazione dello stesso. I passi cancellati sono detti rovinatori: sono costanti in quanto appaiono ad intervalli regolari, ma sono abbastanza variabili come effetti per annullare le probabilità di funzionamento dell'algoritmo in un tempo che cresce linearmente con la lunghezza dell'algoritmo. Diciamo che l'unica cosa che può impedire all'algoritmo di non funzionare è il solito e ben noto Teorema (che non è comunque una possibilità remota, sia ben chiaro).

    • Rovinatori ciclici.
      E' un sistema usato solo dai più incalliti promotori della dealgoritmizzazione. Si tratta di utilizzare il metodo precedente, ma nel momento in cui si giunge alla fine della sequenza di passi si ricomincia dall'inizio incrementando o decrementando il riferimento p di una quantità (finita) p2. La quale può benissimo essere un numero qualunque, anche se certi campi numerici potrebbero dare alcuni problemi (procedere di 2 passi alla volta è umano; procedere di 2 + j4 passi alla volta è da premio Nobel per la Fisica).

    • Modello di Schwartz.
      Riguarda da vicino la soggettività e il relativo principio di Schwartz, visto nel Capitolo Secondo. Applicando quest'ultimo all'algoritmo da dealgoritmizzare si ottiene un efficace non-algoritmo.

 


Precedente Prossimo Indice