Académique Documents
Professionnel Documents
Culture Documents
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
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
Otro ejemplo:
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:
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 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
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
Supongamos que :
cadena de caracteres
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:
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:
usar el algoritmo para encontrar la Z-funcin : pre-clculo de la Z-funcin en lnea (es decir, lneas , escritas en orden inverso).
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,
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
Imagen
Mostrando 0 comentarios
Ordenar por Popular hoy Suscribirse por E-mail Suscribirse por RSS
e-maxx.ru/algo/string_tandems
5/5