Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
4 курс / Курсовая работа.docx
Скачиваний:
0
Добавлен:
26.01.2026
Размер:
410.5 Кб
Скачать

Лабораторная работа №2 «Методы поиска» Вариант №12 «Метод цепочек»

Цель работы:

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

Ход работы:

Для реализации целей лабораторной работы выбрала язык программирования Python. Для поиска методом цепочек я использовала хэш-таблицы:

def __init__(self, size): self.size = size self.table = [[] for _ in range(size)]

Заполняю таблицу случайными значениями, количество которых регулируется введенными значениями:

def generate_random_data(size): keys = random.sample(range(1, size * 10), size) values = [random.randint(1, 100) for _ in range(size)] return list(zip(keys, values))

Создаём функции удаления, вставки и поиска значений:

def insert(self, key, value): index = self._hash(key) for kvp in self.table[index]: if kvp[0] == key: kvp[1] = value return self.table[index].append([key, value]) def search(self, key): index = self._hash(key) for kvp in self.table[index]: if kvp[0] == key: return kvp[1] return None def delete(self, key): index = self._hash(key) for i, kvp in enumerate(self.table[index]): if kvp[0] == key: del self.table[index][i] return raise KeyError(f"Key {key} not found")

Проводим замеры поиска при помощи Метода цепочек и стандартного функционала Python:

search_time = measure_time(lambda: [hash_table.search(k) for k, _ in data]) print(f"Время поиска {size} элементов в хэш-таблице: {search_time:.2f} мкс")

dict_search_time = measure_time(lambda: [python_dict.get(k) for k, _ in data]) print(f"Время поиска {size} элементов в словаре Python: {dict_search_time:.2f} мкс")

Результаты замеров:

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

Метод цепочек, мс

Стандартный Python, мс

10000

1.99

1

100000

31.77

12.88

1000000

496.68

83.64

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

import time import random class HashTable: def __init__(self, size): self.size = size self.table = [[] for _ in range(size)] def _hash(self, key): return hash(key) % self.size def insert(self, key, value): index = self._hash(key) for kvp in self.table[index]: if kvp[0] == key: kvp[1] = value return self.table[index].append([key, value]) def search(self, key): index = self._hash(key) for kvp in self.table[index]: if kvp[0] == key: return kvp[1] return None def delete(self, key): index = self._hash(key) for i, kvp in enumerate(self.table[index]): if kvp[0] == key: del self.table[index][i] return raise KeyError(f"Key {key} not found") def generate_random_data(size): keys = random.sample(range(1, size * 10), size) values = [random.randint(1, 100) for _ in range(size)] return list(zip(keys, values)) def measure_time(func, *args): start_time = time.time() func(*args) return (time.time() - start_time) * 1000 def run_test(size): data = generate_random_data(size) hash_table = HashTable(size) python_dict = {} search_time = measure_time(lambda: [hash_table.search(k) for k, _ in data]) print(f"Время поиска {size} элементов в хэш-таблице: {search_time:.2f} мс") dict_search_time = measure_time(lambda: [python_dict.get(k) for k, _ in data]) print(f"Время поиска {size} элементов в словаре Python: {dict_search_time:.2f} мс") print("-" * 60) def main(): for i in range(3): size = int(input(f"Введите размер массива для теста {i + 1}: ")) run_test(size) if __name__ == "__main__": main()

Вывод:

В связи с произведенными испытаниями производительности функции поиска при помощи Метода цепочек и последующем сравнением с основной функцией языка программирования Python можно подвести вывод. Хэш-таблица с методом цепочек успешно справляется с задачами вставки, поиска и удаления элементов, но уступает по производительности встроенному словарю Python.

Соседние файлы в папке 4 курс