35 lines
1.2 KiB
Python
35 lines
1.2 KiB
Python
import pandas as pd
|
|
import matplotlib.pyplot as plt
|
|
import numpy as np
|
|
|
|
df = pd.read_csv("results.csv", encoding="utf-8-sig")
|
|
df_avg = df[df["Операция"].str.contains("СРЕДНЕЕ")].copy()
|
|
df_avg["Операция"] = df_avg["Операция"].str.replace(" (СРЕДНЕЕ)", "")
|
|
|
|
modes = ["случайный", "отсортированный"]
|
|
operations = ["insert", "find", "delete"]
|
|
structures = ["LinkedList", "HashTable", "BST"]
|
|
|
|
x = np.arange(len(structures))
|
|
width = 0.35
|
|
|
|
fig, axes = plt.subplots(1, 3, figsize=(18, 5))
|
|
|
|
for i, op in enumerate(operations):
|
|
ax = axes[i]
|
|
for j, mode in enumerate(modes):
|
|
mask = (df_avg["Операция"] == op) & (df_avg["Режим"] == mode)
|
|
times = df_avg[mask]["Время (сек)"].values
|
|
label = "Случайные данные" if mode == "случайный" else "Отсортированные данные"
|
|
ax.bar(x + j * width, times, width, label=label)
|
|
|
|
ax.set_title(f"Операция: {op.upper()}")
|
|
ax.set_xticks(x + width / 2)
|
|
ax.set_xticklabels(structures)
|
|
ax.set_ylabel("Время (сек)")
|
|
ax.legend()
|
|
ax.grid(axis="y", linestyle="--", alpha=0.7)
|
|
|
|
plt.tight_layout()
|
|
plt.savefig("performance_comparison.png", dpi=300)
|
|
plt.show() |