注册 登录
编程论坛 C++教室

贝叶斯网络的概率表消元问题,求大神指点

阿夜VOo 发布于 2013-09-12 10:06, 640 次点击
比如有一个概率分布表
A    B    C     Pr(C/A,B)
0    0    0     0.5
0    1    1     0.6
0    1    0     0.4
0    0    1     0.5
1    0    0     0.7
1    1    0     0.3
1    0    1     0.3
1    1    1     0.7
这可以看成是一个函数F(A,B,C)也叫factor,然后假如我就是要消掉C,得到一个新的表
A    B    Pr
0    0    1
1    0    1
1    1    1
0    1    1
消B的话就是
A    C    Pr
0    0    0.5+0.4=0.9
0    1    0.6+0.5=1.1
1    0    0.7+0.3=1
1    1    0.3+0.7=1
我要问的就是怎么用c/c++实现这个,输入要消去的变量名,输出新的表
小弟是新人,只有20分全部奉上,在此先谢谢各路大神~
6 回复
#2
peach54602013-09-12 10:11
求代码是会删帖的
#3
阿夜VOo2013-09-12 10:18
不一定要代码啊,大神给个算法也行
#4
peach54602013-09-12 10:24
算法你不是已经全都写出来了吗?
还要什么算法?

程序代码:

消B的话就是
A    C    Pr
0    0    0.50.40.9
0    1    0.60.51.1
1    0    0.70.31
1    1    0.30.71

这不是算法是什么?
#5
qunxingw2013-09-12 15:56
新手不是依赖的理由,至少要表述此问题的理解程度
#6
3037709572013-09-12 16:12
可以用二维数组来实现,消去的时候遍历数组按照行遍历,与当前数据行的数据进行比对,相同讲概率相加。最后输出统计之后的二维表就可以了。
#7
peach54602013-09-12 16:17
以下是引用qunxingw在2013-9-12 15:56:56的发言:

新手不是依赖的理由,至少要表述此问题的理解程度

呵呵,我是完全没理解他到底想干嘛的...
我就觉得,又来个做作业的...
1