61 lines
1.8 KiB
Python
61 lines
1.8 KiB
Python
|
|
import csv
|
||
|
|
import matplotlib.pyplot as plt
|
||
|
|
from collections import defaultdict
|
||
|
|
|
||
|
|
pth = r"C:\Users\vva26\2026-rff_mp\VolkovVA\docs\data\results.csv"
|
||
|
|
grf = r"C:\Users\vva26\2026-rff_mp\VolkovVA\docs\performance_chart.png"
|
||
|
|
|
||
|
|
dct = defaultdict(lambda: defaultdict(list))
|
||
|
|
|
||
|
|
with open(pth, "r", encoding="utf-8") as f:
|
||
|
|
rdr = csv.reader(f)
|
||
|
|
nxt = next(rdr)
|
||
|
|
|
||
|
|
for row in rdr:
|
||
|
|
if not row:
|
||
|
|
continue
|
||
|
|
str, mod, ope, tim = row
|
||
|
|
key = f"{str}\n({ope})"
|
||
|
|
dct[key][mod].append(float(tim))
|
||
|
|
|
||
|
|
lbl = []
|
||
|
|
rnd = []
|
||
|
|
srt = []
|
||
|
|
|
||
|
|
for key, mds in dct.items():
|
||
|
|
lbl.append(key)
|
||
|
|
avg_rnd = sum(mds["случайный"]) / len(mds["случайный"]) if mds["случайный"] else 0
|
||
|
|
avg_srt = sum(mds["отсортированный"]) / len(mds["отсортированный"]) if mds["отсортированный"] else 0
|
||
|
|
rnd.append(avg_rnd)
|
||
|
|
srt.append(avg_srt)
|
||
|
|
|
||
|
|
idx = range(len(lbl))
|
||
|
|
wth = 0.35
|
||
|
|
|
||
|
|
x_rnd = []
|
||
|
|
for i in idx:
|
||
|
|
x_rnd.append(i - wth/2)
|
||
|
|
|
||
|
|
x_srt = []
|
||
|
|
for i in idx:
|
||
|
|
x_srt.append(i + wth/2)
|
||
|
|
|
||
|
|
fig, axs = plt.subplots(figsize=(11, 6))
|
||
|
|
|
||
|
|
bar1 = axs.bar(x_rnd, rnd, wth, label='Случайные данные', color='#3498db')
|
||
|
|
bar2 = axs.bar(x_srt, srt, wth, label='Отсортированные данные', color='#e74c3c')
|
||
|
|
|
||
|
|
axs.set_title('Сравнение скорости операций в различных структурах данных', fontsize=13, fontweight='bold', pad=15)
|
||
|
|
axs.set_xticks(idx)
|
||
|
|
axs.set_xticklabels(lbl, rotation=15, ha='right', fontsize=10)
|
||
|
|
axs.legend(fontsize=10)
|
||
|
|
axs.grid(axis='y', linestyle='--', alpha=0.5)
|
||
|
|
|
||
|
|
axs.set_yscale('log')
|
||
|
|
axs.set_ylabel('Время выполнения в сек (Логарифмическая шкала)', fontsize=11)
|
||
|
|
|
||
|
|
plt.tight_layout()
|
||
|
|
|
||
|
|
plt.savefig(grf, dpi=300)
|
||
|
|
print(f"\n[OK] График сохранен в: {grf}")
|
||
|
|
plt.show()
|