给定一个2D布尔数组,想要找到最大的双曲线(完整的二分图) - 将所有单元格设置为true
的行×列的集合。
任务是NP完全的,我设法解决它不完美。
现在它变得更有趣了:
想要添加一些“模糊性”:允许将一行包含在一个集合中,如果它只错过了X个单元格。我们会考虑“好像”他们“开启”,如果这有助于增加更大的混合物。算法会有多复杂?到目前为止,我只能看到每个找到的biclique应该再次测试所有数据集,以寻找可能有助于增长的“假货”。感觉不对。 请建议算法。
数据的大小变大。也许如果你能熟练使用机器学习技术 - 请提出一些“近似”的方法来解决问题。使用更大的数据集,近似结果就足够了。 请建议适用于此问题的技巧。
问题的插图
蓝色单元格为true
,白色为false
。 “模糊”最大双色调为红色。每一排都收到了3个“fantom”细胞,颜色为灰色。行/列的顺序无关紧要。最大的biclique不一定是连续的矩形,这里只是为了说明。
在该测试中,通过优化阶段消除了浅蓝色细胞。其余形成两个双重派系,行×cols :( 3,5)×(1,3,4,6)和(3,4,5)×(1,3)。< / p>
但是,考虑到fuzziness=2
,第4行可以添加cols(4,6),行(3,5)可以添加col 5,从而产生一个更大的biclique(3,4,5)× (1,3,4,5,6)。