задание 1: добавил анализ результатов (график, выводы)

This commit is contained in:
Sorokin Fedor 2026-05-21 15:59:26 +03:00
parent 098e0f3a32
commit 032b22c79f
3 changed files with 160 additions and 91 deletions

BIN
benchmark_chart.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

View File

@ -1,91 +1,91 @@
структура,режим,операция,повторение,время (сек)
LinkedList,случайный,вставка,1,0.128959799999393
LinkedList,случайный,поиск,1,0.006587400000171328
LinkedList,случайный,удаление,1,0.0037955999996484024
LinkedList,случайный,вставка,2,0.1274652000001879
LinkedList,случайный,поиск,2,0.006692099999781931
LinkedList,случайный,удаление,2,0.0038293999996312778
LinkedList,случайный,вставка,3,0.13063139999940176
LinkedList,случайный,поиск,3,0.006624399999964226
LinkedList,случайный,удаление,3,0.004125400000702939
LinkedList,случайный,вставка,4,0.13235040000017761
LinkedList,случайный,поиск,4,0.007224200000564451
LinkedList,случайный,удаление,4,0.0038412000003518187
LinkedList,случайный,вставка,5,0.1376228999997693
LinkedList,случайный,поиск,5,0.007752999999866006
LinkedList,случайный,удаление,5,0.004621699999916018
LinkedList,отсортированный,вставка,1,0.14293330000054993
LinkedList,отсортированный,поиск,1,0.006024299999808136
LinkedList,отсортированный,удаление,1,0.004954899999574991
LinkedList,отсортированный,вставка,2,0.1474125999993703
LinkedList,отсортированный,поиск,2,0.00762140000006184
LinkedList,отсортированный,удаление,2,0.0051066999994873186
LinkedList,отсортированный,вставка,3,0.13767009999992297
LinkedList,отсортированный,поиск,3,0.0064199999997072155
LinkedList,отсортированный,удаление,3,0.005227899999226793
LinkedList,отсортированный,вставка,4,0.13925280000057683
LinkedList,отсортированный,поиск,4,0.006386400000337744
LinkedList,отсортированный,удаление,4,0.0049518000005264184
LinkedList,отсортированный,вставка,5,0.13541350000014063
LinkedList,отсортированный,поиск,5,0.006607199999962177
LinkedList,отсортированный,удаление,5,0.005551099999138387
HashTable,случайный,вставка,1,0.00123639999947045
HashTable,случайный,поиск,1,3.639999977167463e-05
HashTable,случайный,удаление,1,1.9799999790848233e-05
HashTable,случайный,вставка,2,0.000970699999925273
HashTable,случайный,поиск,2,3.259999994043028e-05
HashTable,случайный,удаление,2,1.7100000150094274e-05
HashTable,случайный,вставка,3,0.0009898999996948987
HashTable,случайный,поиск,3,3.20999997711624e-05
HashTable,случайный,удаление,3,1.7100000150094274e-05
HashTable,случайный,вставка,4,0.001140299999860872
HashTable,случайный,поиск,4,0.00010819999988598283
HashTable,случайный,удаление,4,4.2800000301213004e-05
HashTable,случайный,вставка,5,0.001704299999801151
HashTable,случайный,поиск,5,3.510000078676967e-05
HashTable,случайный,удаление,5,1.83000001925393e-05
HashTable,отсортированный,вставка,1,0.0009811999998419196
HashTable,отсортированный,поиск,1,3.110000034212135e-05
HashTable,отсортированный,удаление,1,1.9400000383029692e-05
HashTable,отсортированный,вставка,2,0.0009785000002011657
HashTable,отсортированный,поиск,2,3.1599999601894524e-05
HashTable,отсортированный,удаление,2,1.9800000700342935e-05
HashTable,отсортированный,вставка,3,0.0009659999996074475
LinkedList,случайный,вставка,1,0.13309969999954774
LinkedList,случайный,поиск,1,0.009379099999932805
LinkedList,случайный,удаление,1,0.004902000000583939
LinkedList,случайный,вставка,2,0.11298999999962689
LinkedList,случайный,поиск,2,0.00728259999959846
LinkedList,случайный,удаление,2,0.003859800000100222
LinkedList,случайный,вставка,3,0.12435430000004999
LinkedList,случайный,поиск,3,0.006995800000368035
LinkedList,случайный,удаление,3,0.0038894999997864943
LinkedList,случайный,вставка,4,0.11281289999988076
LinkedList,случайный,поиск,4,0.0073154000001522945
LinkedList,случайный,удаление,4,0.004016099999716971
LinkedList,случайный,вставка,5,0.12206900000001042
LinkedList,случайный,поиск,5,0.007770400000481459
LinkedList,случайный,удаление,5,0.0039008999992802273
LinkedList,отсортированный,вставка,1,0.12199670000063634
LinkedList,отсортированный,поиск,1,0.006072700000004261
LinkedList,отсортированный,удаление,1,0.004619700000148441
LinkedList,отсортированный,вставка,2,0.11778119999962655
LinkedList,отсортированный,поиск,2,0.005873400000382389
LinkedList,отсортированный,удаление,2,0.004716499999631196
LinkedList,отсортированный,вставка,3,0.11716749999959575
LinkedList,отсортированный,поиск,3,0.006211500000063097
LinkedList,отсортированный,удаление,3,0.004824199999347911
LinkedList,отсортированный,вставка,4,0.1168800999994346
LinkedList,отсортированный,поиск,4,0.00615879999986646
LinkedList,отсортированный,удаление,4,0.004850500000429747
LinkedList,отсортированный,вставка,5,0.12217359999976907
LinkedList,отсортированный,поиск,5,0.0060359999997672276
LinkedList,отсортированный,удаление,5,0.0046704000005775015
HashTable,случайный,вставка,1,0.001177799999823037
HashTable,случайный,поиск,1,3.729999934876105e-05
HashTable,случайный,удаление,1,2.009999934671214e-05
HashTable,случайный,вставка,2,0.001008700000056706
HashTable,случайный,поиск,2,3.290000040578889e-05
HashTable,случайный,удаление,2,1.6900000446185004e-05
HashTable,случайный,вставка,3,0.0010118999998667277
HashTable,случайный,поиск,3,3.500000002532033e-05
HashTable,случайный,удаление,3,2.0599999515980016e-05
HashTable,случайный,вставка,4,0.0010044999999081483
HashTable,случайный,поиск,4,3.1800000215298496e-05
HashTable,случайный,удаление,4,1.700000029813964e-05
HashTable,случайный,вставка,5,0.001006999999844993
HashTable,случайный,поиск,5,3.1599999601894524e-05
HashTable,случайный,удаление,5,1.649999921937706e-05
HashTable,отсортированный,вставка,1,0.0009728999993967591
HashTable,отсортированный,поиск,1,3.0100000003585592e-05
HashTable,отсортированный,удаление,1,1.9299999621580355e-05
HashTable,отсортированный,вставка,2,0.0009723000002850313
HashTable,отсортированный,поиск,2,2.9599999834317714e-05
HashTable,отсортированный,удаление,2,1.919999976962572e-05
HashTable,отсортированный,вставка,3,0.0009663999999247608
HashTable,отсортированный,поиск,3,3.0500000320898835e-05
HashTable,отсортированный,удаление,3,1.9299999621580355e-05
HashTable,отсортированный,вставка,4,0.0009494000005361158
HashTable,отсортированный,поиск,4,2.989999939018162e-05
HashTable,отсортированный,удаление,4,1.8900000213761814e-05
HashTable,отсортированный,вставка,5,0.0012150000002293382
HashTable,отсортированный,поиск,5,3.480000032141106e-05
HashTable,отсортированный,удаление,5,2.0899999981338624e-05
BST,случайный,вставка,1,0.004831499999454536
BST,случайный,поиск,1,0.00013619999936054228
BST,случайный,удаление,1,9.070000032807002e-05
BST,случайный,вставка,2,0.005335699999704957
BST,случайный,поиск,2,0.00012989999959245324
BST,случайный,удаление,2,8.600000001024455e-05
BST,случайный,вставка,3,0.005207599999266677
BST,случайный,поиск,3,0.00013050000052317046
BST,случайный,удаление,3,8.580000030633528e-05
BST,случайный,вставка,4,0.005297200000313751
BST,случайный,поиск,4,0.00013440000020636944
BST,случайный,удаление,4,8.789999992586672e-05
BST,случайный,вставка,5,0.005037799999627168
BST,случайный,поиск,5,0.000649399999929301
BST,случайный,удаление,5,0.0001084000004993868
BST,отсортированный,вставка,1,0.8110883999997895
BST,отсортированный,поиск,1,0.019361399999979767
BST,отсортированный,удаление,1,0.014678200000162178
BST,отсортированный,вставка,2,0.7911546999994243
BST,отсортированный,поиск,2,0.019212399999560148
BST,отсортированный,удаление,2,0.013222700000369514
BST,отсортированный,вставка,3,0.7786938999997801
BST,отсортированный,поиск,3,0.01864480000040203
BST,отсортированный,удаление,3,0.013478699999723176
BST,отсортированный,вставка,4,0.7826362000005247
BST,отсортированный,поиск,4,0.01973920000000362
BST,отсортированный,удаление,4,0.013336900000467722
BST,отсортированный,вставка,5,0.7718632000005528
BST,отсортированный,поиск,5,0.02021930000046268
BST,отсортированный,удаление,5,0.013186899999709567
HashTable,отсортированный,удаление,3,1.9699999938893598e-05
HashTable,отсортированный,вставка,4,0.0011242000000493135
HashTable,отсортированный,поиск,4,3.400000059627928e-05
HashTable,отсортированный,удаление,4,2.080000012938399e-05
HashTable,отсортированный,вставка,5,0.0009773000001587206
HashTable,отсортированный,поиск,5,3.100000049016671e-05
HashTable,отсортированный,удаление,5,1.9699999938893598e-05
BST,случайный,вставка,1,0.004384899999422487
BST,случайный,поиск,1,0.0001329000006080605
BST,случайный,удаление,1,8.230000003095483e-05
BST,случайный,вставка,2,0.004304400000364694
BST,случайный,поиск,2,0.00014240000018617138
BST,случайный,удаление,2,8.129999969241908e-05
BST,случайный,вставка,3,0.004376699999738776
BST,случайный,поиск,3,0.00014179999925545417
BST,случайный,удаление,3,8.269999943877338e-05
BST,случайный,вставка,4,0.004673599999478029
BST,случайный,поиск,4,0.0001511999998911051
BST,случайный,удаление,4,0.00012150000020483276
BST,случайный,вставка,5,0.004335399999945366
BST,случайный,поиск,5,0.00013080000007903436
BST,случайный,удаление,5,7.93999997767969e-05
BST,отсортированный,вставка,1,0.7882552000000942
BST,отсортированный,поиск,1,0.01960369999960676
BST,отсортированный,удаление,1,0.013939499999651161
BST,отсортированный,вставка,2,0.7601769000002605
BST,отсортированный,поиск,2,0.019820599999547994
BST,отсортированный,удаление,2,0.01359989999946265
BST,отсортированный,вставка,3,0.741146899999876
BST,отсортированный,поиск,3,0.018209700000625162
BST,отсортированный,удаление,3,0.012622499999451975
BST,отсортированный,вставка,4,0.7348717000004399
BST,отсортированный,поиск,4,0.01830170000084763
BST,отсортированный,удаление,4,0.012606900000719179
BST,отсортированный,вставка,5,0.7420961000007082
BST,отсортированный,поиск,5,0.018224400000690366
BST,отсортированный,удаление,5,0.012539400000605383

