Минимизация общего пустого пространства в абзаце - алгоритм - PullRequest
0 голосов
/ 09 ноября 2018

Для приложения я хочу найти способ минимизировать, штрафуя, общее пустое пространство в конце каждой строки абзаца. У меня есть набор слов W = [w1, w2, w3, ..., wn], которые составляют текст, который я хочу, чтобы абзац содержал, и для каждого слова wi у меня есть соответствующая длина li. Я также знаю максимальное количество символов, включая пробелы, которые может уместить строка: m. Я не могу переносить слова.

В этой ситуации я определил отношение, которое описывает стоимость пустого пространства строки, начиная со слова i и заканчивая словом j, определяется как c(i, j) = (m - (j - i) - sum_{k=i}^{k = j}lk)^3. Так что c(i, j) должно быть положительным, в противном случае мне нужно разбить строку, и если j = n, я не штрафую пробел в последней строке: c(i, n) = 0.

С этими параметрами я нашел алгоритм, который минимизирует стоимость каждой строки перед переходом к следующей и вычисляет общую стоимость. Однако минимизация стоимости каждой линии не обязательно означает, что общая стоимость также минимизирована.

Любой процесс, который я могу придумать, который минимизирует общую стоимость, требует огромного количества перестановок количества слов в каждой строке и, следовательно, не может быть реализован. Есть идеи жизнеспособного алгоритма для расчета минимальной стоимости?

1 Ответ

0 голосов
/ 09 ноября 2018

Позвольте G быть графом, где каждая вершина V_x_y представляет частичный абзац, состоящий из y строк, которые используют в общей сложности x слова. График имеет ребро от V_x_y до V_z_ (y + 1) , если z> x , и слова w_ (x + 1) до w_z вписывается в линию. Каждое такое ребро имеет стоимость c (x + 1, z) , т. Е. Стоимость дополнительной линии, которую он представляет.

Теперь ваша задача - найти путь с наименьшей стоимостью от V_0_0 до вершины V_n_y , которая потребляет все слова.

Вы можете использовать алгоритм Дейкстры, чтобы найти этот путь за O (n ^ 2 log n) времени или лучше, или A *, чтобы найти его еще быстрее, если сформулировать приемлемую допустимую эвристику.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...