2010-08-25 14 views
9

¿Cuál es el coste/complejidad de un String.indexOf() llamada a la función¿Cuál es el coste/complejidad de una llamada de función String.indexOf()

+1

¿En qué idioma, y ​​en comparación con qué? ¿Cuáles son los argumentos de la función? ¿Se necesita una cadena, un char, un comparador personalizado? – Kobi

+0

¿Es de Java de lo que estás hablando? – NullUserException

+0

duplicado de http://stackoverflow.com/questions/12752274/java-indexofstring-str-method-complexity –

Respuesta

0

en Java, si la llamada es string1.indexOf (cadena2) el costo de tiempo sería O (m - n) donde m es la longitud de string1 yn es la longitud de string2. implementación de .indexOf() de

9

IIRC Java es sólo el naive string matching algorithm, que es la media y O(n+m)O(n*m) peor de los casos.

En la práctica esto es lo suficientemente rápido; Lo probé para cadenas relativamente grandes de aguja (> 500 caracteres) y pajar (pocos MB) y haría la coincidencia en menos de un segundo (en una computadora doméstica promedio). Eso sí, lo obligué a recorrer todo el pajar.

+0

Sé que hace mucho tiempo, pero ¿sabes de dónde sacaste eso? Necesitaría esa información para mi tesis de licenciatura y no sé si Stackoverflow sería una referencia aceptable para una tesis;) – odaa

+0

@odaa Realicé algunos experimentos y escribí un artículo cuando estaba en la universidad. – NullUserException

+0

@NullUserException, ¿Por qué dices que 'O (n + m)' es el caso promedio? http://stackoverflow.com/a/12752295/632951 parece contradecir ese punto. – Pacerier

0

Depende de la implementación.

Por ejemplo, al buscar una cadena dentro de una cadena más larga, "El algoritmo Turbo Boyer-Moore toma una cantidad constante adicional de espacio para completar una búsqueda dentro de 2n comparaciones (en oposición a 3n para Boyer-Moore), donde n es el número de caracteres en el texto que se buscará ". (ver Wikipedia).

+1

@caleb: De verdad, ¿cómo puedes saber por la pregunta? –

Cuestiones relacionadas