1 структура режим операция повторение время (сек)
2 LinkedList случайный вставка 1 0.128959799999393 0.13309969999954774
3 LinkedList случайный поиск 1 0.006587400000171328 0.009379099999932805
4 LinkedList случайный удаление 1 0.0037955999996484024 0.004902000000583939
5 LinkedList случайный вставка 2 0.1274652000001879 0.11298999999962689
6 LinkedList случайный поиск 2 0.006692099999781931 0.00728259999959846
7 LinkedList случайный удаление 2 0.0038293999996312778 0.003859800000100222
8 LinkedList случайный вставка 3 0.13063139999940176 0.12435430000004999
9 LinkedList случайный поиск 3 0.006624399999964226 0.006995800000368035
10 LinkedList случайный удаление 3 0.004125400000702939 0.0038894999997864943
11 LinkedList случайный вставка 4 0.13235040000017761 0.11281289999988076
12 LinkedList случайный поиск 4 0.007224200000564451 0.0073154000001522945
13 LinkedList случайный удаление 4 0.0038412000003518187 0.004016099999716971
14 LinkedList случайный вставка 5 0.1376228999997693 0.12206900000001042
15 LinkedList случайный поиск 5 0.007752999999866006 0.007770400000481459
16 LinkedList случайный удаление 5 0.004621699999916018 0.0039008999992802273
17 LinkedList отсортированный вставка 1 0.14293330000054993 0.12199670000063634
18 LinkedList отсортированный поиск 1 0.006024299999808136 0.006072700000004261
19 LinkedList отсортированный удаление 1 0.004954899999574991 0.004619700000148441
20 LinkedList отсортированный вставка 2 0.1474125999993703 0.11778119999962655
21 LinkedList отсортированный поиск 2 0.00762140000006184 0.005873400000382389
22 LinkedList отсортированный удаление 2 0.0051066999994873186 0.004716499999631196
23 LinkedList отсортированный вставка 3 0.13767009999992297 0.11716749999959575
24 LinkedList отсортированный поиск 3 0.0064199999997072155 0.006211500000063097
25 LinkedList отсортированный удаление 3 0.005227899999226793 0.004824199999347911
26 LinkedList отсортированный вставка 4 0.13925280000057683 0.1168800999994346
27 LinkedList отсортированный поиск 4 0.006386400000337744 0.00615879999986646
28 LinkedList отсортированный удаление 4 0.0049518000005264184 0.004850500000429747
29 LinkedList отсортированный вставка 5 0.13541350000014063 0.12217359999976907
30 LinkedList отсортированный поиск 5 0.006607199999962177 0.0060359999997672276
31 LinkedList отсортированный удаление 5 0.005551099999138387 0.0046704000005775015
32 HashTable случайный вставка 1 0.00123639999947045 0.001177799999823037
33 HashTable случайный поиск 1 3.639999977167463e-05 3.729999934876105e-05
34 HashTable случайный удаление 1 1.9799999790848233e-05 2.009999934671214e-05
35 HashTable случайный вставка 2 0.000970699999925273 0.001008700000056706
36 HashTable случайный поиск 2 3.259999994043028e-05 3.290000040578889e-05
37 HashTable случайный удаление 2 1.7100000150094274e-05 1.6900000446185004e-05
38 HashTable случайный вставка 3 0.0009898999996948987 0.0010118999998667277
39 HashTable случайный поиск 3 3.20999997711624e-05 3.500000002532033e-05
40 HashTable случайный удаление 3 1.7100000150094274e-05 2.0599999515980016e-05
41 HashTable случайный вставка 4 0.001140299999860872 0.0010044999999081483
42 HashTable случайный поиск 4 0.00010819999988598283 3.1800000215298496e-05
43 HashTable случайный удаление 4 4.2800000301213004e-05 1.700000029813964e-05
44 HashTable случайный вставка 5 0.001704299999801151 0.001006999999844993
45 HashTable случайный поиск 5 3.510000078676967e-05 3.1599999601894524e-05
46 HashTable случайный удаление 5 1.83000001925393e-05 1.649999921937706e-05
47 HashTable отсортированный вставка 1 0.0009811999998419196 0.0009728999993967591
48 HashTable отсортированный поиск 1 3.110000034212135e-05 3.0100000003585592e-05
49 HashTable отсортированный удаление 1 1.9400000383029692e-05 1.9299999621580355e-05
50 HashTable отсортированный вставка 2 0.0009785000002011657 0.0009723000002850313
51 HashTable отсортированный поиск 2 3.1599999601894524e-05 2.9599999834317714e-05
52 HashTable отсортированный удаление 2 1.9800000700342935e-05 1.919999976962572e-05
53 HashTable отсортированный вставка 3 0.0009659999996074475 0.0009663999999247608
54 HashTable отсортированный поиск 3 3.0500000320898835e-05
55 HashTable отсортированный удаление 3 1.9299999621580355e-05 1.9699999938893598e-05
56 HashTable отсортированный вставка 4 0.0009494000005361158 0.0011242000000493135
57 HashTable отсортированный поиск 4 2.989999939018162e-05 3.400000059627928e-05
58 HashTable отсортированный удаление 4 1.8900000213761814e-05 2.080000012938399e-05
59 HashTable отсортированный вставка 5 0.0012150000002293382 0.0009773000001587206
60 HashTable отсортированный поиск 5 3.480000032141106e-05 3.100000049016671e-05
61 HashTable отсортированный удаление 5 2.0899999981338624e-05 1.9699999938893598e-05
62 BST случайный вставка 1 0.004831499999454536 0.004384899999422487
63 BST случайный поиск 1 0.00013619999936054228 0.0001329000006080605
64 BST случайный удаление 1 9.070000032807002e-05 8.230000003095483e-05
65 BST случайный вставка 2 0.005335699999704957 0.004304400000364694
66 BST случайный поиск 2 0.00012989999959245324 0.00014240000018617138
67 BST случайный удаление 2 8.600000001024455e-05 8.129999969241908e-05
68 BST случайный вставка 3 0.005207599999266677 0.004376699999738776
69 BST случайный поиск 3 0.00013050000052317046 0.00014179999925545417
70 BST случайный удаление 3 8.580000030633528e-05 8.269999943877338e-05
71 BST случайный вставка 4 0.005297200000313751 0.004673599999478029
72 BST случайный поиск 4 0.00013440000020636944 0.0001511999998911051
73 BST случайный удаление 4 8.789999992586672e-05 0.00012150000020483276
74 BST случайный вставка 5 0.005037799999627168 0.004335399999945366
75 BST случайный поиск 5 0.000649399999929301 0.00013080000007903436
76 BST случайный удаление 5 0.0001084000004993868 7.93999997767969e-05
77 BST отсортированный вставка 1 0.8110883999997895 0.7882552000000942
78 BST отсортированный поиск 1 0.019361399999979767 0.01960369999960676
79 BST отсортированный удаление 1 0.014678200000162178 0.013939499999651161
80 BST отсортированный вставка 2 0.7911546999994243 0.7601769000002605
81 BST отсортированный поиск 2 0.019212399999560148 0.019820599999547994
82 BST отсортированный удаление 2 0.013222700000369514 0.01359989999946265
83 BST отсортированный вставка 3 0.7786938999997801 0.741146899999876
84 BST отсортированный поиск 3 0.01864480000040203 0.018209700000625162
85 BST отсортированный удаление 3 0.013478699999723176 0.012622499999451975
86 BST отсортированный вставка 4 0.7826362000005247 0.7348717000004399
87 BST отсортированный поиск 4 0.01973920000000362 0.01830170000084763
88 BST отсортированный удаление 4 0.013336900000467722 0.012606900000719179
89 BST отсортированный вставка 5 0.7718632000005528 0.7420961000007082
90 BST отсортированный поиск 5 0.02021930000046268 0.018224400000690366
91 BST отсортированный удаление 5 0.013186899999709567 0.012539400000605383

