/*private SortedDictionary<double, SubGraphsInfo> AnalyzeExtendedER()
        {
            SortedDictionary<double, SubGraphsInfo> result = new SortedDictionary<double, SubGraphsInfo>();

            Int32 n = Int32.Parse(this.networkSizeTxt.Text);
            int realizationCount = (Int32)this.realizationCountNum.Value;
            double qLow = Double.Parse(this.probRangeLowExtendedTxt.Text);
            double qHigh = Double.Parse(this.probRangeHighExtendedTxt.Text);
            double qDelta = Double.Parse(this.deltaExtendedTxt.Text);

            Dictionary<GenerationParam, object> genParameters = new Dictionary<GenerationParam, object>();
            genParameters.Add(GenerationParam.Vertices, n);

            ERGenerator erGenerator = new ERGenerator();
            ERAnalyzer erAnalyzer;

            double qTemp = qLow;
            SubGraphsInfo tempInfo = new SubGraphsInfo();
            while (qTemp <= qHigh)
            {
                double avgOrder = 0;
                for (int r = 0; r < realizationCount; ++r)
                {
                    genParameters[GenerationParam.P] = qTemp;
                    erGenerator.Generation(genParameters);
                    erAnalyzer = new ERAnalyzer((ERContainer)erGenerator.Container);

                    avgOrder += erAnalyzer.GetConnSubGraph().Last().Key;
                }
                double avgValue = avgOrder / (double)realizationCount;
                tempInfo.avgOrder = avgValue;
                result.Add(qTemp, tempInfo);

                qTemp += qDelta;
            }

            return result;
        }*/
        private SortedDictionary<double, double> AnalyzeSublevelsHierarchic(double mu)
        {
            Int16 p = Int16.Parse(this.branchIndexCmb.Text);
            Int16 maxLevel = Int16.Parse(this.maxLevelCmb.Text);
            int realizationCount = (Int32)this.realizationCountNum.Value;

            SortedDictionary<double, double> result = new SortedDictionary<double, double>();
            for (Int16 i = 1; i <= maxLevel; ++i)
            {
                result.Add(i, 0);
            }

            Dictionary<GenerationParam, object> genParameters = new Dictionary<GenerationParam, object>();
            genParameters.Add(GenerationParam.BranchIndex, p);
            genParameters.Add(GenerationParam.Level, maxLevel);
            genParameters.Add(GenerationParam.Mu, mu);

            HierarchicGenerator hGenerator = new HierarchicGenerator();
            HierarchicAnalyzer hAnalyzer;

            for (int r = 0; r < realizationCount; ++r)
            {
                hGenerator.Generation(genParameters);
                hAnalyzer = new HierarchicAnalyzer((HierarchicContainer)hGenerator.Container);

                SortedDictionary<int, int> temp;
                for (Int16 i = 1; i <= maxLevel; ++i)
                {
                    temp = hAnalyzer.GetConnSubGraphSublevels(i);
                    double maxOrder = (temp.Count != 0) ? temp.Last().Key : 1;
                    double normMaxOrder = maxOrder / (Math.Pow(p, i));
                    result[i] += normMaxOrder;
                }
            }

            for (Int16 i = 1; i <= maxLevel; ++i)
            {
                result[i] /= realizationCount;
            }

            return result;
        }