예제 #1
0
        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
        }