[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