Сбалансированное обертывание слов (минимальная рваность) в PHP

Я собираюсь сделать алгоритм обёртывания слов в PHP. Я хочу разбивать небольшие куски текста (короткие фразы) на n строк максимальной длиной m символов (n не задано, поэтому строк будет столько, сколько нужно). Особенностью является то, что длина строк (в символах) должна быть максимально сбалансирована по строкам.

Пример входного текста:

How to do things

Неправильный вывод (это нормальное поведение word-wrap), m=6:

How to
do
things

Желаемый вывод, всегда m=6:

How 
to do 
things

Есть ли у кого-нибудь предложения или рекомендации по реализации этой функции? В принципе, я ищу что-то для красивой печати коротких фраз на двух или трех (насколько это возможно) одинаковых по длине строках.


Update: Похоже, я ищу именно алгоритм обертывания слов с минимальной оборванностью. Но я не могу найти никакой реализации на реальном языке программирования (любой, тогда я смогу преобразовать его в PHP).


Обновление 2: Я начал поиск. Возможно ли, что не существует никакой публичной реализации алгоритма Minimum raggedness на каком-либо процедурном языке? Мне нужно что-то, написанное таким образом, чтобы его можно было перевести на процедурные инструкции. Все, что я могу найти сейчас, это просто куча (общих) уравнений, которые, однако, нуждаются в оптимальной процедуре поиска. Я буду благодарен также за реализацию, которая может только приблизить этот оптимальный алгоритм поиска.

15
задан lorenzo-s 7 June 2012 в 15:36
поделиться