View File

@ -3,6 +3,8 @@ import random
import sys
import time
from collections import defaultdict
import pandas as pd
import matplotlib.pyplot as plt
# увеличиваем лимит рекурсии
sys.setrecursionlimit(25000)
@ -157,7 +159,7 @@ def bst_list_all(root):
return records
# ЭКСПЕРИМЕНТАЛЬНАЯ ЧАСТЬ
# 4. ЭКСПЕРИМЕНТАЛЬНАЯ ЧАСТЬ
def run_experiments():
N = 3000
@ -272,8 +274,75 @@ def show_summary(rows):
print(f"{struct:<12} | {mode:<15} | {op:<10} | {avg_time:.6f}")
# 5. АНАЛИЗ РЕЗУЛЬТАТОВ
def plot_results(csv_filename="results.csv"):
print("построение графика")
try:
df = pd.read_csv(csv_filename)
df_insert = df[df["операция"] == "вставка"]
pivot_df = df_insert.pivot_table(
index="структура",
columns="режим",
values="время (сек)",
aggfunc="mean"
)
pivot_df.plot(kind="bar", figsize=(10, 6), color=['#1f77b4', '#ff7f0e'])
plt.title("сравнение времени вставки (N=3000)")
plt.ylabel("среднее время выполнения (сек)")
plt.xlabel("структура данных")
plt.xticks(rotation=0)
plt.grid(axis='y', linestyle='--', alpha=0.7)
plt.savefig("benchmark_chart.png")
print("график сохранен как benchmark_chart.png")
plt.show()
except FileNotFoundError:
print(f"файл {csv_filename} не найден. сначала запустите тесты.")
def print_report():
report = """
5. АНАЛИЗ РЕЗУЛЬТАТОВ ЭКСПЕРИМЕНТОВ
1. Влияние порядка входных данных на скорость вставки в BST:
- На случайных данных BST строится сбалансированным. Высота дерева составляет
примерно O(log N), поэтому вставка происходит почти мгновенно.
- На отсортированных данных происходит ДЕГРАДАЦИЯ дерева. Каждый элемент больше
предыдущего и вставляется строго вправо. Дерево вырождается в связный список.
Сложность возрастает до O(N), что отчетливо видно по гигантскому пику на графике.
2. Чувствительность Хеш-таблицы к порядку:
- Хеш-таблица НЕ ЧУВСТВИТЕЛЬНА к порядку данных. Математическая хеш-функция
превращает любое имя в хаотичный индекс и равномерно распределяет записи
по бакетам. В обоих режимах операции выполняются за константное время O(1).
3. Почему связный список всегда медленен при поиске:
- У связного списка нет индексов для прямого доступа. Поиск всегда линейный O(N)
— алгоритм вынужден последовательно перебирать элементы от головы к хвосту.
4. Как удаление работает в каждой структуре:
- Связный список: O(N) затрачивается на линейный поиск узла, само удаление — O(1).
- Хеш-таблица: O(1) нахождение бакета по хешу, удаление из цепочки коллизий мгновенно.
- BST: В среднем O(log N), в худшем O(N). Требует поиска узла и перестройки связей
(замена удаляемого узла на его потомка или минимальный элемент правого поддерева).
ВЫВОД:
- ДЛЯ ЧАСТЫХ ВСТАВОК И ПОИСКА: Идеально подходит Хеш-таблица благодаря скорости O(1).
- ДЛЯ ПОЛУЧЕНИЯ ДАННЫХ В ПОРЯДКЕ (АЛФАВИТНОМ): Стоит выбирать Двоичное дерево поиска
(BST), так как обход дерева (In-order traversal) сразу выдает отсортированные данные.
"""
print(report)
if __name__ == "__main__":
run_experiments()
plot_results()
print_report()