forked from UNN/2026-rff_mp
149 lines
4.2 KiB
Plaintext
149 lines
4.2 KiB
Plaintext
{
|
||
"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
|
||
}
|