add plots
This commit is contained in:
parent
2ff608b88f
commit
5827416a2b
Binary file not shown.
|
After Width: | Height: | Size: 40 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 42 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 41 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 43 KiB |
112
SobolevNS/docs/data/task1_data_structures/docs/data/results.csv
Normal file
112
SobolevNS/docs/data/task1_data_structures/docs/data/results.csv
Normal file
|
|
@ -0,0 +1,112 @@
|
|||
Структура,Режим,Операция,N,Trial,Время (сек)
|
||||
LinkedList,shuffled,insert,10000,1,3.995075
|
||||
LinkedList,shuffled,insert,10000,2,4.133491
|
||||
LinkedList,shuffled,insert,10000,3,4.067831
|
||||
LinkedList,shuffled,insert,10000,4,4.075638
|
||||
LinkedList,shuffled,insert,10000,5,4.059367
|
||||
LinkedList,shuffled,find,10000,1,0.037171
|
||||
LinkedList,shuffled,find,10000,2,0.035212
|
||||
LinkedList,shuffled,find,10000,3,0.040434
|
||||
LinkedList,shuffled,find,10000,4,0.030968
|
||||
LinkedList,shuffled,find,10000,5,0.033432
|
||||
LinkedList,shuffled,delete,10000,1,0.014029
|
||||
LinkedList,shuffled,delete,10000,2,0.016408
|
||||
LinkedList,shuffled,delete,10000,3,0.017498
|
||||
LinkedList,shuffled,delete,10000,4,0.013770
|
||||
LinkedList,shuffled,delete,10000,5,0.016273
|
||||
LinkedList,sorted,insert,10000,1,3.083864
|
||||
LinkedList,sorted,insert,10000,2,3.123097
|
||||
LinkedList,sorted,insert,10000,3,3.084625
|
||||
LinkedList,sorted,insert,10000,4,3.200015
|
||||
LinkedList,sorted,insert,10000,5,3.124164
|
||||
LinkedList,sorted,find,10000,1,0.029411
|
||||
LinkedList,sorted,find,10000,2,0.029928
|
||||
LinkedList,sorted,find,10000,3,0.027749
|
||||
LinkedList,sorted,find,10000,4,0.032859
|
||||
LinkedList,sorted,find,10000,5,0.032080
|
||||
LinkedList,sorted,delete,10000,1,0.016454
|
||||
LinkedList,sorted,delete,10000,2,0.013526
|
||||
LinkedList,sorted,delete,10000,3,0.015424
|
||||
LinkedList,sorted,delete,10000,4,0.014688
|
||||
LinkedList,sorted,delete,10000,5,0.012838
|
||||
HashTable,shuffled,insert,10000,1,0.007074
|
||||
HashTable,shuffled,insert,10000,2,0.006665
|
||||
HashTable,shuffled,insert,10000,3,0.007361
|
||||
HashTable,shuffled,insert,10000,4,0.007405
|
||||
HashTable,shuffled,insert,10000,5,0.007248
|
||||
HashTable,shuffled,find,10000,1,0.000072
|
||||
HashTable,shuffled,find,10000,2,0.000062
|
||||
HashTable,shuffled,find,10000,3,0.000063
|
||||
HashTable,shuffled,find,10000,4,0.000062
|
||||
HashTable,shuffled,find,10000,5,0.000066
|
||||
HashTable,shuffled,delete,10000,1,0.000037
|
||||
HashTable,shuffled,delete,10000,2,0.000034
|
||||
HashTable,shuffled,delete,10000,3,0.000032
|
||||
HashTable,shuffled,delete,10000,4,0.000030
|
||||
HashTable,shuffled,delete,10000,5,0.000032
|
||||
HashTable,sorted,insert,10000,1,0.007131
|
||||
HashTable,sorted,insert,10000,2,0.006610
|
||||
HashTable,sorted,insert,10000,3,0.006701
|
||||
HashTable,sorted,insert,10000,4,0.006979
|
||||
HashTable,sorted,insert,10000,5,0.008910
|
||||
HashTable,sorted,find,10000,1,0.000065
|
||||
HashTable,sorted,find,10000,2,0.000056
|
||||
HashTable,sorted,find,10000,3,0.000068
|
||||
HashTable,sorted,find,10000,4,0.000066
|
||||
HashTable,sorted,find,10000,5,0.000076
|
||||
HashTable,sorted,delete,10000,1,0.000036
|
||||
HashTable,sorted,delete,10000,2,0.000037
|
||||
HashTable,sorted,delete,10000,3,0.000038
|
||||
HashTable,sorted,delete,10000,4,0.000045
|
||||
HashTable,sorted,delete,10000,5,0.000042
|
||||
BST,shuffled,insert,10000,1,0.018043
|
||||
BST,shuffled,insert,10000,2,0.019312
|
||||
BST,shuffled,insert,10000,3,0.017282
|
||||
BST,shuffled,insert,10000,4,0.021092
|
||||
BST,shuffled,insert,10000,5,0.016847
|
||||
BST,shuffled,find,10000,1,0.000157
|
||||
BST,shuffled,find,10000,2,0.000210
|
||||
BST,shuffled,find,10000,3,0.000168
|
||||
BST,shuffled,find,10000,4,0.000138
|
||||
BST,shuffled,find,10000,5,0.000193
|
||||
BST,shuffled,delete,10000,1,0.000129
|
||||
BST,shuffled,delete,10000,2,0.000147
|
||||
BST,shuffled,delete,10000,3,0.000122
|
||||
BST,shuffled,delete,10000,4,0.000161
|
||||
BST,shuffled,delete,10000,5,0.000128
|
||||
BST,sorted,insert,2000,1,0.123235
|
||||
BST,sorted,insert,2000,2,0.118658
|
||||
BST,sorted,insert,2000,3,0.119944
|
||||
BST,sorted,insert,2000,4,0.121595
|
||||
BST,sorted,insert,2000,5,0.116209
|
||||
BST,sorted,find,2000,1,0.005019
|
||||
BST,sorted,find,2000,2,0.005133
|
||||
BST,sorted,find,2000,3,0.005032
|
||||
BST,sorted,find,2000,4,0.004812
|
||||
BST,sorted,find,2000,5,0.004964
|
||||
BST,sorted,delete,2000,1,0.008319
|
||||
BST,sorted,delete,2000,2,0.007798
|
||||
BST,sorted,delete,2000,3,0.007584
|
||||
BST,sorted,delete,2000,4,0.008061
|
||||
BST,sorted,delete,2000,5,0.007642
|
||||
|
||||
--- СРЕДНИЕ ---
|
||||
Структура,Режим,Операция,N,Среднее (сек),Все замеры (сек)
|
||||
LinkedList,shuffled,insert,10000,4.066280,3.995075;4.133491;4.067831;4.075638;4.059367
|
||||
LinkedList,shuffled,find,10000,0.035443,0.037171;0.035212;0.040434;0.030968;0.033432
|
||||
LinkedList,shuffled,delete,10000,0.015596,0.014029;0.016408;0.017498;0.013770;0.016273
|
||||
LinkedList,sorted,insert,10000,3.123153,3.083864;3.123097;3.084625;3.200015;3.124164
|
||||
LinkedList,sorted,find,10000,0.030406,0.029411;0.029928;0.027749;0.032859;0.032080
|
||||
LinkedList,sorted,delete,10000,0.014586,0.016454;0.013526;0.015424;0.014688;0.012838
|
||||
HashTable,shuffled,insert,10000,0.007151,0.007074;0.006665;0.007361;0.007405;0.007248
|
||||
HashTable,shuffled,find,10000,0.000065,0.000072;0.000062;0.000063;0.000062;0.000066
|
||||
HashTable,shuffled,delete,10000,0.000033,0.000037;0.000034;0.000032;0.000030;0.000032
|
||||
HashTable,sorted,insert,10000,0.007266,0.007131;0.006610;0.006701;0.006979;0.008910
|
||||
HashTable,sorted,find,10000,0.000066,0.000065;0.000056;0.000068;0.000066;0.000076
|
||||
HashTable,sorted,delete,10000,0.000040,0.000036;0.000037;0.000038;0.000045;0.000042
|
||||
BST,shuffled,insert,10000,0.018515,0.018043;0.019312;0.017282;0.021092;0.016847
|
||||
BST,shuffled,find,10000,0.000173,0.000157;0.000210;0.000168;0.000138;0.000193
|
||||
BST,shuffled,delete,10000,0.000138,0.000129;0.000147;0.000122;0.000161;0.000128
|
||||
BST,sorted,insert,2000,0.119928,0.123235;0.118658;0.119944;0.121595;0.116209
|
||||
BST,sorted,find,2000,0.004992,0.005019;0.005133;0.005032;0.004812;0.004964
|
||||
BST,sorted,delete,2000,0.007881,0.008319;0.007798;0.007584;0.008061;0.007642
|
||||
|
Can't render this file because it has a wrong number of fields in line 93.
|
118
SobolevNS/docs/data/task1_data_structures/plot_results.py
Normal file
118
SobolevNS/docs/data/task1_data_structures/plot_results.py
Normal file
|
|
@ -0,0 +1,118 @@
|
|||
"""
|
||||
plot_results.py - строит столбчатые диаграммы по итогам экспериментов.
|
||||
"""
|
||||
import csv
|
||||
import os
|
||||
import matplotlib.pyplot as plt
|
||||
import numpy as np
|
||||
|
||||
CSV = os.path.join("docs", "data", "results.csv")
|
||||
PLOTS_DIR = os.path.join("docs", "data", "plots")
|
||||
os.makedirs(PLOTS_DIR, exist_ok=True)
|
||||
|
||||
|
||||
def load_means():
|
||||
"""Возвращает dict[(structure, mode, op)] = (mean, N)."""
|
||||
means = {}
|
||||
with open(CSV, encoding="utf-8") as f:
|
||||
rows = list(csv.reader(f))
|
||||
# ищем секцию "--- СРЕДНИЕ ---"
|
||||
start = None
|
||||
for i, row in enumerate(rows):
|
||||
if row and row[0] == "--- СРЕДНИЕ ---":
|
||||
start = i + 2 # пропустить заголовок секции
|
||||
break
|
||||
for row in rows[start:]:
|
||||
if not row:
|
||||
continue
|
||||
structure, mode, op, n, mean, _trials = row
|
||||
means[(structure, mode, op)] = (float(mean), int(n))
|
||||
return means
|
||||
|
||||
|
||||
def plot_grouped(means, op, fname, title):
|
||||
"""Сгруппированные столбцы: для каждой структуры - два столбца (shuffled / sorted)."""
|
||||
structures = ["LinkedList", "HashTable", "BST"]
|
||||
modes = ["shuffled", "sorted"]
|
||||
x = np.arange(len(structures))
|
||||
width = 0.36
|
||||
|
||||
fig, ax = plt.subplots(figsize=(8, 5))
|
||||
|
||||
for i, mode in enumerate(modes):
|
||||
vals_ms = []
|
||||
labels = []
|
||||
for s in structures:
|
||||
mean, n = means[(s, mode, op)]
|
||||
vals_ms.append(mean * 1000)
|
||||
labels.append(f"N={n}")
|
||||
bars = ax.bar(x + (i - 0.5) * width, vals_ms, width,
|
||||
label=mode, alpha=0.85)
|
||||
for bar, lab in zip(bars, labels):
|
||||
h = bar.get_height()
|
||||
ax.text(bar.get_x() + bar.get_width() / 2, h,
|
||||
f"{h:.2f}\n{lab}", ha="center", va="bottom", fontsize=8)
|
||||
|
||||
ax.set_xticks(x)
|
||||
ax.set_xticklabels(structures)
|
||||
ax.set_ylabel("Время, мс (среднее по 5 запускам)")
|
||||
ax.set_title(title)
|
||||
ax.set_yscale("log")
|
||||
ax.legend(title="порядок входных данных")
|
||||
ax.grid(axis="y", linestyle="--", alpha=0.4)
|
||||
plt.tight_layout()
|
||||
out = os.path.join(PLOTS_DIR, fname)
|
||||
plt.savefig(out, dpi=130)
|
||||
plt.close()
|
||||
print("saved:", out)
|
||||
|
||||
|
||||
def plot_bst_degradation(means, fname):
|
||||
"""Отдельный график: BST shuffled vs sorted - даже при меньшем N
|
||||
отсортированные данные дают намного большее время."""
|
||||
ops = ["insert", "find", "delete"]
|
||||
shuffled = [means[("BST", "shuffled", op)][0] * 1000 for op in ops]
|
||||
sorted_ = [means[("BST", "sorted", op)][0] * 1000 for op in ops]
|
||||
n_shuf = means[("BST", "shuffled", "insert")][1]
|
||||
n_sort = means[("BST", "sorted", "insert")][1]
|
||||
|
||||
x = np.arange(len(ops))
|
||||
width = 0.36
|
||||
fig, ax = plt.subplots(figsize=(7, 4.5))
|
||||
ax.bar(x - width/2, shuffled, width, label=f"shuffled (N={n_shuf})")
|
||||
ax.bar(x + width/2, sorted_, width, label=f"sorted (N={n_sort})")
|
||||
for i, v in enumerate(shuffled):
|
||||
ax.text(i - width/2, v, f"{v:.2f}", ha="center", va="bottom", fontsize=9)
|
||||
for i, v in enumerate(sorted_):
|
||||
ax.text(i + width/2, v, f"{v:.2f}", ha="center", va="bottom", fontsize=9)
|
||||
|
||||
ax.set_xticks(x); ax.set_xticklabels(ops)
|
||||
ax.set_ylabel("Время, мс")
|
||||
ax.set_title("BST: деградация на отсортированных данных\n"
|
||||
"(N для sorted в 5 раз меньше, но время больше)")
|
||||
ax.set_yscale("log")
|
||||
ax.legend()
|
||||
ax.grid(axis="y", linestyle="--", alpha=0.4)
|
||||
plt.tight_layout()
|
||||
out = os.path.join(PLOTS_DIR, fname)
|
||||
plt.savefig(out, dpi=130)
|
||||
plt.close()
|
||||
print("saved:", out)
|
||||
|
||||
|
||||
def main():
|
||||
means = load_means()
|
||||
plot_grouped(means, "insert",
|
||||
"insert_compare.png",
|
||||
"Вставка всех записей (лог. шкала)")
|
||||
plot_grouped(means, "find",
|
||||
"find_compare.png",
|
||||
"Поиск 110 ключей (лог. шкала)")
|
||||
plot_grouped(means, "delete",
|
||||
"delete_compare.png",
|
||||
"Удаление 50 записей (лог. шкала)")
|
||||
plot_bst_degradation(means, "bst_degradation.png")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Loading…
Reference in New Issue
Block a user