Esta pregunta es meramente sobre algoritmo. En pseudo código es así:¿Algoritmo más rápido para encontrar una cadena en una matriz de cadenas?
A = Array of strings; //let's say count(A) = N
S = String to find; //let's say length(S) = M
for (Index=0; Index<count(A); Index++)
if (A[Index]==S) {
print "First occurrence at index\x20"+Index;
break;
}
Este bucle for requiere la comparación de cadenas N veces (o los tiempos de comparación byte N * M, O (N * M)). Esto es malo cuando la matriz A tiene muchos elementos o cuando la cadena S es demasiado larga.
¿Algún método mejor para encontrar la primera vez? Algún algoritmo en O (K * logK) está bien, pero es preferible en O (K) o mejor en O (logK), donde K es N o M.
No me importa agregar algunas otras estructuras o haciendo algo de procesamiento de datos antes del ciclo de comparación.
"Cuando la cadena S es demasiado larga" es irrelevante, a menos que haya muchas cadenas en 'A 'con la misma longitud y un prefijo largo idéntico. (Las comprobaciones de igualdad de cadenas pueden finalizar inmediatamente si las longitudes son diferentes, o tan pronto como se encuentre una falta de coincidencia al caminar sobre ellas). – Dougal
¿Por qué usa '\ x20' en lugar de un espacio? Tengo curiosidad :-) –
oh sí, el tiempo de comparación depende más de las longitudes de las cadenas en la matriz A – jondinham