Пример #1
0
        private void TreeSearch(AdvancedBTree<int> Tree, int Key)
        {
            Counter counter = new Counter();
            counter.Start();
            Node<int> Node = null;
            for (int i = 0; i < RepeatsCount; ++i)
                Node = Tree.Search(Key);
            counter.Stop();
            String Result;
            if (Node == null)
                Result = "Ничего не найдено";
            else
                Result = "Введенное число найдено на " +
                    AdvancedBTree<int>.NodeLevel(Node).ToString() + " уровне.";

            MessageBox.Show(Result + "\nВремя поиска при " + RepeatsCount.ToString() +
                     " повторах = " + counter.TotalSeconds.ToString("F2"));
        }
Пример #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;
        }