Se esistesse un algoritmo in grado di ottimizzare gli algoritmi, noi programmatori saremmo tutti senza un lavoro. Tuttavia, eseguiamo già piccole ottimizzazioni nei compilatori. Piccole ottimizzazioni possono essere apportate che non cambiano il significato previsto dell'operazione, tuttavia la nostra limitazione è precisamente quella: significato inteso. Ad esempio, se sapessimo che un numero è sempre positivo, potremmo sostituire la moltiplicazione per 2 con lo spostamento dei bit. Tuttavia, quando vengono lasciati interi con segno, anche se sono usati puramente per numeri positivi, il compilatore non può fare questo tipo di ipotesi.
Il vero trucco è capire cosa dovrebbe fare l'algoritmo. Se lo capisci, allora ti rendi conto che un algoritmo non riguarda i passi necessari ma il risultato finale. Senza questo, c'è ben poca speranza di migliorare su un algoritmo. Ad esempio, se dai al tuo amico le istruzioni per arrivare a casa tua e non vedi l'immagine più grande, potresti non rendertene conto che hai fatto fare al tuo amico un percorso più lungo per arrivarci.
Quindi come definisci il contesto di un algoritmo? Si riduce a input e output. Se puoi fare assunzioni matematiche sull'input e descrivere le ipotesi attese sull'output, allora un algoritmo è semplicemente una dimostrazione matematica nella sua forma più pura, descrivendo tutti i passi che dovresti eseguire per garantire che per l'input dato , ricevi l'output atteso.
Ogni passaggio viene trasformato in una trasformazione matematica equivalente (ad esempio, l'esecuzione di un ciclo che accumula valori potrebbe essere considerata un'operazione di somma). Una volta che hai questo, non solo puoi iniziare a dimostrare la correttezza e la correttezza, ma puoi anche semplificare in modo molto simile a come combinerai termini simili in una formula matematica.
Naturalmente tutto ciò è molto teorico e continuo, ma l'idea è che un giorno potremo scrivere compilatori che non solo possono dirti che il tuo algoritmo non funzionerà come previsto, ma anche su quale linea e come risolverlo così come eventuali ottimizzazioni che possono essere fatte per migliorare le prestazioni (questo sarebbe probabilmente fatto automaticamente).
Purtroppo non siamo ancora in questa fase, ma spero di vederlo comunque nella mia vita comunque. Spero che risponda alla tua domanda.