La citazione è piuttosto vaga e imprecisa. Esistono almeno tre modi correlati in cui può essere interpretato.
Il punto matematico letterale alla base è che, se sei interessato solo ad istanze di dimensioni fino a un certo limite, allora ci sono solo finitamente molte possibili istanze. Ad esempio, ci sono solo molti grafici finiti su un massimo di cento vertici. Se ci sono solo un numero finito di istanze, in linea di principio puoi risolvere il problema semplicemente costruendo una tabella di ricerca di tutte le risposte a tutte le possibili istanze. Ora puoi trovare la risposta controllando prima che l'input non sia troppo grande (il che richiede un tempo costante: se l'input è più lungo di K, non è valido), quindi cerca la risposta nella tabella (che richiede tempo costante: esiste un numero fisso di voci nella tabella). Si noti, tuttavia, che la dimensione effettiva della tabella è probabilmente non misurabile. Ho detto che ci sono solo un numero finito di grafici su cento vertici ed è vero. È solo che il numero finito è maggiore del numero di atomi nell'universo osservabile.
Un punto più pratico è che, quando diciamo che il tempo di esecuzione di un algoritmo è , che solo significa che è asintoticamente passi, per qualche costante . Cioè, c'è una costante tale che, per tutti , l'algoritmo compie circa passi. Ma forse e ti interessano solo istanze di dimensioni molto inferiori. Il limite quadratico asintotico potrebbe non applicarsi nemmeno alle tue piccole istanze. Potresti essere fortunato e potrebbe essere più veloce su piccoli input (o potresti essere sfortunato e averlo più lento). Ad esempio, per piccolo ,c n 2 C n 0 n ≥ n 0 c n 2 n 0 = 100 , 000 , 000 n n 2 < 1000 n O ( n 2.3729 ) O ( n 2.8074 )Θ ( n2) c n2Cn0n ≥ n0c n2n0= 100 , 000 , 000nn2< 1000 nquindi preferiresti eseguire un algoritmo quadratico con costanti buone piuttosto che un algoritmo lineare con costanti cattive. Un esempio nella vita reale di ciò è che gli algoritmi di moltiplicazione di matrice asintoticamente più efficienti (varianti di Coppersmith – Winograd , in esecuzione nel tempo ) sono usati raramente in pratica perché di Strassen l'algoritmo è più veloce a meno che le tue matrici non siano davvero grandi.O ( n2,3729) O ( n2,8074)
Un terzo punto è che, se è piccolo, e anche sono piccoli. Ad esempio, se devi ordinare alcune migliaia di elementi di dati e devi ordinarli solo una volta, qualsiasi algoritmo di ordinamento è abbastanza buono: un algoritmo di avrà ancora bisogno forse solo di alcune decine di milioni di istruzioni per ordinare i tuoi dati, il che non richiede molto tempo su una CPU in grado di eseguire miliardi di istruzioni al secondo. OK, ci sono anche accessi alla memoria, ma anche un algoritmo lento richiederà meno di un secondo, quindi è probabilmente meglio usare un algoritmo semplice e lento e farlo bene piuttosto che usare un algoritmo complesso e veloce e scoprire che è velocissimo ma difettoso e in realtà non ordina i dati correttamente.n 2 n 3 Θ ( n 2 )nn2n3Θ ( n2)