private SortedDictionary<double, SubGraphsInfo> AnalyzeHierarchic(double mu)
        {
            Int16 p = Int16.Parse(this.branchIndexCmb.Text);
            Int16 maxLevel = Int16.Parse(this.maxLevelCmb.Text);
            int realizationCount = (Int32)this.realizationCountNum.Value;

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

            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> subGraphInfo;
                for (Int16 i = 1; i <= maxLevel; ++i)
                {
                    subGraphInfo = hAnalyzer.GetConnSubGraphPerLevel(i);

                    result[i].avgOrder += (subGraphInfo.Count != 0) ?
                        subGraphInfo.Last().Key / Math.Pow(p, i) : 1 / Math.Pow(p, i);
                    result[i].avgOrderCount += (subGraphInfo.Count != 0) ?
                        subGraphInfo.Last().Value : 1;

                    if (subGraphInfo.Count > 1)
                    {
                        subGraphInfo.Remove(subGraphInfo.Last().Key);
                        result[i].secondMax += subGraphInfo.Last().Key / Math.Pow(p, i);
                        result[i].secondMaxCount += subGraphInfo.Last().Value;
                    }

                    if (subGraphInfo.Count > 2)
                    {
                        subGraphInfo.Remove(subGraphInfo.Last().Key);
                        result[i].avgOrderRest += subGraphInfo.Average(x => x.Key) / Math.Pow(p, i);
                    }
                }
            }

            for (Int16 i = 1; i <= maxLevel; ++i)
            {
                result[i].avgOrder /= (double)realizationCount;
                result[i].avgOrderCount /= (double)realizationCount;

                result[i].secondMax /= (double)realizationCount;
                result[i].secondMaxCount /= (double)realizationCount;

                result[i].avgOrderRest /= (double)realizationCount;
            }

            return result;
        }