public static void Run2Lab() { Random rnd = new Random(); Stopwatch sw = new Stopwatch(); #region Task_1 #if bin #region BinarySearch Console.WriteLine("Введите размерность массива для бинарного поиска или 0 для перехода к следующему заданию."); var size = int.Parse(Console.ReadLine()); while (0 != size) { Console.WriteLine("\nВведите искомый элемент."); var key_bin = int.Parse(Console.ReadLine()); var mas = new int[size]; for (int i = 0; i < size; i++) { mas[i] = rnd.Next(-1000, 1001); } Array.Sort(mas); sw.Start(); var start = DateTime.Now; var binary = BinarySearch(mas, key_bin); var end = DateTime.Now; sw.Stop(); Console.WriteLine($"\nЭлемент {key_bin} присутствует в массиве - {binary}."); Console.WriteLine($"Затраченное время на выполнение: {/*sw.Elapsed*/start - end}."); sw.Reset(); sw.Start(); start = DateTime.Now; Array.BinarySearch(mas, key_bin); end = DateTime.Now; sw.Stop(); Console.WriteLine($"\nЗатраченное время на выполнение встроенным алгоритмом класса Array: {start - end}."); sw.Reset(); Console.WriteLine("Введите размерность массива для повторной генерации или 0 для перехода к следующему заданию."); size = int.Parse(Console.ReadLine()); } #endregion #endif #if tree #region BinaryTree Console.WriteLine("Введите размерность дерева или 0 для перехода к следующему заданию."); var size_tree = int.Parse(Console.ReadLine()); while (size_tree != 0) { Console.WriteLine("Введите искомый элемент."); var key_tree = int.Parse(Console.ReadLine()); var set = new HashSet <int>(); for (int i = 0; i < size_tree; i++) { set.Add(rnd.Next(-1000, 1001)); } sw.Start(); var start = DateTime.Now; var contains_set = set.Contains(key_tree); var end = DateTime.Now; sw.Stop(); Console.WriteLine($"\nЭлемент {key_tree} присутствует в множестве - {contains_set}."); Console.WriteLine($"Затраченное время на выполнение встроенным методом класса HashSet: {/*sw.Elapsed*/start - end}."); sw.Reset(); int[] arr = new int[set.Count]; //int[] arr = { 5,8,11,3,-2,4,10,17}; set.CopyTo(arr); BinaryTree tree = new BinaryTree(arr); sw.Start(); start = DateTime.Now; var contains_tree = tree.HasValue(key_tree); end = DateTime.Now; sw.Stop(); Console.WriteLine($"\nЭлемент {key_tree} присутствует в дереве - {contains_tree}."); Console.WriteLine($"Затраченное время на выполнение методом класса BinaryTree: {/*sw.Elapsed*/start - end}."); sw.Reset(); Console.WriteLine("\nВведите элемент для добавления."); var adding = int.Parse(Console.ReadLine()); tree.Add(adding); start = DateTime.Now; contains_tree = tree.HasValue(adding); end = DateTime.Now; Console.WriteLine($"\nЭлемент {adding} присутствует в дереве после добавления - {contains_tree}."); Console.WriteLine($"Затраченное время на выполнение методом класса BinaryTree: {/*sw.Elapsed*/start - end}."); Console.WriteLine("\nВведите элемент для удаления."); int deleting = int.Parse(Console.ReadLine()); tree.Delete(deleting); start = DateTime.Now; contains_tree = tree.HasValue(deleting); end = DateTime.Now; Console.WriteLine($"\nЭлемент {deleting} присутствует в дереве после удаления - {contains_tree}"); Console.WriteLine($"Затраченное время на выполнение методом класса BinaryTree: {/*sw.Elapsed*/start - end}"); /*Console.WriteLine(set.Count); * Console.WriteLine(tree.Count);*/ sw.Reset(); Console.WriteLine("\nВведите размерность массива для повторной генерации или 0 для перехода к следующему заданию."); size_tree = int.Parse(Console.ReadLine()); } #endregion #endif #if fib #region Fibonacchi Console.WriteLine("Введите размерность массива для поиска Фибоначчи или 0 для перехода к следующему заданию."); var size_fib = int.Parse(Console.ReadLine()); while (size_fib != 0) { Console.WriteLine("Введите искомый элемент."); var key_fib = int.Parse(Console.ReadLine()); var set = new HashSet <int>(size_fib); for (int i = 0; i < size_fib; i++) { set.Add(rnd.Next(-1000, 1001)); } var arr = new int[set.Count]; //int[] arr = { 1, 2, 6, 14, 18, 40, 55, 91, 114, 225, 335, 556, 667, 889, 668, 44458, 88889595, 989849841, 989849843 }; set.CopyTo(arr); Array.Sort(arr); sw.Start(); var start = DateTime.Now; var contains_fib = Fib(arr, key_fib); var end = DateTime.Now; sw.Stop(); Console.WriteLine($"\nЭлемент {key_fib} присутствует в массиве - {contains_fib}."); Console.WriteLine($"Затраченное время на выполнение поиском Фиббоначи: {/*sw.Elapsed*/start - end}."); sw.Reset(); Console.WriteLine("\nВведите размерность массива для повторной генерации или 0 для перехода к следующему заданию."); size_fib = int.Parse(Console.ReadLine()); } #endregion #endif #if int #region Interpolation Console.WriteLine("Введите размерность массива для интерполяционного поиска или 0 для перехода к следующему заданию."); var size_interpol = int.Parse(Console.ReadLine()); while (size_interpol != 0) { Console.WriteLine("Введите искомый элемент."); var key_interpol = int.Parse(Console.ReadLine()); var set = new HashSet <int>(size_interpol); for (int i = 0; i < size_interpol; i++) { set.Add(rnd.Next(-1000, 1001)); } //var arr = new int[set.Count]; //set.CopyTo(arr); int[] arr = { 1, 2, 6, 14, 18, 40, 55, 91, 114, 225, 335, 556, 667, 889, 668, 44458, 88889595, 9898491, 9898443 }; Array.Sort(arr); sw.Start(); var start = DateTime.Now; var contains_int = Interpolation(arr, key_interpol); var end = DateTime.Now; sw.Stop(); Console.WriteLine($"\nЭлемент {key_interpol} присутствует в массиве - {contains_int}."); Console.WriteLine($"Затраченное время на выполнение интерполяционным поиском: {/*sw.Elapsed*/start - end}."); sw.Reset(); Console.WriteLine("\nВведите размерность массива для повторной генерации или 0 для перехода к следующему заданию."); size_interpol = int.Parse(Console.ReadLine()); } #endregion #endif #endregion #region Task 2 #if hash #region Simple Console.WriteLine("Введите размерность массива для генерации массива для простого хеширования или 0 для перехода к следующему заданию."); var size_simp_hash = long.Parse(Console.ReadLine()); while (size_simp_hash != 0) { var set = new HashSet <int>((int)size_simp_hash); while (set.Count != size_simp_hash) { set.Add(rnd.Next(-(int)size_simp_hash, (int)size_simp_hash)); } var arr = new int[set.Count]; set.CopyTo(arr); Console.WriteLine($"Введите искомый элемент"); int item = int.Parse(Console.ReadLine()); sw.Start(); var start = DateTime.Now; SimpleHash hash = new SimpleHash(arr); var end = DateTime.Now; sw.Stop(); Console.WriteLine($"Затраченное время на хеширование: {/*sw.Elapsed*/start - end}."); sw.Reset(); sw.Start(); start = DateTime.Now; int index = hash.IndexOf(item); end = DateTime.Now; sw.Stop(); Console.WriteLine($"Индекс искомого элемента в хеш-таблице: {index}"); Console.WriteLine($"Затраченное время на поиск: {/*sw.Elapsed*/start - end}."); sw.Reset(); Console.WriteLine("\nВведите размерность массива для повторной генерации или 0 для перехода к следующему заданию."); size_simp_hash = long.Parse(Console.ReadLine()); } #endregion #region Pseudo Console.WriteLine("Введите размерность массива для генерации массива для хеширования на основе псеводослучайных чисел или 0 для перехода к следующему заданию."); var size_pseudo_hash = long.Parse(Console.ReadLine()); while (size_pseudo_hash != 0) { var set = new HashSet <int>((int)size_pseudo_hash); while (set.Count != size_pseudo_hash) { set.Add(rnd.Next(-(int)size_pseudo_hash, (int)size_pseudo_hash)); } var arr = new int[set.Count]; set.CopyTo(arr); Console.WriteLine($"Введите искомый элемент"); int item = int.Parse(Console.ReadLine()); sw.Start(); var start = DateTime.Now; PseudoHash hash = new PseudoHash(arr); var end = DateTime.Now; sw.Stop(); Console.WriteLine($"Затраченное время на хеширование: {/*sw.Elapsed*/start - end}."); sw.Reset(); sw.Start(); start = DateTime.Now; int index = hash.IndexOf(item); end = DateTime.Now; sw.Stop(); Console.WriteLine($"Индекс искомого элемента в хеш-таблице: {index}"); Console.WriteLine($"Затраченное время на поиск: {/*sw.Elapsed*/start - end}."); sw.Reset(); Console.WriteLine("\nВведите размерность массива для повторной генерации или 0 для перехода к следующему заданию."); size_simp_hash = long.Parse(Console.ReadLine()); } #endregion #region Chains Console.WriteLine("Введите размерность массива для генерации массива для хеширования цепочками или 0 для перехода к следующему заданию."); var size_chains_hash = long.Parse(Console.ReadLine()); while (size_chains_hash != 0) { var set = new HashSet <int>((int)size_chains_hash); while (set.Count != size_chains_hash) { set.Add(rnd.Next(-(int)size_chains_hash, (int)size_chains_hash)); } var arr = new int[set.Count]; set.CopyTo(arr); Console.WriteLine($"Введите искомый элемент"); int item = int.Parse(Console.ReadLine()); sw.Start(); var start = DateTime.Now; ChainHash hash = new ChainHash(arr); var end = DateTime.Now; sw.Stop(); Console.WriteLine($"Затраченное время на хеширование: {/*sw.Elapsed*/start - end}."); sw.Reset(); sw.Start(); start = DateTime.Now; bool index = hash.HasValue(item); end = DateTime.Now; sw.Stop(); Console.WriteLine($"Искомый элемент присутствует в хеш-таблице: {index}"); Console.WriteLine($"Затраченное время на поиск: {/*sw.Elapsed*/start - end}."); sw.Reset(); Console.WriteLine("\nВведите размерность массива для повторной генерации или 0 для перехода к следующему заданию."); size_simp_hash = long.Parse(Console.ReadLine()); } #endregion #endif #endregion #region Task 3 #if chess #region Chess Console.WriteLine("Введите значение от 1 до 24 для вывода результата поиска или 0 для выхода."); var key = int.Parse(Console.ReadLine()); while (key != 0) { sw.Start(); Console.WriteLine($"\nВарианты расстановки ферзей:\n"); var start = DateTime.Now; Chess(key); var end = DateTime.Now; sw.Stop(); Console.WriteLine($"Затраченное время на выполнение: {/*sw.Elapsed*/start - end}."); sw.Reset(); Console.WriteLine("\nВведите любое значение кроме 0 для вывода результата поиска или 0 для выхода."); key = int.Parse(Console.ReadLine()); } #endregion #endif #endregion }