2010-08-25 6 views

Répondre

0

En java, si l'appel est string1.indexOf (string2) le coût en temps serait O (m - n) où m est la longueur de string1 et n est la longueur de string2.

9

la mise en œuvre IIRC Java de .indexOf() est juste le naive string matching algorithm, qui est O(n+m) moyenne et O(n*m) pire des cas.

En pratique, c'est assez rapide; Je l'ai testé pour des chaînes d'aiguilles relativement grandes (> 500 char) et de haystack (quelques MB) et il ferait l'appariement en moins d'une seconde (dans un ordinateur domestique moyen). Rappelez-vous que je l'ai forcé à traverser toute la meule de foin.

+0

Je sais que c'est il y a longtemps, mais savez-vous d'où vous venez? J'aurais besoin de cette information pour ma thèse de baccalauréat et je ne sais pas si Stackoverflow serait une référence acceptable pour une thèse;) – odaa

+0

@odaa J'ai fait quelques expériences et j'ai écrit un article là-dessus quand j'étais au collège. – NullUserException

+0

@NullUserException, Pourquoi dites-vous que 'O (n + m)' est le cas moyen? http://stackoverflow.com/a/12752295/632951 semble contredire ce point. – Pacerier

0

Dépend de l'implémentation. Par exemple, lors de la recherche d'une chaîne dans une chaîne plus longue, "L'algorithme Turbo Boyer-Moore prend une quantité d'espace constante supplémentaire pour effectuer une recherche dans 2n comparaisons (par opposition à 3n pour Boyer-Moore), où n est le nombre de caractères dans le texte à rechercher. " (Voir Wikipedia).

+1

@caleb: Vraiment, comment pouvez-vous dire à partir de la question? –

Questions connexes