Vous êtes sur la page 1sur 5

08/08/12

Mxima :: algoritmos :: Buscar en todas las repeticiones en tndem en un algoritmo de cadena de Main

M xi m a
c as a A lgo book z foro s obre
Publicado: 06 de septiembre 2011 01:03 Editado: 11 de febrero 2012 15:03

Buscar todas las repeticiones en tndem en una fila. El algoritmo de Maine-Lorentz


Dada una cadena de longitud . Tandem repeticin (repeticin en tndem) se refiri a dos apariciones de una subcadena en una fila. En otras palabras, la repeticin en tndem descrito por un par de ndices de tal manera que la subcadena - stos son dos lneas idnticas, escritas en una fila. El desafo consiste en encontrar todas las repeticiones en tndem . Versiones simplificadas de este problema: encontrar a cualquier repeticin en tndem, o para encontrar la ms larga de repeticiones en tndem. Tenga en cuenta . Para evitar confusiones, todas las lneas en el papel, se asume un 0-indexado, es decir, el primer carcter tiene 0 ndice. El algoritmo descrito aqu fue publicado en 1982, Maine y Lorenz (vase la bibliografa).
Ejemplo

Contenido [ocultar]
Buscar todas las repeticiones en tndem en una fila. algoritmo de Maine-Lorentz

El nmero de repeticiones en tndem El algoritmo de Maine-Lorentz Bsqueda para el cruce de las repeticiones en tndem Derecha e izquierda repeticiones en tndem La posicin central de la tndem Un criterio para determinar la presencia de una repeticin en tndem con un centro dado El algoritmo para encontrar las longitudes Encuentra las repeticiones en tndem de la derecha Asymptotics repeticin en

Ejemplo
Consideremos el ejemplo de repeticiones en tndem de una cuerda simple, por ejemplo:

Ejecucin Literatura

Esta lnea contiene las repeticiones en tndem siguientes:

Otro ejemplo:

Hay slo dos repeticiones en tndem:

El nmero de repeticiones en tndem


En general, las repeticiones en tndem de una cadena de longitud puede ser del orden . Un ejemplo obvio es una cadena compuesta de cartas idnticas - en una lnea de repeticiones en tndem es cualquier subcadena de longitud par, que a grandes rasgos . En general, cualquier lnea peridica con un perodo corto tendr una gran cantidad de repeticiones en tndem Por otro lado, por s mismo, este hecho no excluye la existencia de la conducta asinttica del algoritmo repeticiones en tndem en algunos grupos forma comprimida de varias piezas a la vez. , ya que el algoritmo puede producir

Por otra parte, existe el concepto de la serie - Los nmeros de cudruple que describen un grupo de subcadenas recurrentes. Se ha demostrado que el nmero de franquicias en cualquier lnea es lineal con respecto a la longitud de la cadena. Sin embargo, el algoritmo se describe a continuacin no utiliza el concepto de la serie, as que no voy a detallar este concepto. Aqu tienes algunos resultados interesantes de otros relacionados con el nmero de repeticiones en tndem: Sabemos que si tenemos en cuenta slo las repeticiones en tndem (es decir, primitivas, esas mitades que no son mltiplos de cuerdas), su nmero en una fila . Si codifica repeticiones en tndem ternas de nmeros (llamados triples Krochemora (Crochemore)) (donde - posicin inicial, - la longitud de la subcadena repetir - el nmero de repeticiones), todas las repeticiones en tndem de cualquier lnea se puede derivar con la ayuda de triples tales. (Este es el resultado obtenido en la salida del algoritmo C para encontrar todas las repeticiones en tndem.) Fibostrings definen como sigue:

son "fuertemente" peridica.

e-maxx.ru/algo/string_tandems

1/5

08/08/12

Mxima :: algoritmos :: Buscar en todas las repeticiones en tndem en un algoritmo de cadena de Main son "fuertemente" peridica. El nmero de repeticiones en tndem en la primera lnea de la longitud de Fibonacci . , incluso comprimido con triples Krochemora es .

El nmero de repeticiones en tndem primitivas en las cadenas de Fibonacci - tambin de la orden

