Существует линейный алгоритм времени (или алгоритм квадратичного времени Кнута и Пласса) для равномерного разбиения текста на строки максимальной ширины. Он использует SMAWK и «равномерно» означает:
http://en.wikipedia.org/wiki/Word_wrap#Minimum_raggedness
Существует ли алгоритм или вогнутая функция стоимости для алгоритма, описанного выше, которая учитывала бы количество строк, на которые я хотел бы разбить текст, вместо максимальной ширины строки?
Другими словами, я ищу алгоритм разрыва строки (или формирования абзаца, или переноса слов), в котором вводом является желаемое количество строк, а не желаемая ширина строки.
Просто для описания практически непригодного подхода: между каждой парой слов есть N слов и N-1 пробелов, M - желаемое количество строк (M <= N). После каждого пробела может быть не более одного (возможно, нулевого) переноса строки. Теперь алгоритм будет пытаться поместить разрывы в каждую возможную комбинацию, вычисляя «неровность» и возвращая лучшую. Как сделать это намного быстрее? </p>