about summary refs log tree commit diff
path: root/sourcecodes/bnt-master/graph/test_strong_root.m
diff options
context:
space:
mode:
Diffstat (limited to 'sourcecodes/bnt-master/graph/test_strong_root.m')
-rw-r--r--sourcecodes/bnt-master/graph/test_strong_root.m34
1 files changed, 34 insertions, 0 deletions
diff --git a/sourcecodes/bnt-master/graph/test_strong_root.m b/sourcecodes/bnt-master/graph/test_strong_root.m
new file mode 100644
index 00000000..86e1117e
--- /dev/null
+++ b/sourcecodes/bnt-master/graph/test_strong_root.m
@@ -0,0 +1,34 @@
+function strong = test_strong_root(jtree,cliques,dnodes,root)
+% This function tests, whether root is a strong root of jtree. 
+% The following parameters are used
+% Input:
+% jtree   An matrix with two colums. jtree(i,j) == jtree(j,i) is 1 if node 
+%         i is connected with node j
+% cliques Cells which contain the nodes in each clique
+% dnodes  An array with the discrete nodes of the juntion tree.
+% root    It is tested whether root is the strong root of the junction tree
+% Output:
+% strong  The output is 1 if root is the strong root of the junction tree jtree.
+%         Please note, that the running intersection property is not tested. 
+if isempty(dnodes)
+     strong = 1;
+     return;
+end
+
+children = find(jtree(root,:)==1);
+i = 1;
+strong = 1;
+while (i <= length(children)) & (strong==1)
+     child = children(i);
+     jtree(child,root) = 0;
+     jtree(root,child) = 0;
+     sep = myintersect(cliques{child},cliques{root});
+     diff = mysetdiff(cliques{child},cliques{root});
+     if (mysubset(sep,dnodes) | isempty(myintersect(diff,dnodes)))
+         strong = test_strong_root(jtree,cliques,dnodes,child);
+     else
+         strong = 0;
+     end;
+     i = i+1;
+end
+