En la teoría de información y el de informática, la distancia de Levenshtein del es una secuencia métrico que es unidireccional medir el corrige la distancia . La distancia de Levenshtein entre dos secuencias es dada por el número mínimo de operaciones necesarias para transformar una secuencia en la otra, donde está una inserción, una canceladura, o una substitución una operación de un solo carácter. Se nombra después Vladimir Levenshtein, que consideraba esta distancia en el 1965 . Es útil en los usos que necesitan determinar cómo son las dos secuencias similares, por ejemplo los inspectores del encanto

Por ejemplo, la distancia de Levenshtein entre el " kitten" y " sitting" es 3, puesto que estos tres corrige el cambio uno en el otro, y no hay manera de hacerla con menos de tres corrige: el → del gatito del

sitten (substitución de “s” para “k ") el

  • sitten el
  • del sittin del → (substitución del “mí” para “e ") sentada del → del sittin (parte movible “g” en el extremo)

    Puede ser considerado una generalización de la distancia de Hamming, que se utiliza para las secuencias de la misma longitud y considera solamente la substitución corrige. Hay también otras generalizaciones de la distancia de Levenshtein que consideran, por ejemplo, intercambiar dos carácteres como operación, como en el algoritmo de la distancia de Damerau-Levenshtein.

    El algoritmo

    Un algoritmo ascendente de uso general de la programación dinámica para computar la distancia de Levenshtein implica el uso del (n + 1) × (m + 1) matriz, donde están las longitudes n y m de las dos secuencias. Este algoritmo se basa en el algoritmo de Wagner-Fischer para corrige distancia. Aquí está el Pseudocode para un LevenshteinDistance de la función que tome dos secuencias, s del m de la longitud, y del t del n de la longitud, y computa la distancia de Levenshtein entre ellos:

    internacional LevenshteinDistance (carbón de leña del s, carbón de leña del t) el // d es una tabla con las filas m+1 y n+1 las columnas el declara el internacional }.n de para el de i del de 0 a m }: = i para el de j del de 1 a n d j: = j para el de i del de 1 a m para el de j del de 1 a n si el entonces de s = de t costó: = 0 el otro costó: = 1 d j: = mínimo ( d j + 1, canceladura de // del d j-1 + 1, inserción de // del d j-1 + substitución costada de // del ) de vuelta d n

    Dos ejemplos de la matriz resultante (los pasos mínimos que se tomarán se destacan):

    Prueba de la corrección

    Según lo mencionado anterior, el invariante es que podemos transformar el segmento inicial s en t usar un mínimo de operaciones de d. Este asimientos invariantes desde entonces:
    Es inicialmente verdad en la fila y la columna 0 porque s se puede transformar en la secuencia vacía t simplemente cayendo todos los carácteres de i. Semejantemente, podemos transformar s a t simplemente agregando todos los carácteres de j.
    El mínimo se asume el control tres distancias, que es factible:
  • Si podemos transformar s a t en operaciones de k, después podemos agregar simplemente t luego para conseguir t en operaciones de k+1.
    Si podemos transformar s a t en operaciones de k, después podemos hacer las mismas operaciones en s y después quitar el s original en el extremo en operaciones de k+1.
    Si podemos transformar s a t en operaciones de k, podemos hacer iguales a s y después hacer una substitución de t para el s original en el extremo en caso de necesidad, requiriendo operaciones de k+cost.
    Las operaciones requeridas para transformar s en t son por supuesto el número requerido para transformar todo el s en todo el t, y así que d celebra nuestro resultado.

    Esta prueba no puede validar que el número puesto en d es de hecho mínimo; esto es más difícil de demostrar, e implica una discusión por la contradicción en la cual asumimos que d es más pequeño que el mínimo de los tres, y utilizar esto para demostrar uno de los tres no es mínimo.

    Mejoras posibles

    Las mejoras posibles a este algoritmo incluyen:
    Podemos adaptar el algoritmo para utilizar menos espacio, '' O '' ( m ) en vez del O (manganeso del ), puesto que requiere solamente que la fila anterior y la fila actual estén almacenadas a cualquier momento.
    Podemos almacenar el número de inserciones, las canceladuras, y las substituciones por separado, u ocurren las posiciones en las cuales ellas, que es siempre j.
    Podemos normalizar la distancia al intervalo .
    Si estamos solamente interesados en la distancia si es más pequeña que un k del umbral, después es suficiente computar una raya diagonal del 2k+1 de la anchura en la matriz. De esta manera, el algoritmo se puede funcionar con en tiempo '' de '' O ( kilolitro ), donde está la longitud el l de la secuencia más corta.
    Podemos dar diversos costes de la pena a la inserción, a la canceladura y a la substitución. Podemos también dar los costes de la pena que dependen se insertan, se suprimen o se substituyen de qué carácteres.
    La inicialización de d se puede mover dentro del lazo externo principal.
    Inicializando la primera fila de la matriz con el 0, el algoritmo se puede utilizar para la búsqueda de secuencia borrosa de una secuencia en un texto. Esta modificación da la fin-posición de las subsecuencias que emparejan del texto. Para determinar la empezar-posición de las subsecuencias que emparejan, el número de inserciones y las canceladuras se pueden almacenar por separado y utilizar para computar la empezar-posición de la fin-posición
    Este del algoritmo hace parelelismo mal, debido a una gran cantidad de dependencias de los datos. Sin embargo, todos los valores de cost se pueden computar paralelamente, y el algoritmo se puede adaptar para realizar la función de minimum en fases para eliminar dependencias.
    Examinando diagonales en vez de filas, y usando la evaluación perezosa, podemos encontrar la distancia de Levenshtein en el O ( m (1 + el d )) tiempo (donde está la distancia el d de Levenshtein), que es mucho más rápido que el algoritmo regular de la programación dinámica si la distancia es pequeña.

    Límites superiores y más bajos

    La distancia de Levenshtein tiene varios límites superiores y más bajos simples que sean útiles en los usos que computan muchos de ellos y los comparan. Éstos incluyen:

    es siempre por lo menos la diferencia de los tamaños de las dos secuencias.
    Es a lo más la longitud de la secuencia más larga.
    Es cero si y solamente si las secuencias son idénticas.
    Si las secuencias son los mismos tamaños, la distancia de Hamming es un límite superior en la distancia de Levenshtein.
    Si las secuencias se llaman s y t, el número de carácteres (que no cuentan los duplicados) encontró en s pero no en t es un límite más bajo.

    Ver también

    style=" del class= del
    Agrep
    Algoritmo de Bitap
    Distancia de Damerau-Levenshtein
    Diff
    Tiempo dinámico que comba
    Secuencia borrosa que busca
    Distancia de Hamming
    Peso de Hamming
    Índice de Jaccard
    Distancia de Jaro-Winkler
    Autómata de Levenshtein
    El problema común más largo del subsequence
    Lucene (un Search Engine de la fuente abierta que los instrumentos corrigen distancia.)
    Distancia de Manhattan
    Espacio métrico
    Algoritmo de Needleman-Wunsch
    Semejanza (matemáticas)
    Espacio de la semejanza en la taxonomía numérica
    Algoritmo del Smith-Barquero
    Índice de la semejanza de Sørensen

    .

  • Zenithic
  • Niederaussem
    Random links:Akna | Bruegel | Roberto Whitehead | Zhan Videnov | Sydney Smith (desambiguación)

  • © 2007-2008 enciclopediaespana.com; article text available under the terms of GFDL, from en.wikipedia.org
    ="http://pagead2.googlesyndication.com/pagead/show_ads.js">