【发布时间】:2019-07-18 18:24:19
【问题描述】:
我一直卡在这个问题上,找不到有效的解决方案。
我有 N 个(最多 1000 万个)数组,最多包含 100 个元素。这些数组包含 1-10000 的数字。
现在我的问题是将这些数组划分为 K 个组,以便我最小化所有数组中的重复项,即包含 1、4、10、100 和另一个包含 1、100 的数组。我希望他们进入同一组,因为这样可以最大限度地减少重复性。我的问题有两个限制如下 -
我不想为一组数组增加超过 110 个唯一元素的大小。所以我有一个大小为 100 的数组,还有另一个大小为 100 的数组,这是一个 60% 的匹配,我宁愿创建新组,因为这增加了 no。独特元素的数量增加到 140 个,并且这将继续增加。
组中向量的数量应均匀分布。
根据大小按降序对这些数组进行分组。然后找到唯一向量唯一哈希并应用与约束最大匹配的贪心算法,但贪心算法似乎效果不佳,因为这完全取决于我首先选择的分区。我无法弄清楚如何应用 DP,因为给定向量总数的组合数量非常巨大。我不确定我应该采用什么方法。
我的算法的一些失败案例是,假设有两个相互排斥的向量,但如果我与它们组成一个组,我可以 100% 匹配第三个向量,否则该向量仅匹配 30%组并在添加到该组后使该组充满,这将增加我的重复性,因为第三个向量应该与前两个向量形成一个组。
【问题讨论】:
-
几个问题:你如何衡量双重性?它是否基于包含数字的组数? “我不想增加超过 110 个独特元素的大小” -> 从什么增加?从初始数组大小? IE。
N元素的数组只能在最多N+110唯一元素的组中? “组中向量的数量应该是均匀分布的。” -> 这到底是什么意思?你想让组有尽可能相等的向量数量吗? -
我回应了上一条评论中的问题。举个例子会很有帮助。
-
@NicoSchertler 请找到答案。你如何衡量重复性----> 是的,它是特定数字所在的组数(平均它会给我平均重复性,这是我想要最小化的成本函数) - -- 将大小从 110 增加到 110 是什么意思 ---->(组中唯一数字的绝对计数)将其视为磁盘读取最小化,我不想这样做在单个进程中读取过多的依赖文件(最多 110 个) -------- 均匀分布是指您推断的,使组具有尽可能相等的向量数 b>
-
对我来说,不清楚你在寻找什么,你在说:最小化重复。如何?因为你仍然存储两者?正如你所看到的,很多人都有问题,所以我建议你尝试用更具体的例子来改进你的问题。我喜欢这个问题..
-
@Aldert 正如我所指出的,将其视为磁盘读取最小化我不想在单个进程中读取太多相关文件,** 重要的不是数组的存储,而是唯一的其中的元素,数组在计数方面的一致性和存在的唯一元素的最大数量**
标签: algorithm data-structures dynamic-programming distributed-computing np-hard