El algoritmo de Maine-Lorentz
La idea del algoritmo de Maine y de Lorentz es bastante estndar: la capacidad de "divide y vencers" . Brevemente consiste en el hecho de que la cadena de origen se divide por la mitad, para ejecutar la decisin de cada una de las dos mitades por separado (y por tanto se encuentran todas las repeticiones en tndem, que se encuentran slo en la primera o slo en la segunda mitad). Luego viene la parte difcil - es encontrar repeticiones en tndem, a partir de la primera mitad y termin en el segundo (que llamamos estas repeticiones en tndem para la comodidad de cruce ). Exactamente cmo se hace esto - y no es la esencia misma del algoritmo de Maine y Lorenz, y esto vamos a describir en detalle a continuacin. Comportamiento asinttico del algoritmo de "divide y vencers" se entiende bien. En particular, es importante para nosotros que si aprendemos a buscar repeticiones en tndem transversales en una cadena de longitud uno , el comportamiento asinttico del algoritmo resultante se obtiene

Bsqueda para el cruce de las repeticiones en tndem


Por lo tanto, el algoritmo de Maine y de Lorentz se reduca a que para una lnea determinada para aprender a buscar todas las repeticiones en tndem cruzadas, es decir, aquellas que comienzan en la primera mitad de la lnea, y al final - en el segundo. Se designa por y las dos mitades de la lnea :

(Aproximadamente igual a la longitud de la cadena de longitud , dividido por la mitad).

Derecha e izquierda repeticiones en tndem


Considere la posibilidad de una repeticin en tndem arbitraria y mirar en su carcter de medio (ms precisamente, sobre el carcter que se inicia la segunda mitad del tndem, es decir, si la repeticin en tndem - esta es la subcadena , el personaje central es . A continuacin, llama la repeticin en tndem hacia la izquierda o la derecha dependiendo de donde este personaje - en una fila o lnea . (Se puede decir esto: la izquierda se llama una repeticin en tndem, si la mayor parte de sta se encuentra en la mitad izquierda de la lnea , de lo contrario repeticin en tndem que se llama un derecho.) Aprenda a buscar todas las repeticiones en tndem de la izquierda , todo estar bien para el mismo.

La posicin central de la

repeticin en tndem

Se denota la longitud de la repeticin en tndem deseado sobrante (es decir, la longitud de cada medio de una repeticin en tndem - es ). Considere el primer carcter de una repeticin en tndem, ponerse en la fila (que estaba de pie en lnea en la posicin ). Coincide con la posicin de carcter en la posicin antes de l, y se denota esta posicin . Buscar todas las repeticiones en tndem, vamos, vamos esta posicin , es decir, encontramos por primera vez todas las repeticiones en tndem con un nico valor , y luego con otro valor, etc - Pasando por todos los posibles valores de hasta . Por ejemplo , considere la siguiente lnea:

(El carcter de canalizacin separa las dos mitades , y ) Repeticiones en tndem que figura en esta lnea ser detectado cuando vemos que el valor 'A', coincidiendo con el primer carcter de una repeticin en tndem, se meti en el medio . - ya que est en la posicin de el smbolo

Un criterio para determinar la presencia de una repeticin en tndem con un centro dado
Por lo tanto, tenemos que aprender a valor fijo acelera la bsqueda de todas las repeticiones en tndem, lo que corresponde a la misma. ):

