【问题标题】:Max subset of arrays whose mean is larger than threshold均值大于阈值的最大数组子集
【发布时间】:2014-06-11 15:37:23
【问题描述】:

我最近遇到了以下问题,到目前为止还没有了解如何解决它。

令 S = {v1, v2, v3, ..., vn } 是定义在 ℝ6 上的一组 n 个数组。也就是说,每个数组有 6 个条目。

对于给定的一组数组,设一个维度的平均值是该集合中所有元素对应于该维度的坐标之间的平均值。

另外,让我们将一组数组的某个属性 P 定义为一组所有均值中的最小值(总共有 6 个均值,每个维度一个)。例如,如果某个集合具有 {10, 4, 1, 5, 6, 3} 作为其维度的均值,则该集合的 P 为 1。

现在定义问题:返回 S 的所有子集 S' 中的最大基数,使得 P(S') ≥ TT 已知阈值,如果不存在这样的子集,则为 0。此外,输出任何最大的 S'(使得 P(S') ≥ T)。

总结:输入:集合 S 和阈值 T。输出:某个子集 S'(|S'| 显然是立即的)。

我首先开始尝试想出一个贪婪的解决方案,但没有成功。然后,我转向动态编程方法,但无法建立解决问题的递归。我可以进一步扩展我对解决方案的想法,但考虑到我已经走了多远(或没有走多远),我认为它们没有多大用处。

任何帮助将不胜感激!

【问题讨论】:

  • 这个网站是为了编程问题,而不是家庭作业。也许试试math.stackexchange.com
  • 似乎适合动态编程解决方案。每个子问题将是一组给定基数的最大 P,它是 S 的给定前缀的子集。
  • @MarcB 作为家庭作业的问题不会使其脱离主题,作为家庭作业的问题不会使其成为Mathematics 的主题,这似乎是一个算法问题,这里的主题比Mathematics 更重要。超过 10 万用户的奇怪评论。
  • N上的界限是多少,条目数?
  • @MarcB,你到底从哪里推断出这是一个家庭作业?郑重声明,事实并非如此。

标签: algorithm set dynamic-programming greedy


【解决方案1】:

通过递归的蛮力评估将具有 O(2^n) 的时间复杂度,因为每个数组都可以存在于子集中或不存在。

解决此问题的一种(仍然低效但稍好)的方法是借助整数线性规划。

Define Xi = { 1 if array Vi is present in the maximal subset, 0 otherwise }
Hence Cardinality k = summation(Xi) {i = 1 to n }

此外,由于所有维度的平均值 >= T,这意味着:

d11X1 + d12X2 + ... + d1nXn >= T*k
d21X1 + d22X2 + ... + d2nXn >= T*k
d31X1 + d32X2 + ... + d3nXn >= T*k
d41X1 + d42X2 + ... + d4nXn >= T*k
d51X1 + d52X2 + ... + d5nXn >= T*k
d61X1 + d62X2 + ... + d6nXn >= T*k

Objective function: Maximize( k )

实际上,您应该通过基数方程消除 k,但为了清楚起见,我将其包含在此处。

【讨论】:

  • 稍后我会通过你的回答,但是关于你几分钟前发布的贪婪的问题,你知道为什么它没有正确回答问题,对吧?
猜你喜欢
  • 1970-01-01
  • 2012-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-05
  • 2012-04-13
  • 2019-04-26
相关资源
最近更新 更多