/
Konst_And
/
Labs_cpp
Обзор
Документация
Войти
/
Konst_And
/
Labs_cpp
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
lab01/task2_python.py
86 строк
4 KB
And Konst
move py files
05 мар 2026, 15:15
05 мар 2026, 15:15
2995f69
Код
Авторство
О чём код?
# Задание 2: сумма двух import numpy as np import matplotlib.pyplot as plt from scipy import optimize # данные sizes_2 = [100, 200, 400, 800, 1600, 3200, 6400, 12800, 25600, 51200] neup_avg = [7, 31.1, 147.3, 445.2, 1681.1, 5704.4, 22507.9, 78863.5, 305744, 1.27773e+06] neup_worst = [9.9, 41.3, 157.25, 647.2, 2424.65, 9792.9, 40709.7, 153633, 607828, 2.49257e+06] upor_avg = [0.1876, 0.33952, 0.6703, 1.21928, 2.3896, 4.87426, 9.49058, 18.7552, 37.9589, 78.7507] upor_worst = [0.2293, 0.4456, 0.93948, 1.7436, 3.54608, 6.83438, 13.7187, 27.1077, 54.3656, 112.486] # функции аппроксимации def linear(x, a, b): return a * x + b def quadratic(x, a, b, c): return a * x**2 + b * x + c # Задание 2: полный перебор for data, name, color in [(neup_avg, 'средний', 'blue'), (neup_worst, 'худший', 'red')]: plt.figure(figsize=(12, 5)) plt.suptitle(f'Полный перебор – {name} случай', fontsize=14, y=0.98) # Квадратичная аппроксимация t(N) plt.subplot(1, 2, 1) plt.plot(sizes_2, data, 'o-', color=color, linewidth=2, markersize=6, label='Данные') popt_quad, _ = optimize.curve_fit(quadratic, sizes_2, data) x_fit = np.linspace(min(sizes_2), max(sizes_2), 100) plt.plot(x_fit, quadratic(x_fit, *popt_quad), '--', color='black', linewidth=2, label=fr'$T = {popt_quad[0]:.2e}\cdot N^2 + {popt_quad[1]:.2f}\cdot N$') plt.xlabel('Размер массива N') plt.ylabel('Время (мкс)') plt.title('t(N) – квадратичная аппроксимация') plt.grid(True, alpha=0.3) plt.legend() # Линеаризация в координатах t(N²) plt.subplot(1, 2, 2) n_squared = [n**2 for n in sizes_2] plt.plot(n_squared, data, 'o-', color=color, linewidth=2, markersize=6, label='Данные') popt_lin, _ = optimize.curve_fit(linear, n_squared, data) x_n2_fit = np.linspace(min(n_squared), max(n_squared), 100) plt.plot(x_n2_fit, linear(x_n2_fit, *popt_lin), '--', color='black', linewidth=2, label=fr'$T = {popt_lin[0]:.2e}\cdot N^2 + {popt_lin[1]:.2f}$') plt.xlabel('N²') plt.ylabel('Время (мкс)') plt.title('t(N²) – линеаризация') plt.grid(True, alpha=0.3) plt.legend() plt.tight_layout(rect=[0, 0, 1, 0.95]) #plt.savefig(f'task2_polper_{name}.png', dpi=300) plt.show() # Задание 2: два указателя for data, name, color in [(upor_avg, 'средний', 'green'), (upor_worst, 'худший', 'orange')]: plt.figure(figsize=(12, 5)) plt.suptitle(f'Два указателя – {name} случай', fontsize=14, y=0.98) # Линейная аппроксимация t(N) plt.subplot(1, 2, 1) plt.plot(sizes_2, data, 'o-', color=color, linewidth=2, markersize=6, label='Данные') popt, _ = optimize.curve_fit(linear, sizes_2, data) x_fit = np.linspace(min(sizes_2), max(sizes_2), 100) plt.plot(x_fit, linear(x_fit, *popt), '--', color='black', linewidth=2, label=fr'$T = {popt[0]:.4f}\cdot N + {popt[1]:.2f}$') plt.xlabel('Размер массива N') plt.ylabel('Время (мкс)') plt.title('t(N) – линейная аппроксимация') plt.grid(True, alpha=0.3) plt.legend() plt.subplot(1, 2, 2) plt.plot(sizes_2, data, 'o-', color=color, linewidth=2, markersize=6, label='Данные') plt.xlabel('Размер массива N') plt.ylabel('Время (мкс)') plt.title('t(N)') plt.grid(True, alpha=0.3) plt.legend() plt.tight_layout(rect=[0, 0, 1, 0.95]) #plt.savefig(f'task2_2_ukaz_{name}.png', dpi=300) plt.show()