Articles

A mudança de linha e a mudança de linha

Posted by admin

a mudança de linha é um problema de optimização. Dependendo do que precisa ser otimizado para, diferentes algoritmos são usados.

número mínimo de linesEdit

uma maneira simples de fazer o empacotamento de palavras é usar um algoritmo ganancioso que coloca tantas palavras em uma linha quanto possível, em seguida, movendo-se para a próxima linha para fazer o mesmo até que não haja mais palavras para colocar. Este método é usado por muitos processadores de texto modernos, tais como OpenOffice.org escritor e Microsoft Word., Este algoritmo sempre usa o número mínimo possível de linhas, mas pode levar a linhas de comprimentos muito variados. O pseudocódigo a seguir implementa este algoritmo:

, Onde LineWidth é a largura de uma linha, SpaceLeft é a largura restante de espaço na linha de preencher, SpaceWidth é a largura de um único caractere de espaço, Text é o texto de entrada para iterar através de e Word é uma palavra neste texto.,

raggednessEdit mínimo

um algoritmo diferente, usado em TeX, minimiza a soma dos quadrados dos comprimentos dos espaços no final das linhas para produzir um resultado mais esteticamente agradável. O exemplo a seguir compara este método com o algoritmo ganancioso, que nem sempre minimiza o espaço ao quadrado.,

Para a entrada de texto

AAA BB CC DDDDD

com a largura da linha 6, o algoritmo ganancioso produziria:

------ 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

A diferença aqui é que a primeira linha é interrompida antes de BB em vez de após ele, produzindo uma melhor margem direita e a um custo menor, 11.,

usando um algoritmo de programação dinâmica para escolher as posições em que a quebra de linha, em vez de escolher quebras de cobiça, a solução com o mínimo de raggedness pode ser encontrado em tempo O ( n 2 ) {\displaystyle O(n^{2})} , onde n {\displaystyle n} é o número de palavras do texto de entrada. Tipicamente, a função de custo para esta técnica deve ser modificada de modo que não conte o espaço deixado na linha final de um parágrafo; esta modificação permite que um parágrafo termine no meio de uma linha sem penalidade., Também é possível aplicar a mesma técnica de programação dinâmica para minimizar funções de custo mais complexas que combinam outros fatores, tais como o número de linhas ou custos para hifenizar palavras longas. Algoritmos de tempo linear mais rápidos, mas mais complicados, baseados no algoritmo SMAWK também são conhecidos pelo problema de raggedness mínimo, e por algumas outras funções de custo que têm propriedades similares.

HistoryEdit

a primitive line-breaking feature was used in 1955 in a “page printer control unit” developed by Western Union., Este sistema usou relés ao invés de computadores digitais programáveis, e, portanto, precisava de um algoritmo simples que poderia ser implementado sem buffers de dados. No sistema Western Union, cada linha foi quebrada no primeiro caractere espacial a aparecer após o 58º caractere, ou no 70º caractere se nenhum caractere espacial foi encontrado.

The greedy algorithm for line-breaking antecede the dynamic programming method outlined by Donald Knuth in an unpublished 1977 memo describing his Tex typesetting system and later published in more detail by Knuth & Plass (1981).

Leave A Comment