[C con Clase] ayuda de nuevo

Steven Davidson srd4121 en njit.edu
Lun Feb 22 23:53:27 CET 2010


Hola Pantare,

Pantare The DreamMaker wrote:
> 
> 
> Mi siguiente dude es la siguiente
> 
> tengo los siguientes valores
> 
> abc<-----Principal
> 
> y tengo que compararlo con 
> 
> (abc)(abc)(abc)
> 
> pero de este hay 27 combinaciones posibles eso lo saque manualmente
> pero no puedo hacerlo mediante el programa que este haga las 27
> combinaciones para compararlas con el primer "abc" y sacar despues
> las veces que coinciden con ese primer "abc" llevo dias rompiendome
> la cabeza en ello
> 

Según lo que dices, entiendo que quieres buscar un patrón de valores, 
posiblemente una cadena de caracteres, dentro de una serie de valores 
(posiblemente caracteres). Sin embargo, la búsqueda de este patrón puede 
tener diferentes ordenamientos. Todos los posibles ordenamientos son 
válidos, y por tanto estamos ante un problema de combinatoria - 
permutaciones, para ser más exacto.

Podríamos crear un programa o mejor dicho una función que genere cada 
permutación para que puedas buscar la permutación del patrón en la serie 
de valores. Sin embargo, esto puede resultar bastante ineficiente. Si te 
interesa, puedes consultar el ejemplo del capítulo 24 (Recursividad) de 
nuestro curso de C++. El enlace es: 
http://c.conclase.net/curso/index.php?cap=024#inicio

Una mejor solución es comparar cada valor del patrón con cada uno en la 
serie. Si tenemos un acierto, entonces miramos el siguiente valor de la 
serie en busca de otro "miembro" del patrón y así sucesivamente hasta 
que terminemos, o hasta que nos encontremos con un valor que no 
pertenece al patrón. Por ejemplo,

Patrón: "abc"
Serie: "accbaeakdoap"

La lógica es la siguiente:

¿ Patrón[0] == Serie[0] ?  =>  ¿ 'a' == 'a' ? => Sí
Patrón: "bc"
¿ Patrón[0] == Serie[1] ?  =>  ¿ 'b' == 'c' ? => No
¿ Patrón[1] == Serie[1] ?  =>  ¿ 'c' == 'c' ? => Sí
Patrón: "b"
¿ Patrón[0] == Serie[2] ?  =>  ¿ 'c' == 'b' ? => No

No hay un patrón en esta "sesión" de comparativas. Volvemos a empezar 
con la subcadena del siguiente carácter: Serie[1].

Patrón: "abc"
¿ Patrón[0] == Serie[1] ?  =>  ¿ 'a' == 'c' ? => No
¿ Patrón[1] == Serie[1] ?  =>  ¿ 'b' == 'c' ? => No
¿ Patrón[2] == Serie[1] ?  =>  ¿ 'c' == 'c' ? => Sí
Patrón: "ab"
¿ Patrón[0] == Serie[2] ?  =>  ¿ 'a' == 'c' ? => No
¿ Patrón[1] == Serie[2] ?  =>  ¿ 'a' == 'c' ? => No

No hay un patrón en esta "sesión" de comparativas. Volvemos a empezar 
con la subcadena del siguiente carácter: Serie[2].

Patrón: "abc"
¿ Patrón[0] == Serie[2] ?  =>  ¿ 'a' == 'c' ? => No
¿ Patrón[1] == Serie[2] ?  =>  ¿ 'b' == 'c' ? => No
¿ Patrón[2] == Serie[2] ?  =>  ¿ 'c' == 'c' ? => Sí
Patrón: "ab"
¿ Patrón[0] == Serie[3] ?  =>  ¿ 'a' == 'b' ? => No
¿ Patrón[1] == Serie[3] ?  =>  ¿ 'b' == 'b' ? => Sí
Patrón: "a"
¿ Patrón[0] == Serie[4] ?  =>  ¿ 'a' == 'a' ? => Sí

Hemos encontrado nuestro patrón en esta "sesión" de comparativas. 
Seguimos con la siguiente subcadena: Serie[5].

Patrón: "abc"
¿ Patrón[0] == Serie[5] ?  =>  ¿ 'a' == 'e' ? => No
¿ Patrón[1] == Serie[5] ?  =>  ¿ 'b' == 'e' ? => No
¿ Patrón[2] == Serie[5] ?  =>  ¿ 'c' == 'e' ? => No

No hay un patrón en esta "sesión" de comparativas. Volvemos a empezar 
con la subcadena del siguiente carácter.

Y así sucesivamente.

Básicamente, vamos comparando carácter por carácter aplicando ciertos 
criterios para determinar si un patrón existe o no.


Espero que esto te oriente.

Steven





Más información sobre la lista de distribución Cconclase