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