Articles

Wrap ligne et le retour à la ligne

Posted by admin

Mot d’habillage est un problème d’optimisation. En fonction de ce qui doit être optimisé, différents algorithmes sont utilisés.

nombre Minimum de linesEdit

Un moyen simple de faire un retour à la ligne est d’utiliser un algorithme gourmand qui met autant de mots sur une ligne que possible, puis de passer à la ligne suivante pour faire la même chose jusqu’à ce qu’il n’y ait plus de mots à placer. Cette méthode est utilisée par de nombreux traitements de texte modernes, tels que OpenOffice.org écrivain et Microsoft Word., Cet algorithme utilise toujours le nombre minimum de lignes, mais peut conduire à des lignes de différentes longueurs. Le pseudo-code suivant implémente cet algorithme:

LineWidth est la largeur d’une ligne, SpaceLeft est la largeur restante de l’espace sur la ligne à remplir, SpaceWidth est la largeur d’un seul caractère espace, Text est le texte d’entrée pour effectuer une itération sur et Word est un mot dans ce texte.,

Minimum raggednessEdit

Un algorithme différent, utilisé en TeX, minimise la somme des carrés des longueurs des espaces à la fin des lignes pour produire un plus esthétique résultat. L’exemple suivant compare cette méthode avec l’algorithme greedy, qui ne minimise pas toujours l’espace carré.,

Pour la saisie du texte

AAA BB CC DDDDD

avec une largeur de ligne 6, l’algorithme glouton donnerait:

------ Line width: 6AAA BB Remaining space: 0CC Remaining space: 4DDDDD Remaining space: 1
------ Line width: 6AAA Remaining space: 3BB CC Remaining space: 1DDDDD Remaining space: 1

La différence ici est que la première ligne est cassée avant BB au lieu d’après elle, ce qui donne une meilleure marge de droite et un coût inférieur 11.,

en utilisant un algorithme de programmation dynamique pour choisir les positions auxquelles casser la ligne, au lieu de choisir les pauses avec gourmandise, la solution avec un minimum de raggedness peut être trouvée dans time O ( n 2 ) {\displaystyle O(N^{2})} , où n {\displaystyle n} est le nombre de mots dans le texte d’entrée. En règle générale, la fonction de coût pour cette technique doit être modifiée de sorte qu’elle ne compte pas l’espace laissé sur la dernière ligne d’un paragraphe; cette modification permet à un paragraphe de se terminer au milieu d’une ligne sans pénalité., Il est également possible d’appliquer la même technique de programmation dynamique pour minimiser les fonctions de coût plus complexes qui combinent d’autres facteurs tels que le nombre de lignes ou les coûts de césure de mots longs. Des algorithmes de temps linéaire plus rapides mais plus compliqués basés sur L’algorithme SMAWK sont également connus pour le problème de raggedness minimum, et pour certaines autres fonctions de coût qui ont des propriétés similaires.

HistoryEdit

Une fonction de rupture de ligne primitive a été utilisée en 1955 dans une « unité de commande d’imprimante de pages » développée par Western Union., Ce système utilisait des relais plutôt que des ordinateurs numériques programmables, et avait donc besoin d’un algorithme simple pouvant être implémenté sans tampons de données. Dans le système Western Union, chaque ligne était brisée au premier caractère d’espace à apparaître après le 58e caractère, ou au 70e caractère si aucun caractère d’espace n’a été trouvé.

l’algorithme Gourmand pour le saut de ligne est antérieur à la méthode de programmation dynamique décrite par Donald Knuth dans un mémo non publié de 1977 décrivant son système de composition TeX et publié plus tard plus en détail par Knuth& Plass (1981).

Leave A Comment