[pyar] [JUEGO] Búsqueda de strings
Roberto Alsina
ralsina en netmanagers.com.ar
Lun Mayo 5 07:32:22 ART 2014
Lo movemos a optimizacion-prematura en python.org.ar? Tiene un alias
la-raiz-de-todos-los-males en python.org.ar ;-)
On 03/05/14 06:10, Angel Java Lopez wrote:
> Jajaja! Alguna vez tenia que aparece Boyer-Moore ;-)
>
> #soytanviejo que vi nacer a ese algoritmo. Debio aparecer en mi radar
> en alguna Scientific American de los ochenta. Eramos tan pobres. ... ;-)
>
> No sabia que CPython se habia tomado la molestia de implementar todo
> eso, buen dato!
>
> Ahora bien, sea S lo que buscamos. Lo que yo haria es que a cada S
> distinta, le asignaria un numero natural distinto
>
> f(S) = n
>
> Para cada elemento de L, L[i], prepararia una sarta de bits. El bit n
> estaria prendido, si el S correspondiente a ese n (los S tales que
> f(S) = n) esta contenido en L[i]. (bien podriamos poner que S =
> "com", S = "Com", S = "COM", ... todos den el mismo n)
>
> Luego, ante cada S que se presente, calcularia f(S) = n
> Y me fijaria en cada L[i] si su sarta de bits tiene el n bit prendido
>
> Me imagino que lo de arriba es O(n) (dependiente de la longitud L,
> llamemosla n, como en los anteriores corroes, pero no dependiente de
> m, la maxima longitud de los L[i])
>
> Si no quiero llegar a esos extremos... .hmmm... recuerdo algo que
> implemente a principio de los ochenta, antes de la guerra de las
> Malvinas, aca en Argentina.
>
> Varias variantes. Primero la sencilla. A cada letra del alfabeto que
> estemos usando, le asignamos el numero n, distinto para cada letra que
> consideramos distinta. Por cada L[i], mantengo una serie de bits. El
> bit n esta prendido si la letra A correspondiente a n, esta en L[i]
> (uno a varias veces). Luego, por cada S que se presente, calculo la
> sarta de bits que le corresponde (que letras contiene). Hago AND
> logico de esa sarta de bits con los de cada L[i]. Solo me mato
> haciendo el "in" en los L[i] que tengan todos los bits de S
>
> Segundo, en vez de bits por letra, tener un lugar que diga: la
> cantidad de veces que esta esta letra en el texto T. Idem que antes
>
> Tercera, la que implemente en los ochenta: tener bits de presencia de
> letras por cada subsarta de L[i]. Digamos, tengo bits de presencia de
> letras para los caracteres 0 a 15 de L[i], de 8 a 23, de 16 a 31,
> etc... Por cada S que se presenta, calculo su presencia de letras. Si
> S tiene longitud <= 16, solo busco en las subsartas de L[i]
> CONSECUTIVAS que entre ambas tengan todas las letras de S, o en las
> subsartas de L[i] que tengan todas las letras de S (algunos ajustes,
> pero es la idea). Si S tiene longitud <= 32, se modifica un poco, y asi
>
> Creo recordar que esta tercera variante es la que implemente para una
> especie de full-text search de entrecasa de aquel entonces. El tener
> un bit prendido o apagado en una sarta larguisima, debio ser sugerido
> por el numero omega del bueno de Chaitin (al que finalmente conoci
> personalmente en MathBA 2009)
>
> Nos leemos!
>
> Angel "Java" Lopez
> @ajlopez
>
>
>
> 2014-05-02 17:18 GMT-03:00 Alejandro Santos <listas en alejolp.com
> <mailto:listas en alejolp.com>>:
>
> 2014-05-02 20:59 GMT+02:00 Natalia Bidart <nataliabidart en gmail.com
> <mailto:nataliabidart en gmail.com>>:
> > 2014-05-02 15:16 GMT-03:00 fisa <fisadev en gmail.com
> <mailto:fisadev en gmail.com>>:
> >
> >> Buen punto, tomé el in como una operación más básica de lo que es.
> >>
> >> Sería un O(n . O-del-in), no?
> >
> > Esto está muy interesante, es exactamente la pregunta de la
> complejidad del
> > "in" para strings en Python:
> >
> >
> http://stackoverflow.com/questions/18139660/python-string-in-operator-implementation-algorithm-and-time-complexity
> >
>
> Ya casi lo bajaste a O(n) :)
>
>
>
> _______________________________________________
> pyar mailing list pyar en python.org.ar
> http://listas.python.org.ar/listinfo/pyar
>
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de Argentina - http://www.usla.org.ar
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20140505/a4efff25/attachment.html>
More information about the pyar
mailing list