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; }
// Сравнение сортировок и поиска 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; }