Algoritmo de salto de línea Knuth-PlassProyectos de artículos

Artículos preliminares
Anonymous
 Algoritmo de salto de línea Knuth-Plass

Post by Anonymous »

El algoritmo Knuth-Plass es un algoritmo de salto de línea (Ajuste de línea y ajuste de palabra) diseñado para su uso en el programa de composición tipográfica TeX de Donald Knuth. Integra los problemas de justificación y separación de palabras del texto en un único algoritmo mediante el uso de un método de programación dinámica discreta para minimizar una función de pérdida que intenta describir las cualidades estéticas deseadas en el resultado final.
El algoritmo funciona dividiendo el texto en una secuencia de tres tipos de objetos: "cuadros", que son fragmentos de contenido que no se pueden cambiar de tamaño, "pegamento", que son elementos flexibles y de tamaño variable, y "penalizaciones". , que representan lugares donde la rotura no es deseable (o, si es negativa, deseable).

El algoritmo original de Knuth y Plass no incluye saltos de página, pero puede modificarse para interactuar con un algoritmo de salto de páginas.

== El algoritmo ==

Para el texto de entrada

AAA BB CC DDDDD

con un ancho de línea 6, el algoritmo codicioso produciría:

------ Ancho de línea: 6
AAA BB Espacio restante: 0
CC Espacio restante: 4
DDDDD Espacio restante: 1

La suma del espacio al cuadrado que queda con este método es 0^2 + 4^2 + 1^2 = 17. Sin embargo, la solución óptima logra la suma menor 3^2 + 1^2 + 1^2 = 11:

------ Ancho de línea: 6
AAA Espacio restante: 3
BB CC Espacio restante: 1
DDDDD Espacio restante: 1

La diferencia aquí es que la primera línea está dividida antes de BB en lugar de después, lo que produce un mejor margen derecho y un costo menor 11.

Al utilizar un algoritmo de programación dinámica para elegir las posiciones en las que romper la línea, en lugar de elegir los saltos con avidez, la solución con una irregularidad mínima se puede encontrar en el tiempo O(n^2), donde n es el número de palabras en el texto de entrada. Normalmente, la función de costo de esta técnica debe modificarse para que no cuente el espacio que queda en la última línea de un párrafo; esta modificación permite que un párrafo termine en medio de una línea sin penalización. También es posible aplicar la misma técnica de programación dinámica para minimizar funciones de costos más complejas que combinan otros factores como el número de líneas o los costos de separación de palabras largas. .

* [http://www.eprg.org/G53DOC/pdfs/knuth-p ... eaking.pdf Romper párrafos en líneas], el artículo original de Knuth y Plass

More details: https://en.wikipedia.org/wiki/Knuth-Pla ... _algorithm

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post