Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СиАОД_ЛабРаб-2_Вар9.docx
Скачиваний:
0
Добавлен:
18.01.2026
Размер:
161.46 Кб
Скачать

Результат работы программы

Таблица 1 – Время поиска элемента массива

Метод поиска

Бинарный, мс

Встроенный, мс

Размер массива

5000

0,23

0,13

50000

0,20

0,15

500000

0,21

0,13

5000000

0,20

0,66

Вывод

В ходе выполнения работы был написан программный код на языке С#, создающий отсортированный массив и реализующий два метода поиска, встроенный и бинарный, для этого массива. В результате экспериментов было выяснено, что время, затрачиваемое на бинарный поиск, практически не зависит от размера массива, тогда как встроенный поиск на больших объемах начинает требовать заметно больше времени.

По итогу можно сказать, что встроенный метод поиска работает эффективней бинарного, если в массиве не очень много элементов и нужный элемент расположен не сильно далеко от начала, в то время как в больших и сверхбольших массивах, при расположении элемента дальше от начала или его отсутствии, бинарный метод становиться эффективней встроенного.

Задание 2 Цель работы

Реализовать заданный метод поиска в соответствии с индивидуальным заданием. Организовать генерацию начального набора случайных данных. Для всех вариантов добавить реализацию добавления, поиска и удаления элементов. Оценить время работы каждого алгоритма поиска и сравнить его со временем работы стандартной функции поиска, используемой в выбранном языке программирования.

Вариант 9 Метод поиска: метод цепочек

Код программы

using System;

using System.Collections.Generic;

using System.Diagnostics;

class HashTable

{

private int size;

private List<(int, string)>[] table;

public HashTable(int size)

{

this.size = size;

table = new List<(int, string)>[size];

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

{

table[i] = new List<(int, string)>();

}

}

private int HashFunction(int key)

{

return key % size;

}

public void Insert(int key, string value)

{

int index = HashFunction(key);

table[index].Add((key, value));

}

public string Search(int key)

{

int index = HashFunction(key);

foreach (var item in table[index])

{

if (item.Item1 == key)

return item.Item2;

}

return null;

}

}

class Program

{

static void Main(string[] args)

{

Console.WriteLine("Введите размер хэш-таблицы");

int n = int.Parse(Console.ReadLine());

Console.WriteLine("Введите искомое число");

int tableSize = n;

HashTable hashTable = new HashTable(tableSize);

Random random = new Random(53);

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

{

hashTable.Insert(random.Next(100), $"Value{i}");

}

int searchKey = int.Parse(Console.ReadLine());

Stopwatch stopwatch = new Stopwatch();

stopwatch.Start();

string foundValue = hashTable.Search(searchKey);

stopwatch.Stop();

if (foundValue != null)

{

Console.WriteLine($"Найденное значение для ключа {searchKey}: {foundValue}");

}

else

{

Console.WriteLine($"Значение для ключа {searchKey} не найдено.");

}

Console.WriteLine($"Время выполнения поиска методом цепочек: {stopwatch.Elapsed}");

Dictionary<int, string> dictionary = new Dictionary<int, string>();

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

{

dictionary[random.Next(100)] = $"Value{i}";

}

stopwatch.Reset();

stopwatch.Start();

string dictionaryValue;

if (dictionary.TryGetValue(searchKey, out dictionaryValue))

Console.WriteLine($"Найденное значение для ключа {searchKey} (стандартный поиск): {dictionaryValue}");

else

Console.WriteLine($"Значение для ключа {searchKey} не найдено (стандартный поиск)");

stopwatch.Stop();

Console.WriteLine($"Время выполнения стандартного поиска: {stopwatch.Elapsed}");

}

}

Выполнение программы:

N

Метод цепочек

Стандартный поиск

1

0.0007966

0.0000386

2

0.0007143

0.0000333

3

0.0007754

0.0000403

Вывод

В данной лабораторной работе был написан код программы, ищущий элемент хэш таблицы разными алгоритмами. В ходе работы было выяснено, какой из алгоритмов справляется с задачей быстрее.