Пример #1
0
 private AdvancedBTree<int> ReadBTreeFromFile()
 {
     int[] Numbers = ReadNumbersFromFile();
     if (Numbers == null)
         return null;
     AdvancedBTree<int> BinaryTree = new AdvancedBTree<int>();
     for (int i = 0; i < Numbers.Length; ++i)
     {
         BinaryTree.Insert(Numbers[i]);
     }
     return BinaryTree;
 }
Пример #2
0
        // Сравнение сортировок и поиска
        private void button1_Click(object sender, EventArgs e)
        {
            AdvancedBTree<int> TestTree = new AdvancedBTree<int>();
            Random rand = new Random();
            Counter counter = new Counter();
            const int MaxNum = 100;
            const int RepeatsLimit = 10000;

            // Для дерева высотой 10
            while (TestTree.Depth() != 10)
                TestTree.Insert(rand.Next(MaxNum));

            counter.Start();
            for (int i = 0; i < RepeatsLimit; ++i)
                TestTree.Search(rand.Next(MaxNum));
            counter.Stop();
            double Search10Time = counter.TotalSeconds;

            counter.Reset();
            counter.Start();
            for (int i = 0; i < RepeatsLimit; ++i)
                TestTree.GetSortedList();
            counter.Stop();
            double Sort10Time = counter.TotalSeconds;
            this.progressBar1.Value += 20;

            // Для дерева высотой 20
            TestTree = new AdvancedBTree<int>();
            while (TestTree.Depth() != 20)
                TestTree.Insert(rand.Next(MaxNum));
            
            counter.Reset();
            counter.Start();
            for (int i = 0; i < RepeatsLimit; ++i)
                TestTree.Search(rand.Next(MaxNum));
            counter.Stop();
            double Search20Time = counter.TotalSeconds;

            counter.Reset();
            counter.Start();
            for (int i = 0; i < RepeatsLimit; ++i)
                TestTree.GetSortedList();
            counter.Stop();
            double Sort20Time = counter.TotalSeconds;
            this.progressBar1.Value += 20;

            // Для дерева высотой 50
            TestTree = new AdvancedBTree<int>();
            while (TestTree.Depth() != 50)
                TestTree.Insert(rand.Next(MaxNum));

            counter.Reset();
            counter.Start();
            for (int i = 0; i < RepeatsLimit; ++i)
                TestTree.Search(rand.Next(MaxNum));
            counter.Stop();
            double Search50Time = counter.TotalSeconds;

            counter.Reset();
            counter.Start();
            for (int i = 0; i < RepeatsLimit; ++i)
                TestTree.GetSortedList();
            counter.Stop();
            double Sort50Time = counter.TotalSeconds;
            this.progressBar1.Value += 20;

            // Сравнение сортировки и добавления при разных степенях ветвления
            const int TestDepth = 100;

            // Для сильного ветвления
            TestTree = new AdvancedBTree<int>();
            while (TestTree.Depth() != TestDepth)
                TestTree.Insert(rand.Next(MaxNum));

            counter.Reset();
            counter.Start();
            for (int i = 0; i < RepeatsLimit; ++i)
                TestTree.Search(rand.Next(MaxNum));
            counter.Stop();
            double SearchGoodTime = counter.TotalSeconds;

            counter.Reset();
            counter.Start();
            for (int i = 0; i < RepeatsLimit; ++i)
                TestTree.GetSortedList();
            counter.Stop();
            double SortGoodTime = counter.TotalSeconds;
            this.progressBar1.Value += 20;

            // Для слабого ветвления
            TestTree = new AdvancedBTree<int>();
            int j = 0;
            while (TestTree.Depth() != TestDepth)
                TestTree.Insert(j++);

            counter.Reset();
            counter.Start();
            for (int i = 0; i < RepeatsLimit; ++i)
                TestTree.Search(rand.Next(MaxNum));
            counter.Stop();
            double SearchBadTime = counter.TotalSeconds;

            counter.Reset();
            counter.Start();
            for (int i = 0; i < RepeatsLimit; ++i)
                TestTree.GetSortedList();
            counter.Stop();
            double SortBadTime = counter.TotalSeconds;
            this.progressBar1.Value += 20;

            // Вывод результата
            String Result = "Сравнение в зависимости от глубины дерева:\r\n" +
                "  Глубина 10:\r\n" +
                "    Время поиска = " + Search10Time.ToString("F2") + "\r\n" +
                "    Время сортировки = " + Sort10Time.ToString("F2") + "\r\n" +
                "  Глубина 20:\r\n" +
                "    Время поиска = " + Search20Time.ToString("F2") + "\r\n" +
                "    Время сортировки = " + Sort20Time.ToString("F2") + "\r\n" +
                "  Глубина 50:\r\n" +
                "    Время поиска = " + Search50Time.ToString("F2") + "\r\n" +
                "    Время сортировки = " + Sort50Time.ToString("F2") + ".\r\n" +
                "Сравнение в зависимости от степени ветвления дерева:\r\n" +
                "  Плохая степень ветвления:\r\n" +
                "    Время поиска = " + SearchBadTime.ToString("F2") + "\r\n" +
                "    Время сортировки = " + SortBadTime.ToString("F2") + "\r\n" +
                "  Отличная степень ветвления:\r\n" +
                "    Время поиска = " + SearchGoodTime.ToString("F2") + "\r\n" +
                "    Время сортировки = " + SortGoodTime.ToString("F2") + "\r\n";
            MessageBox.Show(Result);
            this.progressBar1.Value = 0;
        }