Я ищу алгоритм, который берет строку и разбивает ее на определенное количество частей. Эти части должны содержать полные слова (поэтому для разбиения строки используются пробелы), а части должны быть почти одинаковой длины или содержать максимально длинные части.
Я знаю, что не так сложно написать функцию, которая может делать то, что я хочу, но мне интересно, есть ли проверенный и быстрый алгоритм для этой цели?
редактировать:
Чтобы уточнить мой вопрос, я опишу вам проблему, которую пытаюсь решить.
Я генерирую изображения с фиксированной шириной. На этих изображениях я пишу имена пользователей, используя GD и Freetype в PHP. Поскольку у меня фиксированная ширина, я хочу разделить имена на 2 или 3 строки, если они не помещаются в одну.
Чтобы заполнить как можно больше места, я хочу разделить имена таким образом, чтобы каждая строка содержала как можно больше слов. Под этим я подразумеваю, что в одной строке должно быть столько слов, сколько необходимо, чтобы длина каждой строки была близка к средней длине строки всего текстового блока. Поэтому, если есть одно длинное слово и два коротких слова, два коротких слова должны стоять на одной строке, если все строки примерно одинаковы.
(Затем я вычисляю ширину текстового блока, используя 1, 2 или 3 строки, и если он умещается в моем изображении, я отрисовываю его. Просто, если есть 3 строки и они не помещаются, я уменьшаю размер шрифта, пока все не будет в порядке .)
Пример:
This is a long text
должно отображаться что-то вроде этого:
This is a
long text
или
This is
a long
text
но не:
This
is a long
text
а также нет:
This is a long
text
Надеюсь, я смогу объяснить более четко, что я ищу.