public virtual void OnGenerateEnd(IClusterNode root) { if (IsVerbose) { int estimatedMaxNodeCount = CalculateEstimatedNodeCount(MaxBucketCounts); int estimatedMinNodeCount = CalculateEstimatedNodeCount(MinBucketCounts); int actualNodeCount = CountNodes <int> .Count <ClusterTree, IClusterNode>(null, root); Console.WriteLine("Nodes: estimated min: {0:#,#}, estimated max: {1:#,#}, actual: {2:#,#}", estimatedMinNodeCount, estimatedMaxNodeCount, actualNodeCount); } }
public void OnGenerateEnd(IClusterNode root) { if (IsVerbose) { int estimatedNodeCount = 1; int power = 1; for (int r = 0; r < 4; ++r) { power *= BucketCounts[r]; estimatedNodeCount += power; } int actualNodeCount = CountNodes <int> .Count <ClusterTree, IClusterNode>(null, root); Console.WriteLine("Nodes: estimated: {0:#,#}, actual: {1:#,#}", estimatedNodeCount, actualNodeCount); } }
public ChanceTree ConvertToChanceTree() { int depth = PlayersCount * RoundsCount; int nodesCount = CountNodes <int> .Count(Root, Root as object); ChanceTree ct = new ChanceTree(nodesCount); ct.SetNodesMemory(0); // To clear results. SyncUniAndUF <int> .Sync(Root, Root as object, ct, SyncNodes); WalkUFTreePP <ChanceTree, WalkUFTreePPContext> wt = new WalkUFTreePP <ChanceTree, WalkUFTreePPContext>(); wt.OnNodeEnd = FinalizeChanceTree_OnNodeEnd; wt.Walk(ct); ct.PlayersCount = PlayersCount; ct.Version.Description = String.Format("Chance tree (MC:{0:0,0}, {1})", SamplesCount, SourceInfo); return(ct); }