【问题标题】:Algorithm that Groups so that sum is close to target value分组算法使总和接近目标值
【发布时间】:2017-06-12 01:33:02
【问题描述】:

我正在尝试找到一种算法,但在谷歌上搜索我的确切问题并没有找到我需要的确切结果。

我得到一组数字和一个目标总和。我需要将数字分配给组,以便这些组的总和尽可能接近而不会超过目标值。

Example Target Sum = 99
Example Set = { 70, 40, 10, 70, 98, 14, 4, 7, 29, 11, 91, 50, 30 }

期望的结果类似于:

{ 70, 29 } 
{ 40, 50, 7} 
{ 98 } 
{ 91, 4 }
{ 70, 10, 11 } 
{ 30, 14 }

...因为它们加起来都接近 99。

目标是尽可能少的组。 我不需要太担心资源。它将被谨慎执行,并且值的数量将非常低。

【问题讨论】:

  • 你能解释一下 close 是什么意思吗?您是希望最小化组和目标之间的差异总和,还是希望使偏离目标的组数量最少,或者在两者之间取得某种平衡?
  • 我记得很久以前我用dynamic programming解决了一个类似的问题,不过这个概念很难理解。
  • 第一个示例组的总和是 99 (70 + 29)。这是准确的。第二组的总和是97,接近99....他们有多接近并不重要。关键是我需要尽可能少的组。
  • 如果目标是最小化最小和最大集之间的差异,它是partition problem 的泛化,已知是 NP 完全的。
  • 目标是尽可能减少每个组的总和不超过目标值的组数。

标签: algorithm math


【解决方案1】:

如果目标是最小化组的数量并且唯一的约束是每个组的总大小不能超过目标值,那么正在考虑的问题是bin packing 问题,NP-hard 优化问题比较好理解。

一般来说,相对简单的启发式算法称为 First Fit 或 First Fit Decreasing 收益率近似比率小于 2。更准确地说,First Fit Decreasing 产生的紧比率为(11/9)OPT+(6/9)。 Bin 打包不接受 PTAS(因此也不接受 FPTAS),而是接受比率为 (1+epsilon)OPT+1 的渐近 PTAS,其中 epsilon 是精度参数。

如果需要一个相对容易实现的体面解决方案,First Fit Decreasing 可能是一个候选方案。

【讨论】:

    猜你喜欢
    • 2011-03-09
    • 1970-01-01
    • 2021-12-16
    • 1970-01-01
    • 1970-01-01
    • 2016-08-21
    • 2016-10-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多