Алгоритм разрыва строки Кнута-ПлассаВасина Википедия

Новости с планеты OGLE-2018-BLG-0677
Что вы не только не знали, но и не хотели знать
Автор темы
wiki_en
Всего сообщений: 108455
Зарегистрирован: 16.01.2024
 Алгоритм разрыва строки Кнута-Пласса

Сообщение wiki_en »

Алгоритм Кнута-Пласса представляет собой перенос строк и слов|алгоритм разрыва строк, разработанный для использования в наборной программе TeX Дональда Кнута. Он объединяет проблемы выравнивания текста и расстановки переносов в единый алгоритм, используя метод дискретного динамического программирования для минимизации функции потерь, которая пытается описать эстетические качества, желаемые в конечном результате.
Алгоритм работает путем разделения текста на поток трех типов объектов: «коробки», представляющие собой фрагменты контента без изменения размера, «клей», представляющий собой гибкие элементы с изменяемым размером, и «штрафы». , обозначающие места, где взлом нежелателен (или, если отрицательный результат, желателен).

Оригинальный алгоритм Кнута и Пласса не включает разрыв страниц, но может быть изменен для взаимодействия с алгоритмом разрыва страниц.

== Алгоритм ==

Для ввода текста

ААА ББ СС ДДДДД

при ширине линии 6 жадный алгоритм выдаст:

------ Ширина линии: 6
AAA BB Осталось места: 0
CC Осталось места: 4
DDDDD Осталось места: 1

Сумма квадратов пространства, оставшегося в результате этого метода, равна 0^2 + 4^2 + 1^2 = 17. Однако оптимальное решение дает меньшую сумму 3^2 + 1^2 + 1^2 = 11:

------ Ширина линии: 6
AAA Осталось места: 3
BB CC Осталось места: 1
DDDDD Осталось места: 1

Разница здесь в том, что первая строка разрывается перед BB, а не после нее, что дает лучшее правое поле и меньшую стоимость 11.

Используя алгоритм динамического программирования для выбора позиций разрыва строки, вместо жадного выбора разрывов, решение с минимальной неровностью может быть найдено за время O(n^2), где n — количество слов во входном тексте. Обычно функцию стоимости для этого метода следует изменить так, чтобы она не учитывала пространство, оставшееся в последней строке абзаца; эта модификация позволяет абзацу заканчиваться в середине строки без каких-либо штрафов. Также можно применить ту же технику динамического программирования для минимизации более сложных функций стоимости, которые сочетают в себе другие факторы, такие как количество строк или затраты на расстановку переносов в длинных словах. .

* [http://www.eprg.org/G53DOC/pdfs/knuth-p ... eaking.pdf Разбиение абзацев на строки], оригинальная статья Кнута и Пласса
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ, комментарий, отзыв

Изменение регистра текста: 
Смайлики
:) :( :oops: :chelo: :roll: :wink: :muza: :sorry: :angel: :read: *x) :clever:
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Вторжение Кнута в Норвегию
    wiki_en » » в форуме Васина Википедия
    0 Ответы
    36 Просмотры
    Последнее сообщение wiki_en
  • Существование Янга-Миллса и проблема разрыва в массах
    wiki_de » » в форуме Васина Википедия
    0 Ответы
    65 Просмотры
    Последнее сообщение wiki_de
  • Матричный/тензорный алгоритм
    wiki_en » » в форуме Васина Википедия
    0 Ответы
    188 Просмотры
    Последнее сообщение wiki_en
  • Коллапс волновой функции (алгоритм)
    wiki_en » » в форуме Васина Википедия
    0 Ответы
    181 Просмотры
    Последнее сообщение wiki_en
  • Алгоритм поисковой системы
    wiki_en » » в форуме Васина Википедия
    0 Ответы
    428 Просмотры
    Последнее сообщение wiki_en