Bag fix and add test for LinkedList

This commit is contained in:
4eker 2026-05-05 22:20:24 +03:00
parent f6478ee72e
commit 247e9a1224
4 changed files with 209 additions and 12 deletions

View File

@ -1,6 +1,6 @@
from LinkedList import ll_insert, ll_find, ll_delete, ll_list_all
def ht_create(size = 1000):
def create_ht(size = 1000):
return[None] * size
def hash_function(name, size = 1000):

View File

@ -10,7 +10,7 @@ def ll_insert(head, name, phone):
return node
# Случай если надо перезаписать имя
current = head
current = head
while current:
if current["name"] == name:
current["phone"] = phone
@ -21,7 +21,8 @@ def ll_insert(head, name, phone):
current = head
while current["next"]:
current = current["next"]
current["head"] = "node"
current["next"] = node
return head
def ll_find(head, name):
current = head
@ -29,7 +30,7 @@ def ll_find(head, name):
if current["name"] == name:
return current["phone"]
current = current["next"]
return None
return "Нет данных"
def ll_delete(head, name):
# Случай для пустого списка
@ -42,7 +43,7 @@ def ll_delete(head, name):
# Случай для поиска элемента
current = head
while current:
while current["next"]:
if current["next"]["name"] == name:
current['next'] = current["next"]["next"]
return head

View File

