【发布时间】:2011-03-27 23:14:53
【问题描述】:
我正在寻找一种有效的算法(理想情况下,类似 C 的伪代码)来为以下分区问题提供近似解决方案。给定一个序列 S = {a_i : i=1,...,n} 和一个边界 B,将 S 划分为若干个 m 的连续子序列,如下所示。对于每个k,令s_k 为第k 个子序列的元素之和。分区必须满足:
- s_k ≤ B 对于每个 k(假设 B 的值而 a_i 是这样的,这总是可能的)
- m 是最小的(没有更小的分区满足#1);
- 在所有大小为 的分区中,一些分散度量(例如,s_k 之间的方差或最大成对差异)最小米。
我知道这与minimum raggedness word wrap algorithm 密切相关。我正在寻找可以为 n (小于 15)的小值提供“足够好”的解决方案的东西,而无需像动态编程那样拉出沉重的弹药,但也比蛮力快一点。
【问题讨论】:
-
所以你想要介于“最小长度”和“最小粗糙度”之间的东西?
-
如果您的目标是最小化
m和成对差异,我认为您需要选择哪一个是优先的 -
对于这么小的 n 值,避免暴力破解会有回报吗?
-
@Gabe - 我想是的。最小长度太不均匀,但我不需要最小粗糙度,所以我想避免复杂性。
-
我不认为动态编程是“重弹药”...我估计用 20 行代码来实现维基百科文章中的 TeX 算法。
标签: algorithm partitioning word-wrap