Professional Documents
Culture Documents
ЛАБА 2
ЛАБА 2
Хід роботи
Завдання:
1. Довільно обрати текст Т у вигляді набора чисел, що складається
мінімум з 15 символів та зразок Р, який необхідно знайти. Знайти
зразок Р у тексті Т, використовуючи алгоритм алгоритм бінарного
пошук.
2. Задано: текст Т, підрядок P, який треба знайти, просте число q (табл.
2.1), алфавіт {0,1,2,3,4,5,6,7,8,9}, d=10, h = dm-1
3. Знайти всі входження зразка Р в текст Т, використовуючи алгоритм
ТА
Змн.
Затверд.
Перевір.Рабіна-Карпа.
Н. Контр.
Розроб.Арк. Гречушкiн
Ляшок В.Г.I.M. .
№ докум. Підпис Дата КНУ ЛР.151.21.03.02
Літ. АКНТ1 КН-22-1
Арк. Аркушів
Бінарний пошук:
Код программи :
class Program
{
//Текст - Т = hdacbaccbacabadhac
//Зразок - Р = baccbacaba
public static int BinarySearch(string text, string pattern)
{
int left = 0;
int right = text.Length - pattern.Length;
if (found)
return mid + 1; // Додаємо 1 до позиції і повертаємо
else if (string.Compare(pattern, 0, text, mid, pattern.Length) < 0)
right = mid - 1;
else
left = mid + 1;
}
if (result != -1)
Console.WriteLine($"Зразок Р знайдено за допомогою бiнарного пошуку на позицiї {result}");
else
Console.WriteLine("Зразок Р не знайдено за допомогою бiнарного пошуку");
}
}
Арк.
Лабораторна робота 1
Ручна реалізація:
Арк.
Лабораторна робота 1
Пошук Рабіна-Карпа
Код программи:
class Program
{
static int CalculateHash(string str, int q, int d)
{
int hash = 0;
int m = str.Length;
return hash;
}
int d = 10;
int h = 1;
for (int i = 0; i < pattern.Length - 1; i++)
{
h = (h * d) % q;
}
if (!found)
{
Console.WriteLine("Входження пiдрядка P не знайдено в текстi Т.");
}
Арк.
Лабораторна робота 1
}
}
Ручна реалізація:
Пошук Бойєра-Мура
Код программи:
Арк.
Лабораторна робота 1
lass BoyerMoore
{
static int[] BuildBadCharTable(string pattern)
{
int[] badCharTable = new int[256];
return badCharTable;
}
int s = 0;
while (s <= n - m)
{
int j = m - 1;
while (j >= 0 && pattern[j] == text[s + j])
{
j--;
}
if (j < 0)
{
positions.Add(s);
s += m;
}
else
{
s += Math.Max(1, j - badCharTable[text[s + j]]);
}
}
return positions;
}
Console.WriteLine("Введiть зразок:");
string pattern = Console.ReadLine();
if (positions.Count > 0)
{
Console.WriteLine("Зразок знайдено на позицiях:");
foreach (int position in positions)
{
Console.WriteLine(position);
}
Арк.
Лабораторна робота 1
}
else
{
Console.WriteLine("Зразок не знайдено в текстi.");
}
}
}
Ручна реалізація:
Арк.
Лабораторна робота 1
Висновок: виконуючи лабораторну роботу, я ознайомився з алгоритмами
пошуку, а саме з бінарним, Рабіна-Карпа та Бойєра-Мура. На мою думку
найзручнішим виявився бінарний алгоритм, потім по зручності йде алгортим
Байера-мура, і найбільш не зручним виявився алгоритм Рабіна-Карпа.
Арк.
Лабораторна робота 1