我正在尝试解决一个看起来像标准线性规划问题的问题。
我们输入一组“短语”,每个短语都有一个重量。我们需要选择在文本中重复每个短语的次数,以最大化总重量,但最大字符长度限制。
这似乎是一个简单的线性规划问题,除了一个短语可能是另一个短语的事实。因此,例如,如果您的输入短语包括“foo bar”和“foo”,那么如果您重复短语“foo bar”,则还要重复短语“foo”。我不知道如何在线性编程模型中处理这个问题。
答案 0 :(得分:3)
你有另一个问题,两个短语的串联可能形成第三个短语。例如,如果你有
list...4
sting...6
ingrave...7
abcd...5
然后解决方案“listingrave
”有“获得”17,而你用“abcd
”(“abcdingrave
”)做的任何事情只有12,尽管长度为4, “abcd
”是最佳选择。
这是一个有趣的问题,但是,我认为你需要构建一个自动搜索文本的单词,你需要在给定长度的自动机中找到一条通过“最可爱”状态的路径(例如通过给予最多糖果回报的州。我会进一步考虑。
更新:应该这样工作:
答案 1 :(得分:0)
重新计算重量。例如:
key = 3 board = 2 keyboard = 5
这改为:
key = 3 board = 2 keyboard = 5 + 3 + 2 = 10
如果你这样做,你必须留意包含一个包含短语的短语的短语。你必须确保你不这样做:
ey = 7 key = 3 + 7 board = 2 keyboard = 5 + 7 + (3 + 7) + 2
您可以通过在短语的长度之后对列表进行排序来避免它。 (最长的)
BTW:这不是dynamic programming问题吗?
答案 2 :(得分:0)
也许只使用动态编程并每次重新计算整个事情都可以。人们可以使用大量的优化来加速它。 (就像试图重新计算最后一部分一样)我认为速度是合理的。 O(n ^ 2 * m)左右。
答案 3 :(得分:-1)
这似乎可以解决为背包问题,请参阅http://en.wikipedia.org/wiki/Knapsack_problem,权重定义为gs建议。