@ -2,21 +2,217 @@
"cells": [
{
"cell_type": "code",
"execution_count": null,
"execution_count": 51,
"id": "c533959c",
"metadata": {},
"outputs": [],
"source": [
"import LinkedList as ll\n",
"import HashTable as ht\n",
"import BinaryTree as bt\n",
"import time \n",
"import random as rand\n",
"import csv\n",
"import numpy as np"
]
},
{
"cell_type": "markdown",
"id": "15cd6183",
"metadata": {},
"source": [
"## Данные для обработки"
]
},
{
"cell_type": "code",
"execution_count": 52,
"id": "88611f78",
"metadata": {},
"outputs": [],
"source": [
"N = 10000\n",
"records_sorted = [(f\"User_{i:05d}\", f\"+7999{i:07d}\") for i in range(N)] \n",
"records_shuffled = records_sorted.copy()\n",
"rand.shuffle(records_shuffled) "
]
},
{
"cell_type": "markdown",
"id": "9fd1b8cd",
"metadata": {},
"source": [
"## Исследование для LinkedList "
]
},
{
"cell_type": "markdown",
"id": "083d49d0",
"metadata": {},
"source": [
"### Добавление всех элементов произвольного кортежа\n",
"- **data_ll_sh** - структура произвольных данных (только последний замер)\n",
"- **time_ll_insert_sh** - Замер времени работы 10000 элементов (5 замеров) "
]
},
{
"cell_type": "code",
"execution_count": 53,
"id": "11634fa4",
"metadata": {},
"outputs": [],
"source": [
"time_ll_insert_sh = [] \n",
"for n in range(5):\n",
" head = None\n",
" data_ll_sh = []\n",
" start = time.perf_counter()\n",
" for i in range(N):\n",
" head = ll.ll_insert(head, records_shuffled[i][0], records_shuffled[i][1])\n",
" data_ll_sh.append(head)\n",
" end = time.perf_counter()\n",
" time_ll_insert_sh.append(end - start)"
]
},
{
"cell_type": "markdown",
"id": "0a5f161e",
"metadata": {},
"source": [
"### Добавление всех элементов сортированного кортежа\n",
"- **data_ll_so** - Структура отсортированных данных (только последний замер)\n",
"- **time_ll_insert_so** - Замер времени работы 10000 элементов (5 замеров) "
]
},
{
"cell_type": "code",
"execution_count": 54,
"id": "9eab4641",
"metadata": {},
"outputs": [],
"source": [
"time_ll_insert_so = [] \n",
"for n in range(5):\n",
" head = None\n",
" data_ll_so = []\n",
" start = time.perf_counter()\n",
" for i in range(N):\n",
" head = ll.ll_insert(head, records_sorted[i][0], records_sorted[i][1])\n",
" data_ll_so.append(head)\n",
" end = time.perf_counter()\n",
" time_ll_insert_so.append(end - start)"
]
},
{
"cell_type": "markdown",
"id": "5862d31b",
"metadata": {},
"source": [
"### Поиск элементов в произвольном массиве\n",
"- **time_ll_find_sh** - Време поиска в произвольном массиве (для 5 замеров)\n",
"- **find_ll_sh** - массив найденных данных в произвольном массиве (только последний замер)"
]
},
{
"cell_type": "code",
"execution_count": 55,
"id": "aac6cd23",
"metadata": {},
"outputs": [],
"source": [
"time_ll_find_sh = []\n",
"for n in range(5):\n",
" find_ll_sh = []\n",
" start = time.perf_counter()\n",
" for m in range(100): # замер для 100 случайных узлов \n",
" i = rand.randint(0, N-1)\n",
" str_find = records_shuffled[i][0]\n",
" find_ll_sh.append(ll.ll_find(data_ll_sh[0], str_find))\n",
" for m in range(10): # недоступные данные\n",
" str_find = f\"Node_{m}\"\n",
" find_ll_sh.append(ll.ll_find(data_ll_sh[0], str_find))\n",
" end = time.perf_counter()\n",
" time_ll_find_sh.append(end - start)"
]
},
{
"cell_type": "markdown",
"id": "651aac23",
"metadata": {},
"source": [
"### Поиск элементов в отсортированном массиве\n",
"- **time_ll_find_so** - Време поиска в отсортированном массиве (для 5 замеров)\n",
"- **find_ll_so** - Массив найденных данных в отсортированном массиве (только последний замер)"
]
},
{
"cell_type": "code",
"execution_count": 56,
"id": "5e5ae537",
"metadata": {},
"outputs": [],
"source": [
"time_ll_find_so = []\n",
"for n in range(5):\n",
" find_ll_so = []\n",
" start = time.perf_counter()\n",
" for m in range(100): # замер для 100 случайных узлов \n",
" i = rand.randint(0, N-1)\n",
" str_find = records_sorted[i][0]\n",
" find_ll_so.append(ll.ll_find(data_ll_sh[0], str_find))\n",
" for m in range(10): # недоступные данные \n",
" str_find = f\"Node_{m}\"\n",
" find_ll_so.append(ll.ll_find(data_ll_sh[0], str_find))\n",
" end = time.perf_counter()\n",
" time_ll_find_so.append(end - start)"
]
},
{
"cell_type": "markdown",
"id": "a1f70be9",
"metadata": {},
"source": [
"### Удаление элементов в произвольном массиве\n",
"- **time_ll_delete_sh** - Време поиска в произвольном массиве (для 5 замеров)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "6cdf8a70",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"a\n"
"ename": "KeyError",
"evalue": "9873",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)",
"Cell \u001b[0;32mIn[59], line 7\u001b[0m\n\u001b[1;32m 5\u001b[0m i \u001b[38;5;241m=\u001b[39m rand\u001b[38;5;241m.\u001b[39mrandint(\u001b[38;5;241m0\u001b[39m, N\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m)\n\u001b[1;32m 6\u001b[0m str_delete \u001b[38;5;241m=\u001b[39m records_shuffled[i][\u001b[38;5;241m0\u001b[39m]\n\u001b[0;32m----> 7\u001b[0m data_ll_sh \u001b[38;5;241m=\u001b[39m ll\u001b[38;5;241m.\u001b[39mll_delete(\u001b[43mdata_ll_sh\u001b[49m\u001b[43m[\u001b[49m\u001b[43mi\u001b[49m\u001b[43m]\u001b[49m[\u001b[38;5;241m2\u001b[39m], str_delete)\n\u001b[1;32m 8\u001b[0m end \u001b[38;5;241m=\u001b[39m time\u001b[38;5;241m.\u001b[39mperf_counter()\n\u001b[1;32m 9\u001b[0m time_ll_delete_sh\u001b[38;5;241m.\u001b[39mappend(end \u001b[38;5;241m-\u001b[39m start)\n",
"\u001b[0;31mKeyError\u001b[0m: 9873"
]
}
],
"source": [
"import LinkedList\n",
"import HashTable\n"
"time_ll_delete_sh = []\n",
"for n in range(5):\n",
" start = time.perf_counter()\n",
" for m in range(50): \n",
" i = rand.randint(0, N-1)\n",
" str_delete = records_shuffled[i][0]\n",
" data_ll_sh = ll.ll_delete(data_ll_sh[i][2], str_delete)\n",
" end = time.perf_counter()\n",
" time_ll_delete_sh.append(end - start)"
]
},
{
"cell_type": "markdown",
"id": "8d6156e9",
"metadata": {},
"source": [
"### Удаление элементов в произвольном массиве\n",
"- **time_ll_delete_sh** - Време поиска в произвольном массиве (для 5 замеров)"
]
}
],

0
pomelovsd/HashTable.py Normal file
View File