建立:
我有一个布尔矩阵,例如
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采样可能会起作用.基本思路非常简单:从全行解释开始,然后重复以下内容来抽取一堆解释.
>选择随机行.
>翻转一枚硬币.
>如果硬币出现在头部,请在说明中添加行(如果已经存在则不执行任何操作).
>如果硬币出现尾部,请尝试从说明中删除该行.如果结果不是解释,请将行放回去.
在限制中,包含给定行的样本的分数收敛到其真实值.在关键词“使用吉布斯采样的贝叶斯推断”下有一些实际的实现(你有一个统一的先验并观察到对于每一列,与它相关的行的分离是真的).但是,由于我不是这方面的专家,我不能告诉你滚动自己的危险.