示例#1
0
        public static bool CalculateNextNode (int NumSingleSheets, ref NTree<List<int>> Tree, double probability)
        {
            var savedNode = memory.Find(Tree.GetNode());
            var found = savedNode != null;

            if (!found)
            {

                if (!Tree.IsLeaf)
                {
                    var nodeProbability = (1.0 / double.Parse(Tree.GetNode().Count.ToString()));
                    probability = probability * nodeProbability;

                    for (var i = Tree.GetNode().Count - 1; i >= 0; i--)
                    {
                        var newTree = new NTree<List<int>>(Tree.GenerateNewNode(i));

                        CalculateNextNode(NumSingleSheets, ref newTree, probability);

                        var k = 0;
                        if (Tree.IsSolitary)
                        {
                            k = 1;
                        }

                        for (var j = 0; j <= 2; j++)
                        {
                            foreach (var element in newTree.probabilityNodeToleafPerSinglesSheets[j])
                            {
                                Tree.probabilityNodeToleafPerSinglesSheets[j + k].Add(nodeProbability * element);                             
                            }
                        }                             
                    }

                    memory.Add(new MemoriaParaP151(Tree.GetNode(), Tree.probabilityNodeToleafPerSinglesSheets));
                }
                else
                {
                    Tree.probabilityNodeToleafPerSinglesSheets[0].Add(1.0);

                    memory.Add(new MemoriaParaP151(Tree.GetNode(), Tree.probabilityNodeToleafPerSinglesSheets));
                }
            }
            else
            {
                Tree.probabilityNodeToleafPerSinglesSheets = savedNode.probabilityNodeToleafPerSinglesSheets;
            }

            return found;
        }