algorithm – 查找方法 – 测试矩阵(数学问题)解释的有效方法

建立:

我有一个布尔矩阵,例如

1  0
1  1
0  1

其中行被命名为m1,m2,m3(作为方法),列为t1和t2(作为测试).

定义:

解释是一组行(方法),它们在任何列中具有至少一个“1”(每个测试都要由至少一个方法匹配).

在我们的例子中,解释的集合是:

{
  {m2}, 
  {m1,m2},{m1,m3},{m2,m3},
  {m1,m2,m3}
}

问题:

我现在要计算所有解释.

现在,我已经有两个可以解决问题的实现,一个是自上而下的搜索解释,另一个是自下而上的,但是两者都在计算时间呈指数增长(通过将行数增加一倍而增加一倍).

这是一个已知的(可能是有效解决的)数学问题吗?

什么可以使事情变得更容易,最后,我只需要解释每个方法的出现次数.在我们的例子中,这将是m1三次出现,m2为4次出现,m3为三次出现.

我现在的算法工作正常,直到让我们说26行.但进一步说,它变得非常缓慢.

谢谢您的帮助!

最佳答案 如果您能够满足近似概率并想要可扩展的东西,那么Gibbs采样可能会起作用.基本思路非常简单:从全行解释开始,然后重复以下内容来抽取一堆解释.

>选择随机行.
>翻转一枚硬币.
>如果硬币出现在头部,请在说明中添加行(如果已经存在则不执行任何操作).
>如果硬币出现尾部,请尝试从说明中删除该行.如果结果不是解释,请将行放回去.

在限制中,包含给定行的样本的分数收敛到其真实值.在关键词“使用吉布斯采样的贝叶斯推断”下有一些实际的实现(你有一个统一的先验并观察到对于每一列,与它相关的行的分离是真的).但是,由于我不是这方面的专家,我不能告诉你滚动自己的危险.

点赞