Tenemos un plan (para una lnea abstracta, que contiene una repeticin en tndem

Aqu, a travs , y hemos denotado la longitud de una repeticin en tndem de dos piezas: - la longitud de la repeticin en tndem a la posicin , y - la longitud de la repeticin en tndem de la final de media una repeticin en tndem. Por lo tanto, - la longitud de la repeticin en tndem.

e-maxx.ru/algo/string_tandems

2/5

08/08/12

Mxima :: algoritmos :: Buscar en todas las repeticiones en tndem en un algoritmo de cadena de Main repeticin en tndem. En cuanto a esta imagen, se puede ver que una condicin necesaria y suficiente condicin para una posicin de centro tndem de longitud , es la siguiente condicin: Supongamos que caracteres : - es el nmero ms grande de manera que la posicin de los caracteres antes del es una repeticin en cadenas de

partido con las ltimas

Supongamos que :

- es el mayor nmero de tal manera que los

caracteres a partir posicin

coincide con la primera

cadena de caracteres

Entonces debe ser satisfecha:

Este criterio puede ser reformulada de esta manera. Fijar un valor particular Todas las repeticiones en tndem, que ahora descubrir, tienen una longitud

, entonces: . .

Sin embargo, estas repeticiones en tndem puede ser ms : todo depende de la eleccin de las longitudes de las piezas , y Encontramos y , como se describi anteriormente.

Luego sern las repeticiones en tndem apropiadas, para el cual la longitud de las piezas , y satisfacer las siguientes condiciones:

El algoritmo para encontrar las longitudes

y
,y para cada valor .

As, todo el problema se reduce a la computacin rpida de las longitudes Recordamos sus definiciones: - El mximo entero no negativo para el cual se sostiene:

- El mximo entero no negativo para el cual se sostiene:

A peticin puede ser responsable de

usar el algoritmo para encontrar la Z-funcin : pre-clculo de la Z-funcin en lnea (es decir, lneas , escritas en orden inverso).

Para encontrar rpidamente los valores de la Entonces, el valor para un particular,

es simplemente igual al valor correspondiente de la matriz Z funcin. pre-clculo de la Z-funcin en lnea (la lnea, es decir , que se atribuye a la lnea a

Para encontrar rpidamente los valores de la travs del carcter de separacin). Nuevamente, el valor para un particular,

necesidad de tener slo el elemento correspondiente de la Z-funcin.

Encuentra las repeticiones en tndem de la derecha


Hasta este momento slo hemos trabajado con las repeticiones en tndem de izquierda. Para encontrar las repeticiones en tndem derecho, acta de la misma manera: se define el centro carcter de una repeticin en tndem, que se meti en la primera fila. como un smbolo que corresponde al ltimo

A continuacin, la longitud se determina como el mayor nmero de caracteres a la posicin , ambos inclusive, coincidiendo con el ltimo carcter La longitud se determina como el nmero mximo de caracteres, desde coincidiendo con el primer carcter . As, para una rpida y tendr que calcular de antemano una funcin de Z-lneas y , respectivamente. Despus de eso, va sobre un valor especfico , estamos en los mismos criterios que encontrar todas las repeticiones en tndem de la derecha.

Asymptotics
Algoritmo de Asmiptotika ser de Lorentz-Maine, por lo tanto : ya que el algoritmo es un algoritmo de "divide y vencers", cada una de ellas opera de forma recursiva se ejecutan en un tiempo lineal en la longitud de la cadena: de cuatro lneas en el tiempo lineal tratado de Z-funcin , y luego se mueve el valor y muestra todas las repeticiones en tndem detectados. Repeticiones en tndem son detectados por el algoritmo en forma de Maine-Lorentz distintivos grupos : los quads , cada una de las cuales representa a un grupo de repeticiones en tndem con la longitud de el centro y con todo tipo de longitudes de las piezas y que cumplan las condiciones siguientes:

e-maxx.ru/algo/string_tandems

3/5

08/08/12

Mxima :: algoritmos :: Buscar en todas las repeticiones en tndem en un algoritmo de cadena de Main

Ejecucin
Se presenta la implementacin del algoritmo de Maine y de Lorentz, que por el momento formato comprimido (como grupo, descrito por cuatro nmeros). A fin de demostrar las repeticiones en tndem que se encuentran en el tiempo "aflojar" y se muestra por separado. Esta conclusin est en la solucin de problemas del mundo real puede ser fcilmente sustituido por otras acciones ms eficaces, por ejemplo, la bsqueda de repeticiones en tndem naidlinneyshego o contando el nmero de repeticiones en tndem. v e c t o r < i n t >z _ f u n c t i o n( c o n s ts t r i n g&s ){ i n tn=( i n t )s . l e n g t h ( ) ; v e c t o r < i n t >z( n ) ; f o r( i n ti = 1 ,l = 0 ,r = 0 ;i < n ;+ + i ){ i f( i< =r ) z [ i ]=m i n( r i + 1 ,z [ i l ] ) ; w h i l e( i + z [ i ]<n& &s [ z [ i ] ]= =s [ i + z [ i ] ] ) + + z [ i ] ; i f( i + z [ i ] 1>r ) l=i , r=i + z [ i ] 1 ; } r e t u r nz ; } v o i do u t p u t _ t a n d e m( c o n s ts t r i n g&s ,i n ts h i f t ,b o o ll e f t ,i n tc n t r ,i n tl ,i n tl 1 ,i n tl 2 ){ i n tp o s ; i f( l e f t ) p o s=c n t r l 1 ; e l s e p o s=c n t r l 1 l 2 l 1 + 1 ; c o u t< <" [ "< <s h i f t+p o s< <" . . "< <s h i f t+p o s + 2 * l 1< <" ]="< <s . s u b s t r( p o s ,2 * l )< <e n d l } v o i do u t p u t _ t a n d e m s( c o n s ts t r i n g&s ,i n ts h i f t ,b o o ll e f t ,i n tc n t r ,i n tl ,i n tk 1 ,i n tk 2 ){ f o r( i n tl 1 = 1 ;l 1 < = l ;+ + l 1 ){ i f( l e f t& &l 1= =l ) b r e a k ; i f( l 1< =k 1& &l l 1< =k 2 ) o u t p u t _ t a n d e m( s ,s h i f t ,l e f t ,c n t r ,l ,l 1 ,l l 1 ) ; } } i n l i n ei n tg e t _ z( c o n s tv e c t o r < i n t >&z ,i n ti ){ r e t u r n0 < = i& &i < ( i n t ) z . s i z e ( )?z [ i ]:0 ; } v o i df i n d _ t a n d e m s( s t r i n gs ,i n ts h i f t=0 ){ i n tn=( i n t )s . l e n g t h ( ) ; i f( n= =1 ) r e t u r n ; i n tn u=n / 2 , n v=n n u ; s t r i n gu=s . s u b s t r( 0 ,n u ) , v=s . s u b s t r( n u ) ; s t r i n gr u=s t r i n g( u . r b e g i n ( ) ,u . r e n d ( ) ) , r v=s t r i n g( v . r b e g i n ( ) ,v . r e n d ( ) ) ; f i n d _ t a n d e m s( u ,s h i f t ) ; f i n d _ t a n d e m s( v ,s h i f t+n u ) ; v e c t o r < i n t >z 1=z _ f u n c t i o n( r u ) , z 2=z _ f u n c t i o n( v+' # '+u ) , z 3=z _ f u n c t i o n( r u+' # '+r v ) , z 4=z _ f u n c t i o n( v ) ; f o r( i n tc n t r = 0 ;c n t r < n ;+ + c n t r ){ i n tl ,k 1 ,k 2 ; i f( c n t r<n u ){ l=n u-c n t r ; k 1=g e t _ z( z 1 ,n u c n t r ) ; k 2=g e t _ z( z 2 ,n v + 1 + c n t r ) ; } e l s e{ l=c n t r-n u+1 ; k 1=g e t _ z( z 3 ,n u + 1+n v 1 ( c n t r n u ) ) ; se encuentra todo el tndem repite esta lnea en un

e-maxx.ru/algo/string_tandems

4/5

08/08/12

Mxima :: algoritmos :: Buscar en todas las repeticiones en tndem en un algoritmo de cadena de Main k 1=g e t _ z( z 3 ,n u + 1+n v 1 ( c n t r n u ) ) ; k 2=g e t _ z( z 4 ,( c n t r n u ) + 1 ) ; } i f( k 1+k 2> =l ) o u t p u t _ t a n d e m s( s ,s h i f t ,c n t r < n u ,c n t r ,l ,k 1 ,k 2 ) ; }

Literatura
Michael Mayor, Richard J. Lorentz. una operacin O (n log n) algoritmo para encontrar todas las repeticiones de una cadena [1982] Bill Smyth. Patrones de Informtica en las cadenas [de 2003] Bill Smith. mtodos y algoritmos de clculos en las cadenas [de 2006]

Como

1 persona ha gustado este.

Aadir nuevo comentario


Type your comment here.

Imagen

Publicar como ...

Mostrando 0 comentarios
Ordenar por Popular hoy Suscribirse por E-mail Suscribirse por RSS

e-maxx.ru/algo/string_tandems

5/5

Vous aimerez peut-être aussi