function [cpts] = learnNet(inputs,parents)
%
% function [cpts] = learnNet(inputs,parents)
%
% Parents is an MxM matrix for each node listing
% which nodes are its parents. A one says that the
% corresponding column is a parent of the current row
% and zero means not a parents
% Make sure that parents come first (topological)
% Make sure that this is a valid DAG
% Make sure that nodes are not self-parents
%
% inputs is an NxM matrix where the values at the
% m'th column range from 0..D_m
%
% cpts is a matrix of rows where each row corresponds
% to a node and contains its conditional probability
% hypercube rasterized as a long vector
%
[N,M] = size(inputs);
% Figure out the cptsizes
cards = max(inputs);
cards = cards+ones(size(cards));
cptsize = zeros(M,1);
for i=1:M
cptsize(i) = cards(i);
for j=1:(i-1)
if (parents(i,j)>0.5)
cptsize(i) = cptsize(i)*cards(j);
end
end
end
% Initialize the cpt structure to -1 where
% negative indicates it is currently an invalid value.
cpts = -1.0*ones(M,max(cptsize));
% NOW ENTER THE REST OF THE CODE HERE, OVERWRITE THE
% -1.0 ENTRIES IN cpts WITH THE CORRECT COUNTS
% YOU DON'T NEED TO WORRY ABOUT NORMALIZING BECAUSE
% THE FOLLOWING FUNCTION WILL DO IT FOR YOU
% Normalize the cpts
for i=1:M
index = 1;
while (index