- •Лабораторная работа №1. Методы сортировки Цель работы
- •Ход работы
- •Результат работы программы
- •Код программы
- •Лабораторная работа №2. Методы поиска Цель работы
- •Код программы
- •Результат работы программы
- •Лабораторная работа №3. Методы поиска подстроки в строке Цель работы
- •Код программы
- •Результат работы программы
- •Список литературы
Результат работы программы
Таблица 1 – Время поиска элемента массива
Метод поиска |
Бинарный, мс |
Встроенный, мс |
Размер массива |
||
5000 |
0,23 |
0,13 |
50000 |
0,20 |
0,15 |
500000 |
0,21 |
0,13 |
5000000 |
0,20 |
0,66 |
Вывод
В ходе выполнения работы был написан программный код на языке С#, создающий отсортированный массив и реализующий два метода поиска, встроенный и бинарный, для этого массива. В результате экспериментов было выяснено, что время, затрачиваемое на бинарный поиск, практически не зависит от размера массива, тогда как встроенный поиск на больших объемах начинает требовать заметно больше времени.
По итогу можно сказать, что встроенный метод поиска работает эффективней бинарного, если в массиве не очень много элементов и нужный элемент расположен не сильно далеко от начала, в то время как в больших и сверхбольших массивах, при расположении элемента дальше от начала или его отсутствии, бинарный метод становиться эффективней встроенного.
Лабораторная работа №3. Методы поиска подстроки в строке Цель работы
Реализовать заданный метод поиска подстроки в строке в соответствии с индивидуальным заданием. Для всех вариантов добавить реализацию добавления строк, ввода подстроки и поиска подстроки. Предусмотреть возможность существования пробела. Ввести опцию чувствительности / нечувствительности к регистру. Оценить время работы каждого алгоритма поиска и сравнить его со временем работы стандартной функции поиска, используемой в выбранном языке программирования.
Вариант 9. Поиск методом: упрощенный Бойера-Мура.
Код программы
using System;
using System.Collections.Generic;
using System.Diagnostics;
namespace LR3
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Введите строку");
string MainString = Console.ReadLine();
string SubString = "";
string result = "";
int select;
do
{
Console.WriteLine("Введите цифру, соответствующую номеру желаемой операции:");
Console.WriteLine("1 - ввести подстроку, 2 - найти подстроку, 3 - вывод строки и подстроки, 4 - завершение работы");
Stopwatch stopwatch = new Stopwatch();
select = int.Parse(Console.ReadLine());
switch (select)
{
case 1:
Console.WriteLine("Введите подстроку");
SubString = Console.ReadLine();
Console.WriteLine(@"Текущая подстрока: {0}", SubString);
break;
case 2:
stopwatch.Start();
Console.WriteLine(FindSubstring(MainString, SubString));
stopwatch.Stop();
TimeSpan resultTime = stopwatch.Elapsed;
Console.WriteLine(@"Время работы метода упрощённого Бойера-Мура: {0}", resultTime);
stopwatch.Reset();
Console.WriteLine("");
stopwatch.Start();
result = Convert.ToString(MainString.IndexOf(SubString));
stopwatch.Stop();
if (result == "-1") Console.WriteLine("Подстрока не найдена.");
else Console.WriteLine(@"Подстрока найдена начиная с {0} по {1} символы.", int.Parse(result) + 1, int.Parse(result) + SubString.Length);
resultTime = stopwatch.Elapsed;
Console.WriteLine(@"Время работы встроенного поиска: {0}", resultTime);
Console.WriteLine("");
break;
case 3:
Console.WriteLine(@"Строка: {0}", MainString);
Console.WriteLine(@"Текущая подстрока: {0}", SubString);
break;
case 4:
Console.WriteLine("Работа программы завершена");
break;
default:
Console.WriteLine("Ошибка выбора");
break;
}
} while (select != 4);
}
//Поиск подстроки
static string FindSubstring(string MainString, string SubString)
{
string[,] table = new string[SubString.Length, 2];
int count = 0;
bool check = false;
for (int i = SubString.Length - 1; i >= 0; i--)
{
check = true;
for (int j = 0; j < SubString.Length; j++) if (table[j, 0] == SubString[i].ToString()) check = false;
if (check)
{
table[i, 0] = SubString[i].ToString();
table[i, 1] = count.ToString();
count++;
}
}
int n = 0;
while (n + SubString.Length - 1 <= MainString.Length - 1)
{
check = true;
int number = SubString.Length;
for (int i = SubString.Length - 1; i >= 0; i--)
{
if (SubString[i] != MainString[i + n])
{
for (int j = 0; j < SubString.Length - 1; j++) if (table[j, 0] == MainString[i + n].ToString() && number == SubString.Length) number = int.Parse(table[j, 1]);
check = false;
}
}
n += number;
if (check)
{
return ("Подстрока найдена начиная с " + (n - SubString.Length + 1) + " по " + n + " символы.");
}
}
return ("Подстрока не найдена.");
}
}
}
