2026-03-30 14:47:24 +00:00
|
|
|
|
{
|
|
|
|
|
|
"cells": [
|
|
|
|
|
|
{
|
|
|
|
|
|
"cell_type": "markdown",
|
|
|
|
|
|
"id": "2acfa743",
|
|
|
|
|
|
"metadata": {},
|
|
|
|
|
|
"source": [
|
|
|
|
|
|
"# 0. Подготовим окружение"
|
|
|
|
|
|
]
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
"cell_type": "code",
|
2026-04-05 07:06:28 +00:00
|
|
|
|
"execution_count": 26,
|
2026-03-30 14:47:24 +00:00
|
|
|
|
"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",
|
2026-04-05 07:06:28 +00:00
|
|
|
|
"execution_count": 27,
|
2026-04-02 22:31:26 +00:00
|
|
|
|
"id": "a3b5c31b",
|
2026-03-30 14:47:24 +00:00
|
|
|
|
"metadata": {},
|
|
|
|
|
|
"outputs": [],
|
|
|
|
|
|
"source": [
|
|
|
|
|
|
"from util.randomNames import generate_test_data\n",
|
2026-04-02 22:31:26 +00:00
|
|
|
|
"from util.timeTester import test\n",
|
2026-03-30 14:47:24 +00:00
|
|
|
|
"\n",
|
2026-04-02 22:31:26 +00:00
|
|
|
|
"records_shuffled = generate_test_data(N=10000)\n",
|
|
|
|
|
|
"records_sorted = generate_test_data(N=10000, _sorted=True)"
|
2026-03-30 14:47:24 +00:00
|
|
|
|
]
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
"cell_type": "markdown",
|
|
|
|
|
|
"id": "c2f4989c",
|
|
|
|
|
|
"metadata": {},
|
|
|
|
|
|
"source": [
|
2026-04-02 22:31:26 +00:00
|
|
|
|
"# 2. Проведение замеров"
|
2026-03-30 14:47:24 +00:00
|
|
|
|
]
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
"cell_type": "code",
|
2026-04-05 07:06:28 +00:00
|
|
|
|
"execution_count": 28,
|
2026-04-02 22:31:26 +00:00
|
|
|
|
"id": "df12d41d",
|
2026-03-30 14:47:24 +00:00
|
|
|
|
"metadata": {},
|
2026-04-02 22:31:26 +00:00
|
|
|
|
"outputs": [],
|
2026-03-30 14:47:24 +00:00
|
|
|
|
"source": [
|
2026-04-02 22:31:26 +00:00
|
|
|
|
"# Подготовим функции СД, которые будем тестировать\n",
|
2026-03-30 14:47:24 +00:00
|
|
|
|
"from structures.LinkedList import *\n",
|
|
|
|
|
|
"from structures.HashTable import *\n",
|
|
|
|
|
|
"from structures.BinaryTree import *\n",
|
|
|
|
|
|
"\n",
|
2026-04-02 22:31:26 +00:00
|
|
|
|
"func_list = {\"Связанный список\" : (ll_insert, ll_find, ll_delete),\n",
|
|
|
|
|
|
" \"Хэш-таблица\" : (ht_insert, ht_find, ht_delete),\n",
|
|
|
|
|
|
" \"Бинарное дерево\" : (bst_insert, bst_find, bst_delete)}"
|
2026-03-30 14:47:24 +00:00
|
|
|
|
]
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
2026-04-02 22:31:26 +00:00
|
|
|
|
"cell_type": "code",
|
2026-04-05 07:06:28 +00:00
|
|
|
|
"execution_count": 29,
|
2026-04-02 22:31:26 +00:00
|
|
|
|
"id": "cc8d0436",
|
2026-03-30 14:47:24 +00:00
|
|
|
|
"metadata": {},
|
2026-04-02 22:31:26 +00:00
|
|
|
|
"outputs": [],
|
2026-03-30 14:47:24 +00:00
|
|
|
|
"source": [
|
2026-04-02 22:31:26 +00:00
|
|
|
|
"# Проведём замеры\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)"
|
2026-03-30 14:47:24 +00:00
|
|
|
|
]
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
"cell_type": "code",
|
2026-04-05 07:06:28 +00:00
|
|
|
|
"execution_count": 30,
|
2026-04-02 22:31:26 +00:00
|
|
|
|
"id": "2eedf056",
|
2026-03-30 14:47:24 +00:00
|
|
|
|
"metadata": {},
|
|
|
|
|
|
"outputs": [],
|
2026-04-02 22:31:26 +00:00
|
|
|
|
"source": [
|
|
|
|
|
|
"# Сохраним данные в csv\n",
|
|
|
|
|
|
"import csv\n",
|
|
|
|
|
|
"with open(\"data/results.csv\", \"w\", newline=\"\") as f:\n",
|
|
|
|
|
|
" writer = csv.writer(f)\n",
|
|
|
|
|
|
" writer.writerows(report)"
|
|
|
|
|
|
]
|
2026-04-05 07:06:28 +00:00
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
"cell_type": "code",
|
|
|
|
|
|
"execution_count": null,
|
|
|
|
|
|
"id": "8523ae48",
|
|
|
|
|
|
"metadata": {},
|
|
|
|
|
|
"outputs": [],
|
|
|
|
|
|
"source": [
|
|
|
|
|
|
"TODO проверить работает ли оно вообще"
|
|
|
|
|
|
]
|
2026-03-30 14:47:24 +00:00
|
|
|
|
}
|
|
|
|
|
|
],
|
|
|
|
|
|
"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",
|
2026-04-02 22:31:26 +00:00
|
|
|
|
"version": "3.14.3"
|
2026-03-30 14:47:24 +00:00
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
"nbformat": 4,
|
|
|
|
|
|
"nbformat_minor": 5
|
|
|
|
|
|
}
|