【问题标题】:Partitioning N arrays into K groups with constraints使用约束将 N 个数组划分为 K 个组
【发布时间】:2019-07-18 18:24:19
【问题描述】:

我一直卡在这个问题上,找不到有效的解决方案。

我有 N 个(最多 1000 万个)数组,最多包含 100 个元素。这些数组包含 1-10000 的数字。

现在我的问题是将这些数组划分为 K 个组,以便我最小化所有数组中的重复项,即包含 1、4、10、100 和另一个包含 1、100 的数组。我希望他们进入同一组,因为这样可以最大限度地减少重复性。我的问题有两个限制如下 -

  1. 我不想为一组数组增加超过 110 个唯一元素的大小。所以我有一个大小为 100 的数组,还有另一个大小为 100 的数组,这是一个 60% 的匹配,我宁愿创建新组,因为这增加了 no。独特元素的数量增加到 140 个,并且这将继续增加。

  2. 组中向量的数量应均匀分布。

根据大小按降序对这些数组进行分组。然后找到唯一向量唯一哈希并应用与约束最大匹配的贪心算法,但贪心算法似乎效果不佳,因为这完全取决于我首先选择的分区。我无法弄清楚如何应用 DP,因为给定向量总数的组合数量非常巨大。我不确定我应该采用什么方法。

我的算法的一些失败案例是,假设有两个相互排斥的向量,但如果我与它们组成一个组,我可以 100% 匹配第三个向量,否则该向量仅匹配 30%组并在添加到该组后使该组充满,这将增加我的重复性,因为第三个向量应该与前两个向量形成一个组。

【问题讨论】:

  • 几个问题:你如何衡量双重性?它是否基于包含数字的组数? “我不想增加超过 110 个独特元素的大小” -> 从什么增加?从初始数组大小? IE。 N 元素的数组只能在最多 N+110 唯一元素的组中? “组中向量的数量应该是均匀分布的。” -> 这到底是什么意思?你想让组有尽可能相等的向量数量吗?
  • 我回应了上一条评论中的问题。举个例子会很有帮助。
  • @NicoSchertler 请找到答案。你如何衡量重复性----> 是的,它是特定数字所在的组数(平均它会给我平均重复性,这是我想要最小化的成本函数) - -- 将大小从 110 增加到 110 是什么意思 ---->(组中唯一数字的绝对计数将其视为磁盘读取最小化,我不想这样做在单个进程中读取过多的依赖文件(最多 110 个) -------- 均匀分布是指您推断的,使组具有尽可能相等的向量数 b>
  • 对我来说,不清楚你在寻找什么,你在说:最小化重复。如何?因为你仍然存储两者?正如你所看到的,很多人都有问题,所以我建议你尝试用更具体的例子来改进你的问题。我喜欢这个问题..
  • @Aldert 正如我所指出的,将其视为磁盘读取最小化我不想在单个进程中读取太多相关文件,** 重要的不是数组的存储,而是唯一的其中的元素,数组在计数方面的一致性和存在的唯一元素的最大数量**

标签: algorithm data-structures dynamic-programming distributed-computing np-hard


【解决方案1】:

计算和内存简单但密集,每个数组迭代 1000 万次以匹配最大数量匹配。现在将匹配数字存储在一个数组中,并通过迭代匹配至少 60% 的条件来类似地找到此类数组的匹配项

【讨论】:

  • 这是我为我的贪婪算法选择的标准,但在我在原始问题中提到的情况下失败了。此外,我需要在不超过 2-3 分钟内完成此计算,因此 n^2 算法对我不起作用
猜你喜欢
  • 2013-01-02
  • 1970-01-01
  • 1970-01-01
  • 2019-09-19
  • 2018-07-28
  • 1970-01-01
  • 2016-01-09
  • 2012-09-05
  • 2020-04-20
相关资源
最近更新 更多