Esempio n. 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
        }
Esempio n. 2
0
        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();
        }