2010-08-25 11 views

risposta

0

In Java, se la chiamata è string1.indexOf (string2) il costo del tempo sarebbe O (m - n) dove m è la lunghezza di string1 e n è la lunghezza di stringa2. implementazione di

9

IIRC Java di .indexOf() è solo l'naive string matching algorithm, che è O(n+m) media e O(n*m) caso peggiore.

In pratica questo è abbastanza veloce; L'ho provato per gli spilli relativamente grandi (> 500 char) e haystack (pochi MB) e farebbe la corrispondenza in meno di un secondo (in un normale computer domestico). Intendiamoci, l'ho costretto a passare attraverso l'intero pagliaio.

+0

So che è molto tempo fa ma sai da dove lo hai preso? Avrei bisogno di queste informazioni per la mia tesi di laurea e non so se Stackoverflow sarebbe un riferimento accettabile per una tesi;) – odaa

+0

@odaa Ho fatto alcuni esperimenti e ho scritto un articolo su di esso quando ero al college. – NullUserException

+0

@NullUserException, perché dici che 'O (n + m)' è il caso medio? http://stackoverflow.com/a/12752295/632951 sembra contraddire questo punto. – Pacerier

0

A seconda dell'implementazione. Ad esempio, quando si cerca una stringa all'interno di una stringa più lunga, "L'algoritmo di Turbo Boyer-Moore richiede una quantità aggiuntiva di spazio per completare una ricerca all'interno di confronti 2n (a differenza di 3n per Boyer-Moore), dove n è il numero di caratteri nel testo da cercare. " (vedi Wikipedia).

+1

@ caleb: Davvero, come puoi dire dalla domanda? –

Problemi correlati