L'analisi del tempo di esecuzione asintotica non è probabilmente lo strumento migliore da scegliere tra questi due algoritmi: l'analisi asintotica ignora i fattori costanti e i fattori costanti saranno critici qui. I due algoritmi hanno sostanzialmente lo stesso tempo di esecuzione asintotico, quindi l'analisi asintotica probabilmente non è molto utile per scegliere tra di loro.
Invece, la scelta giusta tra i due algoritmi è attraverso l'analisi sperimentale. Identifica un carico di lavoro rappresentativo, quindi confronta le prestazioni di entrambi gli algoritmi sul carico di lavoro, sui tipi di macchine che intendi utilizzare nella pratica.
Per inciso, sembra che potresti avere una leggera confusione sul tempo di esecuzione asintotico di Rabin-Karp. Da un lato dici che Rabin-Karp ha tempo di esecuzione, ma poi nella frase successiva dici che Rabin-Karp ha tempo di esecuzione. Forse sei confuso dalla differenza tra il tempo di esecuzione previsto (caso medio) e il caso peggiore.O ( n + m )O(nm)O(n+m)
Poiché Rabin-Karp è randomizzato, il tempo di esecuzione atteso (nel caso medio) è la metrica appropriata da utilizzare per prevedere le prestazioni del mondo reale nella pratica. In particolare, qui la media viene presa sulla scelta casuale della funzione hash. In particolare, non è una media rilevata nella scelta delle stringhe. Anche per la stringa e il motivo peggiori possibili, il tempo medio di esecuzione sarà comunque . Con una funzione hash adatta, la probabilità che il tempo di esecuzione sia più lungo di è esponenzialmente ridotta in . Per dirla in altro modo (ed essendo leggermente informale), c'è solo una piccola possibilità esponenziale che Rabin-Karp impieghi più tempo dic ⋅ ( n + m ) c O ( n + m )O(n+m)c⋅(n+m)cO(n+m)tempo. Dobbiamo già accettare esponenzialmente piccole possibilità che accadano cose brutte - per esempio, c'è una piccola ma non zero possibilità di un raggio cosmico che provoca un capovolgimento nella tua memoria che provoca il loop del programma per sempre. Quindi, preoccuparsi di questa possibilità esponenzialmente piccola non ha senso.
Da un punto di vista ingegneristico, il tempo di esecuzione di Rabin-Karp è [o potrebbe anche essere]. Ignora le cose ; non è rilevante per la pratica.O ( n m )O(n+m)O(nm)