¿Cuáles son los mejores algoritmos disponibles para encontrar los patrones más largos de repetición de caracteres en una cadena usando .net?El mejor algoritmo para encontrar un patrón repetitivo
Respuesta
Supongo que hablas sobre descubrimiento de patrones. Echar un vistazo a algunos aproach primaria (source)
private static Dictionary<string, int> FindPatterns(string value) {
List<string> patternToSearchList = new List<string>();
for (int i = 0; i < value.Length; i++) {
for (int j = 2; j <= value.Length/2; j++) {
if (i + j <= value.Length) {
patternToSearchList.Add(value.Substring(i, j));
}
}
}
// pattern matching
Dictionary<string, int> results = new Dictionary<string, int>();
foreach (string pattern in patternToSearchList) {
int occurence = Regex.Matches(value, pattern, RegexOptions.IgnoreCase).Count;
if (occurence > 1) {
results[pattern] = occurence;
}
}
return results;
}
static void Main(string[] args) {
Dictionary<string, int> result = FindPatterns("asdxgkeopgkajdflkjbpoijadadafhjkafikeoadkjhadfkjhocihakeo");
foreach (KeyValuePair<string, int> res in result.OrderByDescending(r => r.Value)) {
Console.WriteLine("Pattern:" + res.Key + " occurence:" + res.Value.ToString());
}
Console.Read();
}
El algoritmo constan de 2 etapas.
- Elija patrón
- patrón de descubrimiento en cadena de entrada (algoritmo de coincidencia de patrones )
Se utiliza expresiones regulares para la coincidencia de patrones. Hay otros algoritmos más avanzados. Estos algoritmos se dan de alta en la dirección de http://www-igm.univ-mlv.fr/~lecroq/string/ Sin embargo, ejemplos de código están escritos en C. También se tomaría un vistazo en Boyer-Moore algorithm de coincidencia de patrones, escrito en C#
Creo que esto es una especie de método de fuerza bruta. ¿Hay algoritmos para hacer esto usando programación dinámica o algún otro método? –
Sí, es el método de fuerza bruta. Expandí mi respuesta. –
Gracias por la ayuda –
Pseudocódigo:
For N=1 to InputString.Length-1
rotatedString = RotateStringByN(InputString,N)
For N=0 to InputString.Length-1
StringResult[N] = if (rotatedString[N]==InputString[N]) then
InputString[N]
else
Convert.ToChar(0x0).ToString()
RepeatedStrings[] = String.Split(StringResult, Convert.ToChar(0x0).ToString())
SaveLongestStringFrom(RepeatedStrings)
O ... solo mira aquí en SO thread para otras soluciones.
- 1. algoritmo para encontrar la mejor combinación
- 2. Mejor algoritmo para encontrar los bordes (polígono) de los vértices
- 3. Algoritmo para encontrar rectángulos
- 4. ¿el mejor algoritmo para el intercambio?
- 5. El mejor algoritmo para ordenar los exámenes
- 6. Mejor patrón para AllowUnsafeUpdates
- 7. Algoritmo para encontrar grupos óptimos
- 8. Encontrar un algoritmo para equilibrar este juego
- 9. Algoritmo para encontrar simetrías de un árbol
- 10. Un algoritmo para encontrar ediciones comunes
- 11. El mejor algoritmo para unir colores.
- 12. ¿La mejor práctica para el patrón DAO?
- 13. Algoritmo para encontrar puntos cercanos?
- 14. Algoritmo para encontrar subconjuntos comunes
- 15. Algoritmo para encontrar el agujero en un gráfico infinito unidimensional
- 16. Mejor algoritmo para indexar oraciones
- 17. La mejor manera de encontrar un patrón específico en una matriz 2D
- 18. Algoritmo para encontrar píxeles muertos en Javascript
- 19. ¿Qué es un algoritmo rápido para encontrar nodos críticos?
- 20. ¿Cómo encontrar los mejores parámetros para un algoritmo genético?
- 21. Algoritmo para encontrar jugadores buenos y confiables
- 22. 'Mejor' Algoritmo Diff
- 23. MVC Reducir el código repetitivo
- 24. Mejor lógica/algoritmo para colorear imágenes
- 25. Algoritmo Bron-Kerbosch para clique encontrar
- 26. Algoritmo rápido para encontrar números primos?
- 27. Algoritmo para encontrar intersecciones entre polilíneas
- 28. algoritmo para encontrar las líneas de horquillado un punto
- 29. Algoritmo para encontrar una región pintada en un lienzo
- 30. ¿Qué es un algoritmo ordenado para encontrar intervalos superpuestos?
Deberás ser más específico. Tal vez dar algunos ejemplos. Además, ¿ya has hecho alguna investigación? Si es así, cuéntanos qué has encontrado. –
¿Es específico del lenguaje? – Fraser
puede construir un diccionario, como lo hacen los algoritmos de compresión de datos sin pérdida. Ver por ejemplo http://en.wikipedia.org/wiki/Dictionary_coder –