Considere la implementación simple de la fuerza bruta:
coincidencia def (texto [1..N], patrón [1..M]) para i = 0: NM bandera = verdadero para j = 1: M si el texto [i + j]! = patrón [j] bandera = falso descanso fin fin if flag == true // Se ha encontrado una coincidencia volver i + 1 fin fin //Sin coincidencia volver -1
Podemos mostrar que la condición más interna si se verifica como máximo dos veces por carácter en el texto. Suponga que se verifica la condición interna para (i, j). Esto significa que el texto [i + 1 … i + j-1] = patrón [1 … j-1]. Pero dado que todos los caracteres en el patrón son distintos, existe como máximo una posición en el patrón que puede coincidir con el texto [i + j-1]. Por lo tanto, podemos tener como máximo un valor de j> 1 que permita verificar el condicional más interno. Por lo tanto, el algoritmo es O (N).
- Si quiero resolver problemas del mundo real, ¿qué debo hacer, encontrar esos problemas y luego aprender las estructuras de datos y algoritmos requeridos o viceversa?
- ¿Podría un algoritmo informático convertirse en el presidente de los Estados Unidos?
- ¿Cómo determino la complejidad temporal de una expresión matemática que involucra potencias, divisiones y exponenciales? Sé la complejidad temporal de las operaciones simples, pero no sé cómo se supone que las combino para encontrar la respuesta.
- ¿Cuál es el tiempo de entrenamiento promedio y el tiempo de prueba de los algoritmos de aprendizaje automático más comunes?
- Después de que termina el programa de programación (estructuras de datos y algoritmo), ¿qué se les enseña a los estudiantes en CSE después de eso?