{ "cells": [ { "cell_type": "markdown", "id": "2acfa743", "metadata": {}, "source": [ "# 0. Подготовим окружение" ] }, { "cell_type": "code", "execution_count": 26, "id": "4689b73e", "metadata": {}, "outputs": [], "source": [ "import sys\n", "import os\n", "sys.path.insert(0, os.path.abspath( '../task1'))\n", "sys.path.insert(0, os.path.abspath( '../'))" ] }, { "cell_type": "markdown", "id": "37cc11a5", "metadata": {}, "source": [ "# 1. Генерация тестовых данных\n", "\n", "Создадим список records из N=10000 элементов. Каждый элемент — кортеж (name, phone). \n", "Имена возъмём случайные из небольшого набора (чтобы были повторения и коллизии). \n", "Для проверки влияния порядка подготовим два варианта: \n", "\n", "_records_shuffled_ — случайный порядок. \n", "_records_sorted_ — отсортированный по имени (по алфавиту)." ] }, { "cell_type": "code", "execution_count": 27, "id": "a3b5c31b", "metadata": {}, "outputs": [], "source": [ "from util.randomNames import generate_test_data\n", "from util.timeTester import test\n", "\n", "records_shuffled = generate_test_data(N=10000)\n", "records_sorted = generate_test_data(N=10000, _sorted=True)" ] }, { "cell_type": "markdown", "id": "c2f4989c", "metadata": {}, "source": [ "# 2. Проведение замеров" ] }, { "cell_type": "code", "execution_count": 28, "id": "df12d41d", "metadata": {}, "outputs": [], "source": [ "# Подготовим функции СД, которые будем тестировать\n", "from structures.LinkedList import *\n", "from structures.HashTable import *\n", "from structures.BinaryTree import *\n", "\n", "func_list = {\"Связанный список\" : (ll_insert, ll_find, ll_delete),\n", " \"Хэш-таблица\" : (ht_insert, ht_find, ht_delete),\n", " \"Бинарное дерево\" : (bst_insert, bst_find, bst_delete)}" ] }, { "cell_type": "code", "execution_count": 29, "id": "cc8d0436", "metadata": {}, "outputs": [], "source": [ "# Проведём замеры\n", "report = [[\"Структура\", \"Режим\", \"Вставка\", \"Поиск\", \"Удаление\"]]\n", "records = {\"Cлучайный\" : records_shuffled, \"Отсортированный\" : records_sorted}\n", "\n", "TEST_ITERATIONS_NUM = 5\n", "\n", "for _ in range(TEST_ITERATIONS_NUM):\n", " for mode, data in records.items():\n", " for struct_name, fns in func_list.items():\n", " result = test(data, *fns)\n", " row = [struct_name, mode,\n", " result[\"insert_time\"],\n", " result[\"find_time\"],\n", " result[\"delete_time\"]]\n", " report.append(row)" ] }, { "cell_type": "code", "execution_count": 30, "id": "2eedf056", "metadata": {}, "outputs": [], "source": [ "# Сохраним данные в csv\n", "import csv\n", "with open(\"data/results.csv\", \"w\", newline=\"\") as f:\n", " writer = csv.writer(f)\n", " writer.writerows(report)" ] }, { "cell_type": "code", "execution_count": null, "id": "8523ae48", "metadata": {}, "outputs": [], "source": [ "TODO проверить работает ли оно вообще" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.14.3" } }, "nbformat": 4, "nbformat_minor": 5 }