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 }
static void Main(string[] args) { int SizeMyArray = 11; int[] MyArray = new int[SizeMyArray]; MyArray[SizeMyArray - 2] = 4965; MyArray[SizeMyArray - 1] = 1000; Random rn = new Random(); for (int i = 0; i < SizeMyArray - 2; i++) { MyArray[i] = rn.Next(100, 5000); } Console.WriteLine("Задание №1" + "\r\n"); PrintArray(MyArray); Console.WriteLine("\r\n" + "1.Интерпаляционный поиск"); Console.WriteLine("Индекс числа 4965 = " + InterpolationSearch(MyArray, 4965) + "\r\n"); Console.WriteLine("\r\n" + "2.Нахождение индекса элемента 4965 с помощью бинарного поиска: " + BinarySearch(MyArray, 4965, 0, MyArray.Length - 1)); var binaryTree = new BinaryTree(); Random rand = new Random(); for (int i = 0; i < 9; i++) { binaryTree.Add(new BinaryTreeNode(rand.Next(0, 50))); } Console.WriteLine("\r\n" + "3.Бинарное дерево"); binaryTree.PrintTree(); Console.WriteLine("Добавим новый элемент"); binaryTree.Add(new BinaryTreeNode(66)); binaryTree.PrintTree(); binaryTree.FindNode(66); Console.WriteLine("Удалим его"); binaryTree.Remove(66); binaryTree.PrintTree(); Console.WriteLine("\r\n" + "4.Фиббоначиев поиск" + "\r\n"); PrintArray(MyArray); Console.WriteLine("Найдено ли число 4965 = " + FibbonachiSearch2(MyArray, 4965, MyArray.Length)); Console.WriteLine("\r\n" + "Задание №2" + "\r\n"); Console.WriteLine("1.Поиск по map, в которой коллизии решаются простым рехэшированием"); Map <int, string> MyMap = new Map <int, string>(); MyMap.Add(new ItemMap <int, string>(1, "Один")); MyMap.Add(new ItemMap <int, string>(1, "Один")); MyMap.Add(new ItemMap <int, string>(2, "Два")); MyMap.Add(new ItemMap <int, string>(3, "Три")); MyMap.Add(new ItemMap <int, string>(4, "Четыре")); MyMap.Add(new ItemMap <int, string>(5, "Пять")); MyMap.Add(new ItemMap <int, string>(101, "Сто один")); Console.WriteLine("Исходная карта:"); foreach (var item in MyMap) { Console.WriteLine(item); } Console.WriteLine("\r\n" + "Ищем число c ключем 7 " + (MyMap.Search(7) ?? "Не найдено")); Console.WriteLine("Ищем число c ключем 101 " + (MyMap.Search(101) ?? "Не найдено")); MyMap.Remove(1); MyMap.Remove(101); Console.WriteLine("\r\n" + "Удалили 1 и 101 "); foreach (var item in MyMap) { Console.WriteLine(item); } Console.WriteLine("\r\n" + "2.Поиск по map, в которой коллизии решаются случайным рехэшированием"); Map <int, string> MyMap2 = new Map <int, string>(); MyMap2.Add(new ItemMap <int, string>(2, "Два")); MyMap2.Add(new ItemMap <int, string>(2, "Два")); MyMap2.Add(new ItemMap <int, string>(9, "Девять")); MyMap2.Add(new ItemMap <int, string>(3, "Три")); MyMap2.Add(new ItemMap <int, string>(4, "Четыре")); MyMap2.Add(new ItemMap <int, string>(5, "Пять")); MyMap2.Add(new ItemMap <int, string>(102, "Сто два")); Console.WriteLine("Исходная карта:"); foreach (var item in MyMap2) { Console.WriteLine(item); } Console.WriteLine("\r\n" + "Ищем число c ключем 7 " + (MyMap2.Search(7) ?? "Не найдено")); Console.WriteLine("Ищем число c ключем 102 " + (MyMap2.Search(102) ?? "Не найдено")); MyMap2.Remove(2); MyMap2.Remove(102); Console.WriteLine("\r\n" + "Удалили 2 и 102 "); foreach (var item in MyMap2) { Console.WriteLine(item); } Console.WriteLine("\r\n" + "3.Поиск по хэш таблице, в которой коллизии решаются методом цепочек"); Console.WriteLine("Исходная таблица:"); HashTable <int> MyHashTable = new HashTable <int>(5); MyHashTable.Add(2); MyHashTable.Add(24); MyHashTable.Add(65); MyHashTable.Add(8); MyHashTable.Add(51); MyHashTable.Add(61); MyHashTable.PrintHashTable(); Console.WriteLine("\r\n" + "Содержит ли хэш таблица число 42 " + MyHashTable.Search(42)); Console.WriteLine("Содержит ли хэш таблица число 8 " + MyHashTable.Search(8)); MyHashTable.Delate(24); MyHashTable.Delate(51); Console.WriteLine("\r\n" + "Удалили 24 и 51 "); MyHashTable.PrintHashTable(); Console.WriteLine("\r\n" + "Задание №3"); Console.WriteLine("Расстановка ферзей на поле : (ферзь = 1)" + "\r\n"); Chess MyChess = new Chess(); MyChess.Arrange(); Console.ReadLine(); }