Non esiste una definizione unificata di cosa sia un "algoritmo più veloce". Non esiste un organo di governo che decide se un algoritmo è più veloce di un altro.
Per sottolineare perché, vorrei offrire due diversi scenari che dimostrano questo concetto oscuro.
Il primo esempio è un algoritmo che cerca un elenco collegato di dati non ordinati. Se riesco a fare la stessa operazione con un array, non ho alcun cambiamento sulla grande misura Oh delle prestazioni. Entrambe le ricerche sono O (n). Se guardo solo i grandi valori di Oh, potrei dire che non ho fatto alcun miglioramento. Tuttavia, è noto che nella maggior parte dei casi le ricerche di array sono più rapide di un elenco collegato, quindi si potrebbe decidere che ciò ha reso un algoritmo "più veloce", anche se il grande Oh non è cambiato.
Se posso usare il tradizionale esempio di programmazione di un robot per creare un sandwich PBJ, posso mostrare cosa intendo in un altro modo. Considera solo il punto in cui si sta aprendo il barattolo di burro di arachidi.
Pick up the jar
Grab the lid
Unscrew the lid
Contro
Pick up the jar
Put the jar back down
Pick up the jar
Put the jar back down
Pick up the jar
Put the jar back down
Pick up the jar
Put the jar back down
Pick up the jar
Put the jar back down
Pick up the jar
Grab the lid
Unscrew the lid
Anche nell'impostazione teorica più accademica che mi viene in mente, scoprirai che le persone accettano che il primo algoritmo è più veloce del secondo, anche se i grandi risultati della notazione Oh sono gli stessi.
Al contrario, possiamo considerare un algoritmo per violare la crittografia RSA. Al momento, si percepisce che questo processo è probabilmente O (2 ^ n), dove n è il numero di bit. Considera un nuovo algoritmo che esegue n ^ 100 più velocemente Ciò significa che il mio nuovo processo viene eseguito in O (2 ^ n / n ^ 100). Tuttavia, nel mondo della crittografia, una velocizzazione polinomiale verso un algoritmo esponenziale non è tradizionalmente considerata una velocità teorica. Quando si eseguono prove di sicurezza, si presume che un utente malintenzionato possa scoprire una di queste accelerazioni e che non avrà alcun effetto.
Quindi in una circostanza, possiamo cambiare una O (n) in O (n) e chiamarla più velocemente. In una diversa circostanza, possiamo cambiare una O (2 ^ n) in O (2 ^ n / n ^ 100) e affermare che non c'è stata alcuna accelerazione significativa. Questo è il motivo per cui dico che non esiste una definizione unificata per un "algoritmo più veloce". È sempre contestualmente dipendente.