You are on page 1of 4

Міністерство освіти і науки України

НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ


«ХАРКІВСЬКИЙ ПОЛІТЕХНІЧНИЙ ІНСТИТУТ»

Навчально-науковий інститут комп'ютерних наук та інформаційних технологій

Кафедра «Обчислювальна техніка та програмування»

ЗВІТ

з дисципліни "АЛГОРИТМИ ТА СТРУКТУРИ ДАНИХ"

про виконання Практичної роботи №9

АЛГОРИТМИ ПРОСТИХ ПОШУКІВ

Виконав: студент групи КН-1022В


Гасюк М.О.

Перевірив: Доцент ОТП


Бречко В.О.

Харків-2023
2

Мета: набути навичок та закріпити знання при виконанні операцій

пошуку.

Завдання №1.

Варіант 6
Код програми

using System;
using System.Diagnostics;

class Program
{
static int LinearSearchWithBarrier(int[] arr, int target)
{
int comparisons = 0;
int n = arr.Length;
arr[n - 1] = target; // Додаємо бар'єр в останній елемент масиву

for (int i = 0; ; i++)


{
comparisons++; // Збільшуємо кількість порівнянь
if (arr[i] == target)
{
if (i < n - 1)
{
return comparisons; // Знайдено, повертаємо кількість порівнянь
}
return -1; // Пошук завершено, але не знайдено
}
}
}

static int BinarySearch(int[] arr, int target)


{
Array.Sort(arr);
int comparisons = 0;
int left = 0;
int right = arr.Length - 1;

while (left <= right)


{
int mid = left + (right - left) / 2;
comparisons++;

if (arr[mid] == target)
{
return comparisons;
}
if (arr[mid] < target)
{
left = mid + 1;
}
else
{
right = mid - 1;
3

}
}

return -1;
}

static void Main()


{
Console.OutputEncoding = System.Text.Encoding.Unicode;
Console.InputEncoding = System.Text.Encoding.Unicode;
int[] dataSizes = { 20, 100, 1000, 10000 };

foreach (int dataSize in dataSizes)


{
int[] data = new int[dataSize];
Random random = new Random();

for (int i = 0; i < data.Length; i++)


{
data[i] = random.Next(1, 10000);
}

int target = data[random.Next(0, data.Length)];

Stopwatch linearStopwatch = new Stopwatch();


linearStopwatch.Start();
int linearComparisons = LinearSearchWithBarrier(data, target);
linearStopwatch.Stop();

int[] dataCopy = new int[data.Length];


Array.Copy(data, dataCopy, data.Length);

Stopwatch binaryStopwatch = new Stopwatch();


binaryStopwatch.Start();
int binaryComparisons = BinarySearch(dataCopy, target);
binaryStopwatch.Stop();

Console.WriteLine("Кількість елементів: " + dataSize);


Console.WriteLine("Елемент для пошуку: " + target);
Console.WriteLine("Бінарний пошук: Знайдено за " + binaryStopwatch.Elapsed + " з " + binaryComparisons + "
порівнянь");
Console.WriteLine("Лінійний пошук з бар'єром: Знайдено за " + linearStopwatch.Elapsed + " з " + linearComparisons
+ " порівнянь");
Console.WriteLine();
Console.ReadLine();
}
}
}
4

Рисунок 1.1 – код програми для реалізації 2 алгоритмів


Кількість 20 100 1000 10000
елементів
Кількість 2 5 9 11
порівнянь
Час пошуку 00:00:00.0016915 00:00:00.000007 00:00:00.0000448 00:00:00.0005608
5

Таблиця 9.1 – Результати тестування алгоритмів бінарного пошуку

Кількість 20 100 1000 10000


елементів
Кількість 5 72 18 1326
порівнянь
Час пошуку 00:00:00.0003434 00:00:00.000000 00:00:00.0000005 00:00:00.0000031
6

Таблиця 9.2 – Результати тестування алгоритмів лінійного пошуку

Висновки: отримав та закріпив знання про внутрішнє (комп’ютерне)

подання числових типів даних у мовах програмування.

You might also like