给定一个布尔值的2D数组,我想找到包含至少2列和至少2行的所有模式。问题与查找cliques in a graph有点接近。
在下面的示例中,绿色单元格表示“true”位,灰色表示“false”。模式1包含cols 1,3,4和5以及第1行和第2行。模式2仅包含第2列和第4列以及第2,3,4行。
这背后的商业理念是在各种社交网络用户群体中找到相似性模式。在现实世界中,行数最多可达3E7,列数最多可达300。
除了蛮力匹配之外,无法找到解决方案。
请告知问题的正确名称,以便我可以阅读更多内容,或建议优雅的解决方案。
答案 0 :(得分:4)
这是(相当于)要求在二分图中大于特定大小的所有bicliques(完整的二分子图)。这里的行是图形的一个部分A的顶点,而列是另一个部分B的顶点,并且只要第u行,第v列的单元格,在A中的u \和B中的v \之间就有一条边。是绿色的。
虽然您说要查找所有模式,但您可能只想查找 maximal - 即,通过添加更多行或列无法扩展为更大模式的模式。 (否则,对于c> = 2列且r> = 3行的任何模式,您还将获得超过2 ^(c-2)* 2 ^(r-3)个非最大模式,通过删除一些行或列来形成。)
但是,即使列出最大模式,也可能需要时间指数的行数和列数,假设P!= NP。这是因为根据绿色单元格的总数has been proven to be NP-complete找到最大(即最大可能)模式的问题:是否有可能列出多项式中的所有最大模式时间,然后我们可以简单地这样做,并选择最大的,从而在多项式时间内解决这个NP完全问题。