故障树算法的介绍:
【排版出问题了,代码请点代码框上方的view plain查看】
对于图1这样一个故障树的最小割集的计算,我的思路是采用下行法和素数法:
图1 故障树示意图
所谓的下行法基本原理是故障树中的或门增加割集数目,与门增加割集的容量。从故障树的顶事件开始,由上到下,顺次把上一级事件置换为下一级事件,遇到与门就将输入事件横向并列写出,遇到或门就将输入事件竖向串联写出,直到把全部逻辑门都置换成底事件为止,此时最后一列代表所有割集,割集吸收得到最小割集采用素数法,其思想就是给每个底事件赋一素数,割集相除去掉能作为被除数的割集,从而得到最小割集。这部分实现起来比较容易,不做深入讲解。具体分析步骤如表1所示:
表1 最小割集分析步骤
以下是一些对于存储数据的一些定义,在一个实例中的运算过程【这是后来编辑的,之前看的朋友不好意思了】
【我就不明白了CSDN这编辑功能怎么这么烂】190-380行手动编辑的,还出问题,要疯了。。。
不想整了,直接上传了源码,链接【http://download.csdn.net/detail/conquerwave/5713163】注释乱码了,参考下文的源码
代码中使用的存储结构所对应的树结构:
结点号 | 子结点数 | 运算符 | 子节点号 | 同左 | 同左 |
0 | 2 | -1 | 1 | 10 | |
1 | 3 | -2 | 2 | 3 | 4 |
2 | 2 | -1 | 5 | 6 | |
3 | 2 | -1 | 7 | 8 | |
4 | 2 | -1 | 9 | 10 | |
5 | 0 | 0 | |||
6 | 0 | 0 | |||
7 | 0 | 0 | |||
8 | 0 | 0 | |||
9 | 0 | 0 | |||
10 | 0 | 0 | |||
11 | 2 | -2 | 13 | 14 | |
12 | 0 | 0 | |||
13 | 0 | 0 |