From 53dd3fb4b0eebf4f54a68d906c817652defd1d64 Mon Sep 17 00:00:00 2001 From: KEvaze Date: Wed, 16 Oct 2024 18:48:09 +0300 Subject: [PATCH] LABS : 1, 2 --- labs/lab_01/37/Var_5/Vec_matrix.py | 80 ++++++++++++++++++ labs/lab_01/37/Var_5/matrix.py | 21 +++++ labs/lab_01/37/Var_5/q.py | 78 +++++++++++++++++ labs/lab_02/37/Var_5/.idea/.gitignore | 8 ++ labs/lab_02/37/Var_5/.idea/.name | 1 + labs/lab_02/37/Var_5/.idea/Lab_2.iml | 8 ++ .../inspectionProfiles/profiles_settings.xml | 6 ++ labs/lab_02/37/Var_5/.idea/misc.xml | 7 ++ labs/lab_02/37/Var_5/.idea/modules.xml | 8 ++ labs/lab_02/37/Var_5/Otchet.docx | Bin 0 -> 19061 bytes labs/lab_02/37/Var_5/example.py | 62 ++++++++++++++ labs/lab_02/37/Var_5/main.py | 54 ++++++++++++ labs/lab_02/37/Var_5/re.py | 53 ++++++++++++ 13 files changed, 386 insertions(+) create mode 100644 labs/lab_01/37/Var_5/Vec_matrix.py create mode 100644 labs/lab_01/37/Var_5/matrix.py create mode 100644 labs/lab_01/37/Var_5/q.py create mode 100644 labs/lab_02/37/Var_5/.idea/.gitignore create mode 100644 labs/lab_02/37/Var_5/.idea/.name create mode 100644 labs/lab_02/37/Var_5/.idea/Lab_2.iml create mode 100644 labs/lab_02/37/Var_5/.idea/inspectionProfiles/profiles_settings.xml create mode 100644 labs/lab_02/37/Var_5/.idea/misc.xml create mode 100644 labs/lab_02/37/Var_5/.idea/modules.xml create mode 100644 labs/lab_02/37/Var_5/Otchet.docx create mode 100644 labs/lab_02/37/Var_5/example.py create mode 100644 labs/lab_02/37/Var_5/main.py create mode 100644 labs/lab_02/37/Var_5/re.py diff --git a/labs/lab_01/37/Var_5/Vec_matrix.py b/labs/lab_01/37/Var_5/Vec_matrix.py new file mode 100644 index 0000000..3e533da --- /dev/null +++ b/labs/lab_01/37/Var_5/Vec_matrix.py @@ -0,0 +1,80 @@ +import timeit +import random +import matplotlib.pyplot as plt + +def get_element_by_index(vector, index): + return vector[index] + +def product_of_elements(vector): + product = 1 + for element in vector: + product *= element + return product + +def find_min_element(vector): + min_element = vector[0] + for element in vector[1:]: + if element < min_element: + min_element = element + return min_element + +def harmonic_mean(vector): + sum_of_inverses = 0.0 + for x in vector: + sum_of_inverses += 1.0 / x + + # Вычисляем длину вектора вручную + vector_length = 0 + for _ in vector: + vector_length += 1 + + # Вычисляем среднее гармоническое + harmonic_mean_value = vector_length / sum_of_inverses + + return harmonic_mean_value + +def measure_time(func, vector): + times = [] + for _ in range(5): + start_time = timeit.default_timer() + func(vector) + end_time = timeit.default_timer() + times.append(end_time - start_time) + return sum(times) / len(times) + +def main(): + N = 5 + max_n = 10**2 * N + step = 100 * N + + sizes = [] + times_get_element_by_index = [] + times_product_of_elements = [] + times_find_min_element = [] + times_harmonic_mean = [] + + for n in range(1, max_n + 1, step): + vector = [random.randint(1, 100) for _ in range(n)] + + sizes.append(n) + times_get_element_by_index.append(measure_time(lambda v: get_element_by_index(v, 0), vector)) + times_product_of_elements.append(measure_time(product_of_elements, vector)) + times_find_min_element.append(measure_time(find_min_element, vector)) + times_harmonic_mean.append(measure_time(harmonic_mean, vector)) + + # Построение графика + plt.figure(figsize=(10, 6)) + plt.plot(sizes, times_get_element_by_index, label='get_element_by_index') + plt.plot(sizes, times_product_of_elements, label='product_of_elements') + plt.plot(sizes, times_find_min_element, label='find_min_element') + plt.plot(sizes, times_harmonic_mean, label='harmonic_mean') + + plt.xlabel('Количество элементов (n)') + plt.ylabel('Среднее время выполнения (секунды)') + plt.title('Зависимость времени выполнения от количества элементов') + plt.legend() + plt.grid(True) + plt.show() + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/labs/lab_01/37/Var_5/matrix.py b/labs/lab_01/37/Var_5/matrix.py new file mode 100644 index 0000000..2749a78 --- /dev/null +++ b/labs/lab_01/37/Var_5/matrix.py @@ -0,0 +1,21 @@ +import numpy as np + +# Генерация случайного размера матрицы +n = np.random.randint(0, 10) + +# Генерация случайных матриц A и B размером n x n с неотрицательными элементами +A = np.random.randint(0, 10, size=(n, n)) +B = np.random.randint(0, 10, size=(n, n)) + +# Инициализация результирующей матрицы C +C = np.zeros((n, n)) + +# Вычисление матричного произведения +for i in range(n): + for j in range(n): + for k in range(n): + C[i, j] += A[i, k] * B[k, j] + + +print("Результат матричного произведения C:") +print(C) \ No newline at end of file diff --git a/labs/lab_01/37/Var_5/q.py b/labs/lab_01/37/Var_5/q.py new file mode 100644 index 0000000..2cb3fda --- /dev/null +++ b/labs/lab_01/37/Var_5/q.py @@ -0,0 +1,78 @@ +import time +import matplotlib.pyplot as plt +import numpy as np + + +# Функции, которые мы будем тестировать +def get_element_by_index(vector, index): + return vector[index] + + +def product_of_elements(vector): + product = 1 + for element in vector: + product *= element + return product + + +def find_min_element(vector): + min_element = vector[0] + for element in vector[1:]: + if element < min_element: + min_element = element + return min_element + + +def harmonic_mean(vector): + sum_of_inverses = 0.0 + for x in vector: + sum_of_inverses += 1.0 / x + + vector_length = 0 + for _ in vector: + vector_length += 1 + + harmonic_mean_value = vector_length / sum_of_inverses + return harmonic_mean_value + + +# Функция для измерения времени работы функции +def measure_time(func, vector): + start_time = time.time() + func(vector) + end_time = time.time() + return end_time - start_time + + +# Генерация векторов разного размера +N = 5 +max_n = 10**4 * N +step = 100 * N +vector_sizes = np.arange(1, max_n, step) +times_get_element = [] +times_product = [] +times_min_element = [] +times_harmonic_mean = [] + +for size in vector_sizes: + vector = np.random.rand(size) + + # Измеряем время для каждой функции + times_get_element.append(measure_time(lambda v: get_element_by_index(v, 0), vector)) + times_product.append(measure_time(product_of_elements, vector)) + times_min_element.append(measure_time(find_min_element, vector)) + times_harmonic_mean.append(measure_time(harmonic_mean, vector)) + +# Построение графика +plt.figure(figsize=(10, 6)) +plt.plot(vector_sizes, times_get_element, label='get_element_by_index') +plt.plot(vector_sizes, times_product, label='product_of_elements') +plt.plot(vector_sizes, times_min_element, label='find_min_element') +plt.plot(vector_sizes, times_harmonic_mean, label='harmonic_mean') + +plt.xlabel('Размер вектора') +plt.ylabel('Время (секунды)') +plt.title('Зависимость времени работы функций от размера вектора') +plt.legend() +plt.grid(True) +plt.show() \ No newline at end of file diff --git a/labs/lab_02/37/Var_5/.idea/.gitignore b/labs/lab_02/37/Var_5/.idea/.gitignore new file mode 100644 index 0000000..13566b8 --- /dev/null +++ b/labs/lab_02/37/Var_5/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/labs/lab_02/37/Var_5/.idea/.name b/labs/lab_02/37/Var_5/.idea/.name new file mode 100644 index 0000000..11a5d8e --- /dev/null +++ b/labs/lab_02/37/Var_5/.idea/.name @@ -0,0 +1 @@ +main.py \ No newline at end of file diff --git a/labs/lab_02/37/Var_5/.idea/Lab_2.iml b/labs/lab_02/37/Var_5/.idea/Lab_2.iml new file mode 100644 index 0000000..f571432 --- /dev/null +++ b/labs/lab_02/37/Var_5/.idea/Lab_2.iml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/labs/lab_02/37/Var_5/.idea/inspectionProfiles/profiles_settings.xml b/labs/lab_02/37/Var_5/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 0000000..105ce2d --- /dev/null +++ b/labs/lab_02/37/Var_5/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/labs/lab_02/37/Var_5/.idea/misc.xml b/labs/lab_02/37/Var_5/.idea/misc.xml new file mode 100644 index 0000000..ba9961c --- /dev/null +++ b/labs/lab_02/37/Var_5/.idea/misc.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/labs/lab_02/37/Var_5/.idea/modules.xml b/labs/lab_02/37/Var_5/.idea/modules.xml new file mode 100644 index 0000000..b5c98d2 --- /dev/null +++ b/labs/lab_02/37/Var_5/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/labs/lab_02/37/Var_5/Otchet.docx b/labs/lab_02/37/Var_5/Otchet.docx new file mode 100644 index 0000000000000000000000000000000000000000..b662317f8ec4501e3264c26620cfff7f5bd7e9ac GIT binary patch literal 19061 zcmeHvgPSHxvUhvhwr$(CZQHhO+cu}|?rCeLZBN@azdmR0-m`o5-oN0xmCqYbRc8L8 z@~w)jh>D0xc`0BJWB@P#Z~y=R0szJYJ2g{40Duxu001Naa3C!qJ6mTHTW39G4|@|Q z9a?uAYy3hGAo6?wps)V_xBY*71)7p4EC=Y}MIJ*wf@WHlB|FGV2FD8HOt8#f03(@Y zh3^H6x;}b#*%?ZR8JNe0@u$|krob73W>zz;ArP9~NKVmsQUj87E!e15miB1;j4?=m zC(~~VjIsJ#Gk0}kNV5Xc6EzPc{!)UJ%Pz_eLQ#JLh^0)4Qzhmc#()#_jl#Hk)x8Xm zx!n5hAg2n(50%i~!wm)^1VVC`l?vuNf)q(&Kz0C)p!KF5Z6L*ADA0 z1`~}ZT~0Lu?Aig>ky(ynY=kh^`F(y!jhC{vOIuwLwafI zMzwm{cFHe#faVODkb(|wR?|&Te--`51QK)4#&tX*L@nTVrwd{AzPnpXh%=Z52cgJc=q>1+{w*uXX z$mPH*-kru_d|#6F`3Vdl|8LV1HvzNt@~cJmYxY5XO;0^X6Kf|r+CS+3P0Rm}=i1G}EoH+J{~wOJ_8_hQ9I*TuVY4X>HkZ>EoSyc^OFO*g$Mzb}nh! z($S@rASI-$gu#8$eg``1;KB5LoJfLVJSa*7C2|TA zEa53U{nrnqeM;en{W2&ELW-$*BjU!QTnCk<$8=w&{0xSLMN4rluWyw+B0Zrv9g`To zkfwa~X-qWnas8VOI)ln5No|ZVmK68YnAY@kB-sgu)sUE1T{9=1MZIN15h2tN1rQN* zuimEGh?*aVkp~!jtd|5DO?toWu(EXoZoib&f6fnI86+`OBme+yZa@HpuZ!Yl=V(l4 zY-i+R^QFW7P+n&|I(BQzDVLxReDI#+*z+w!2oNda zowM&MlB7x3OkEqa?hNXqE`Bzt=hK05+j2Yb4uicwmHW**(NaXbG}Iao5!%(_QAc!j zbv@=fO+9iv9`?E~TR_2K^O<{G*b1zoLIv)!c9~9WY|(hXNcdD~!v{{gX1T68RcDHgduWhungP( z(a8I2btp~^sb5gF=7`HiU2F;lR&xW;<%oI>Yn}VZ?Pj|H)P36GaSg|XWW0tos!7F& z9-6Bd!xyMimJ9cJpGT4ql({~t4~ba_-N($280W|K@2E7*%=sP3N;%>2*PLKlFk1#%7MuHz}XU&gPm?m z|1L|E-la{<6#Jh7wkn%bCy&ePT}5h4C(T$I5x(v-!%+dFq3ZBVxC`ly>zV z0*^CL(<^q^z12T8GShj)&54kYqwSw(W{*M3|H^bmAKe*a#tC7kf(Rp2x3m)ECW_Au zH1~-Os(tya{2c661d)(m;QZx5HSA_2&SL|}T zZ;z&I?^fi_HVg=7uR*ysRXVC@pxMsdLMyySAY2ds2S6l%#nT5d*u|qiX`I)Tg}!>F zx@fm)q*Y*n*K$N}(<o^Q}kkob5?k7#r01J~e?KfJxC)~cS_ z^R5)o2K#)rF4iGz_@cMc>myRl*(u5MkCki8Bq0i z4Bj3@f8tp8fr!f!DHFWp;~!_2!378ffitSJQ?TS1VFmJd!RGX$_E(RzBf&mLpMH$) z!WhI%mZJr??e)*y5-wX~ZiuK{I2G;gr&u#dwgJ)$s-3enOCuEa0|oJjVFwVuAxiA_ zz>1eP@8+^Ua5g;~u?XglD!!uoE|7PZd;gI$iVcGKJpzGQ_|rY0|CqgqGfr1-!H`wK zjf1RdyOn{>OH?1a3FL)c6CX#iP~0Rf`WI<7s4F#)wAe2;V?H@OG+RF0 z!_>>+YmjyTaf)nv8Jg+`*25$m*<6bJG)B}FTV7;W0&;=i0o{dMVK{NhU-OBvM5k07 zbW5JCC^W)6Ag)r;X_U-p=(9g)f_8|EarIXitQ9L$IqoRMj2zNHa+*GjwpfTh*4jz% zlSoG(Sd*qNLLLZD!A}1T(E*BB8fewu$^bP7Pws zSByKidke`nmi8)mOJ{s89-?$aWMH_-QA3R+Bn!+*Wb~uzF&msVg2SU$#wQfKNX;tM z7Bf4d9@J~HU-ei22S0UP+u&f^5C||=-1{WN7P?9<>#Kt^MXk)h4Y-@2t!TC}#XHkI z=aVROkeSlTHg&GVz{FmI0u_a5#%%-lOk>4EVOm5G@~>fKNR6>dtW;GB2i;-RGY&c} z7P{BiQP{(uAnrbL-s&R|Rvb8edCN2|iv#*}KdKv#7SM}?sb|xZ$ z=|k%^(GeVRy9o=`tuu)ou$a3f=_>X;Ma<|siEov~Wcw!~_Q}R*!-vo+-6JJs6iAG8 zEC}ZXLw{n(M9#bg$Op6gbHg5BhWTDnbyUYE79>lZuC~k@f`$1)zVxoze>yl4WdSZV z^<5MV4;Fl9Mnq!noJoI72^ES^R9SRxA6Iy1RG!M8=ozqwJLGcIhZ9eYuCW&9^5|w-8U_%48O0;rJw^*LpZDo=SWpkC5{wF>DEU0 zB^^PS{odvFz*LL7AIayifBX_Y^EQfvNl6r`xDZdRtA6;x7B&0m%^i{Sy>O}9Z1A`_ z{BvO1l0|5;tEbZb+7$fhh|UP$u)t_ZgjpfbD^nd}Il?y=^8n==z8*C9-r-CZd+Zs= zrNR1b@uiQE{0l&mw19re;*cpbc3Q06^c8Wps+zFOl=2-sndNQxY94^zFb4*i^^(Z4 z{=Eji35bR$_}y!Xt=bh$^m29iQKn@@N~CqoMA$2V5?Qm};0?MxsKd4c-=GJeMknoY zWQ8$rzQ(?F#b<2`PB0#q?c8g zFJFn$&u{3-7UxSq1S0%k8bIn9X~iHvCyjv}B^N6{cPR~bxM@=&uKbyg@kK^%RKa5t z=VAe)BcmchsU@0cJE%pop=o8ojE=nnA03Y0G{MCaopT8Ln4z+RqFEB5V3;INXaYxh z`ur0Ul}5q!ckokoW1y(LSkj89=`!g|oXIUhOUF>a;IPwsR2rlzKcMM_nopP$WM38n zMmJfbA=Wt`cL4KnW9d z`>#zoP^Kfw|JZYJ1cLzh)->$^H_Om-8H|nVzkBS%L88>n&n=@q#dr~qY)LvrL`-*# z9P!RHn_h|9XqhZMRBrr1PD9IGGTL`Cn=6&6I7gMy@Iy8V`e0g4=<_q6vX{6xWZJPG zOn;6a@qRYoSfR}x|i&7qHH*NGueHK?;NUY`CoPZu4) ze)jwhJ7pev>@1v2Q>B_%O@a+d<#@L4@W3PXbcf1&zARu4M)TT$BGEchg8r5ZfV2L% ziVGB!-(X0QDjCUwbH488?FM}wv;~ccSUf_78tb&Dx#s%#x`gd^I>%Ks@Br7!`;puf zJY?PaaDD|(Oy1D6hp^<7qn-c4m|IRlnjp1J2Y0bD%Q7UZ@~feQBBh=%u0c70IRRVc z%2#8!xyZnE8nK7A?zt((ZsWJ_LI=a)qA=ElI z4Tq3vBxpgCvu1-XYl#ZbV z+%Tu5Dyzp*GoGV~U|&}9M>IW+I&fp036A$8OVl&qWVZ8ri8m#Wcw_=?>8a^ZD(oW@ ze9*&1(#Ns-@pKdUyMkl*JL?#xNl?Cv(8|0ln;(UjE*UE^Aje9#ml7#Sk|HXdYDN1> zrWElL5aHlM-h9i+H^^)ts6BN@hdq7LNlPiv)j0^OUJx)-V7%0zc1omABBr+Kh?i_2 zrIak)8@G7#2litSGQHaZE&!S)h)6v1k)e|O*{pIq=UIo5&jDea4TGdQmhjgIqx*v+AQ>8^RHts#f0{fDJWjpV<5Ff3Xa{2NW_%S7{{?hYE+%mNtV1QPx zn*=h}S79iQN?&rr?itohw#!U1KlEyrh+uFEopM{?De5v=t68tC!^U_izr)^?eSK*e zVY6h#rA*aOlA%&db&#DR!!c!+8RV4mt$8{>jXVlPiMnoLsxQIVpLk0ajIa7`6j=g@ zk}yhYbT9+x#Ms;|HQ(#_$ds~4#*B_GG}HsBYegLLatr20fjrny66+vFdN1}T&IwOm zQ>F=PKyOPU8f0hS=&1AC;s@YlSjw+CS8dal=IzS96f=Ot&UcgP!5)%i$Xb0gmo8!dNK3`O=%^K4 z48PvpiNJo|E%UqQHk=}fma05-dPTG#5yCqQuu=dFKHj=1 z*0cZp!MDeodLHou%ZU&cST+C+!Ir(O#a#a+L`^^fZR!Y{9wgkC_6pmF0E!~4wg_|q z)-oLWW(UnP;}aqqqny*EHq>R=>LDrmkRUw&oupB5Z0nV5IqFtMVIp;-&Yv^f4>B>- ziQK07!>B`2O&TByzNX3N1e3g=yN>qXmB*|1J$b2rY)rS}vHSiAFLh?Bp9dU;T{}}I zk%)F#ZykS}aXBZVT{Tv2k`Tut16>hf0m`s}mUPX^hPL;*^2&nQde?^EM%IUb{E@7| z=9b8xJBA|F;djIZOJ|TPVT2dDM~@;IE~0tC755!1d`vlB0lFgMiCz^x;R-c2kL0}b-zEXQ zm&PGEN}#abvShw*of=}1Ox_Fk`L)W^{zeesdhDXV;~eNT#~aL6QXt&mV6~=~t{L7{ zaeDw@P~v-p6S`sIxM}#^>`;MtWrXF}e$3)~+gaP+u9EXtvE9(H1yFlw&bOI zi|`B-hwX~Z*7Yp+l(9#AMJ54~mp@-j~>0}m`71aWOM4rogk8Y=I%8C8)moI&d z@rGUgvF7Ry7gey$cM&+#!D+*sG!)`XHv+184I(|_b0lta(4%#XE48TGuJ=UW4Y9BI zR$44xAoXmTm&}huK_A7DS#JrHI#4Bkj7bQhUaf&gm4h==W&>g0Yx|%!Zl1YB&{}&F zuxmNNPo%>mn_dIiC-<7Nj$C0U71W19YE(jutYikcM?zeO?7!wEWv7$D``)kJ;Qfzc zB<~q>^8y9{@P-cnfb!MjPcd>fH?c9H`;#*K>5tXWio#+;_NBYygTB3ZV%?PrM>?y| zS+hlK$V%q6wDAzFH#H{qU@HX?yqQl+71Vs0=3h(WO`Z)YWlj$L2syU{C%(HO@+_|B zA=0uKpTikw9!&$Lf3+9B>I1 z9)nj%-A?5i=;v{Jcz>MCpJVK2aOLMkC{vh-DbCKOMI8bNO<*4)We;da*kwqZ-ZyX< zodG^Kj5sAG2WuAF!hUzYJDn+Ta$zO}KFifPx>R^d6E6S*OTHvOcPF^J zzkG~?jmyR5;pKdL$8E~%ewpyz>=&M(Ip%A1 ze~@;d5Z(t{$=25U{I!1oG~ggIacyr$apcjXW<_^z1(0&urrWJ{x{&(93;+Z6{WdwO zqEQ#3i-Yx>WESeihG(lL>lMfQ0*m*W8Xj<+fW@5Fz~ifc=>Rsl&5M ztCiK0XT`?-37BpWp=9DUX2;%AWuIZI)M)q&l&bsOTzqewqEkV7CMseYR>#l4iuQyp)vtp!}s9QuCoTtR?3 zmf{;W!?rP@)&+^4Ve)bs5~ z-G}E>1`gfL6WW&F-A>xphfFuKxsUJD&h_tGI^K`n&M;K>tfFpi@3cX6cD1Vjr<|eh z0uw;)alN^Nw!z}Mg*m}MB;sT0(>xd$M^sG037|`Tr8stu;&`mv&&M`FSF(d;iR%7o zMauxTOrl)TT93{eH7TwA%n;{Mw-&f=I0Zgyt9_AaUULxHz=lc~!pr#{F@X~b;Yidt zEF;6{T7$L-hRZHl(CkRo#5r1n$M}XUW3($wg%n5~{DxN(KSkl+Y?e)5OXm#cOM9Xo zWr(w3gl#ApSbn z*>06KE(<$K472W`8dArdH8{W*xEtGX5-Gv zV4a)LgDjxh?r+o59{f{XjHbOx@r zOFfJ3vA%V&V*f%xb5a|np^+a}vu;#8f@&q**)`{G=%?;}bimK^Py8S~EilAasx?zI z1)~6JeOCl!j234o!q8VH1effl<#|drMmU>;&>hJcq@=wPlxfNH-QMoiZ3zek$-r}3@g{4uYV=T~*;h>(1bJ_FEpRbvwa~`}E#i{u)$TKK!KiS)O{q^Qc|bAXC0vf8*QwJc@&4NMX9M{c<|Gqg@=4&CxBD>K zqY1WL*<*0w(XNEd0VWfkA@V;}!um7l0Yj2;TTWDwoH6Yh4LCJv>2kdS0TNf(kqx69 z$k&WHHLJ|vo>EU-=;q-}(Lj>VPUA;uOcTpB#plt2=m-kjT&bxuQBh$^e2JjmSso#^ zRbdt7W_;*OKz@HC;8pgO+(+Bwah0=UENwrJH1U!dx_9Tci60Hgk|0D2MbIX#8W=e{ zH9b%a%4HnljPcyHdD0|FNm=JdYCOdLkx})MZ|YA<;|9W4kdGn9pC_LIHA8RF4$Q%J z=Ql=;L~D!|K^}5k;rz*vkj|An2!HCqHch;%T06ghyQSdxYqryj<2}WV5jW;2?c0;pZHcu9Vl(b|NjM6^ zWC)pC^9P%Dk8LJ*X;w!wdQj9HaAJ~j8gV} zf>bg))SPsj5>8n+5bb;k_R3A7Fy@hspqj1ci(R8Z1#H_*%xyb}VqaO+V>Dd^s86If zw7d`|A8dv8+zLE%6e*Zho=^r9zPp=bm;&*1jMBOlGwm1e`>Nlp>B?UR30C}mgw$Q2 zLc#Ry)HHwfZC<~fD6uVbM2jXYYC9{ldi*`Ym-9>S{`9(e>HWI!j+aH>A>p|7Nra|a z?=g*P`1IqBrnj-`Kqt)KgtuDd<(Fln5*2gRxo_X8D`tqP{3&urbN=SJ8*uN;*_KO= z56r{r!jGzZ%n(fua7f*n;v=@qkPfwqrf$#9ncG#j!r8tii=z zq{S5h)ggxx0@RveITYcV&(H#;jLl^+SYGKP3Kgbj!zJXaD6J@7vQZ_?6)>$5BN~c9 zE$}u4yNB(J97!TGlg8QO3J9SM;Zru{D|oOzHCO@Ia*bb$WUM)EJv-Swhg{tRe+La& z^*4ekMg*F}d>hPwi&xFry~CL4d&GFMZ9OXg!5zDP!hZAH0%VLSP(c7!ZWp~3n?N1+ zR^A(P>gb11=iqQr9@IfNz!I4PF)&`3kNPbUZ4At2w&>v$c~i@1KFn-bWK;BB6AUbz zv)AUnR^yVgKJdn@Ho?OBWy_m;!bUY!f&3&sHu(Uqvf`A8ncr{zvjLj1qNFwMWl-Zo zppHp40(ZMKi9*OW&*_Fja&Q^|P`dFH0kCjJ8VIA>FqCNgtImlx;y|Jx z9hR?>dRmdwmq#r{^!ykXe|W@&jnMYG5$BgtMUHjL+>M`MXz*WAy~IdUy;UrR0u`P5 z_QLnY0pX|IzhOx3`qGUB;wuSdZjNSfMSvDLN~9p3l=jPG*&Rfuk|=EZ3)avSc$Xt` zr5#!Y(nrs--Dp|eu#pe^!d@5B;QblQ5U6*#59au8MRr^(@2=f*CE(wzw+>+dTdBY) zKIgnBY&ioPaWLbZ*%SQM`-@$YZg)m%lv&oa@mOlqn>!mWJMRjfV(JXwqwsA!)hmt- zH7)!wvT$=Y_GsF2@5DfqD((=(6OBVu)#akkw-=CEESd)Y8rNQ87o${DH(|DB1+l_q zWX-Z1tz_DZ7pKjdj_5>=#BwE{E5ul7SeHb0ZZT2yAk~p>$))E;6~%dtsJ!;-u*T8j zWVUevIyuDZTkB{_+MJ5Z=Y^G)uXK&|aXd+4L&Xno962D-B`l=1LWZl*-%^v^d#A-i zh+!l!2fFeGZeXkDg-Im3uElIu4FY6R-PGsCLUdTJ4GC#6)z-i~VtoMa{uA42s=AQF zgR$GEuzsYLiTP~eiB+b&{2mda)3DGRYo>b$rEq=oKfW~-rx%HFMI)+x1+0a<6tc)V zP#ec@D1va7&hO#!&^r-7X;HaaAtCqMR&Tqo#Qc~8m?{fg#M8A!zZAQhdbX)LGMnpQ zX^gi!uOA!M$S<0xFxwrBC7tc{OK}dN%x%=$(t+W-yjx?2n9}1yJ|8xnyEzZeQ#rIE z4L(`0v|Dlv(p~dwJ1>cMzmTZU|ItE!qO+1b`?An~y8{3q{?kIYb+Iutar}Dh{Ar%& zOvJ9SB8NVLzQBeC&@v%XoR}ITJ~1j4iw6}-%rsNa7!h;?B%Wu`-ZJ_G^Q!6=5SxrW zj4p=X3|{S6i?)b=5c=Ut9wwPgtv$v$Fsm!2hFLgr3A4S}^CR)W^zZ$4eOgL;Wt+5* zN7F@gSIC@R`;GJ~>~ib8)MZMB%7tX6maHrq{C!_6zl| zIT455viek7)B?F?nQ!p*kTne z6kA~yAv`k3+?b>?B*KVKhGSh;l- zDRxVjAy8;NnhhB+Qss&80J(%+pUC8KQW!~+Bk{)qN|oc%rKW^2t15WzT%d98kDaKT zr7#mY3g$9W7;)OZojij8p(25>R(^-an(>ySf{WCzAXWR7K)UJ~(t3B}IRh?I$;#iD z>J|C;Hi=~6CR>M%+nTLN$2mtko~QqN~A>SzniIz#jbyJ(yy6n>3&iQh6P zuvAsNswP{qUYRKze|uhpar5)>4c#&)%8aZ}2jLj>hX8k6wKK#2TILZvYHr7b%^@$6MXC*bX#ih(S4+)Ngqe&oKTssaQ zNQN2)&Q0M}3`?N2gxNWmzNn-W2EhMyzZ_d!0C4`jK&ApY12{W}!X}td2!#bmOPfAa zpCxcQ9~qtDhy5VK`}f{y4aoVx`9&?r`MWpM1d2c|N8d+Q%cyKqV8%cqb}hQ^?kn8UPw-0t@Mho`}E2<)19L1 zVk)f;@e%etL3cb-a|u-%IHwxV5hll2M81+Vny_+Z85EO|A$sFxuar|5jWw6j%I5%u zzgOy2{-DF@Hm*rljeQ*Ag+f1%WSbboBRQ8kw@*bs(!V*hDtd6&4BjbL0>Dz~uP*PkDytUC|6S)OK%2Xqp zu#BOhF}mx-kwa9u_el+hXA=CkHQA{0H-Q)Xt8-KZiJB=92v&v` z?Gg4G3bh*und^L0A*54q2Nktexv0$7!u^)uBe$<4+yB8JM~5$#UHme}jlOgv+&^`r zle34l$)D!}m)?UbA%KkrI26qiGSyp%&{ap*HTAwDDk`!!eVd3jS`yfI23_ zO@)wwGU5AaP94tu>(Dx3si};%i7ZznDmsjLN~9>MZHFYdMCzwInm;0{DfeOHPL6qW zZGs@g?X|d%u#p-@Fnmgd@bjDw+?zON zHgykWVJGa`hZ*_R#K4~tylfH3OFz0vE=UsIbArRt9x0|qnNf)m1OmVV`2+Sp3+eXp z?h|;c&Kn?Zg3Oo23Tnf{@{XdD9TFz$R%A+hPwY;nIOL+Z-8qRpMwe^KOUbDW3YVjH znazOf!xFpLCowG6InwYjAA>y%ta%L(u%JyM;FzU`F2oS=U|OnVp10DlQnh4FN)}s& zh`Z}rP4*X;xEdYBfHQ43WcErc$WP4q8*0Yt8L=;MhtG16O-L1E-b%q$M8^x2W_(|? zlZjLLa8F_@J}@_$-QQ&v90deRDMd^{Q6kK`_!3#dGk!X)dEuSV=}8?6Dxzwm6#^`5 zk+_0$linnZ$|g}tM0Pv74h?+6l!2_@HP0VM#JZ%lV;p8m0FML1Q_e8l4JJJc6hV-Q z!7Ft_ow0Mu+}vl@wE2A2CSmF(*fXKzy~IANB9FX1I^!sY%D^1jOcu}cO$Doea~V?& zp}Or|_+Ia-mGqvC$iWM;y9BP{gKVg!xhHCsm9bydQl(b_x$03B=(<&z-`z@S{#gUb z>0TAM*{dP|dD}}JUXp;$JAY}w;NKBpq(GEugn*T4G=rFFlmMA&qyUs@1mVm)f;eIx zOCpVs9T?U^&K&47f_Q$u{>vyB%k4IPdw7EzsLg?m%$x1v;O$~~BYSeAEvvB=%gw1_ z*r}>Q)t z_=GnX&9NK(N`v0$(Q$09bBEcdm_cvaUpQgg1H@FBdYqbP2XPJ~XC}Io;2vZ7Bj1q( zz1W2D9zF}o@iInaZq(^Uj2U=m|& z1=*q*A3>@5`w|%BoS#KL{kz&9I|lksKh@AIGRtyjndNXwEplIKBIWen|Jae4tcrYOo$K<8CsZbtH4 zp+ZySyhIZcV%kD*OYf@q3}3%05WAVig$&p)bvT4K4Oz1iE+69_6`EHy>!B06swIsv zt9#~IAsQoG-Y1CxG&-ov2$K~dyIGDnqYq&szd?zFYsy9GF*~X>=fpRShV-QDiso6& z!dH1cJ$wZ1B#}$7jltj&-#6Em6nNBcAExkVtxIZsGyQ6j{0#SJsZ6c0?GRl4$yCX$n=Z-hF>%w1#@ z1$Yq1h&7axVBuB~J+3A8@ZcH=hF+=0(z$8(q?B8A^@j}xy0Sk62RGT@eEq&b9xMR9*G)6%zthcqk-CKn{oGOju%Bw#9ylL7Ir|LyJv-8U-a{FI&yh@^ zwf*+RC$b-`&($|C_!m(x)#x5*b2Rl#h zhMT6cuGkEDdMIwBUU$4yV&=el>DIq`AV?of6upz0`Zdio=zg!uu%Z24G4*(wrI-1$ z)?#qHxR$&t!_cp+vp({OWq0G(a8<@&=Dx0&l={Jk>BIuH$FH0GA`bxqxVt!}+0_N2L2=`5{o!xgby!rv*d6o8$?;TG#;x zAW&9!gCWm#f*~nr1w)YkQU8TNA^b--oWloIC$a)TNX>Hi08~oh{E*6nD4s8bgJ8(R z9|*L6ZG%KGFAxOzqbnjMy&EEBael}@s}^cPFTNn`1%h5*kjN-`0?sQSX;lyUe_-o3aiSSJi7bI9WCyNDLe9Mftrb8+g`mbd}J2>f8ybnhs(B=k@b` z(>p9)(&lY})Qc{-%Ovs-w@%GKBg#%20z1t>kxg5z;;dBt#rCyS9~min=!+H-osx-{ zLSzPPz}*&RBlI|$1Dlmq`Y@gK)FK$6vLo{7Iyt6f&iA=F(+e@KK;wC;(3|zH$g2ac$yrqeKfl+yqE+Vj zyRZ%b^X)`pU^sSONy-%eJ}s#aA* zZdEJlu}nWA(+@4Q?r)90lh|l*^j(v&8b?hEtk0nt#7E^7yH%6%fB!2ERVAcqolpz1 zKRPg5H5>jQmM$!|&GRRg>y~2|U!-Dep>07iscIvsG3RS+Ulj{~R8&{SSf;X5$0oP zE5Md?6)mMV9O0)~#iyq-Ynsqi^3{*#^);TgFB_V@-IlX+2C0qZV9}yQjWa9tyed_C zdJp`^JB{UutE9c)a5G($7SE=Q72cKUN8vgyw<*3;8MWkfxvS3i=u7+awR0p*J;t$b zvp0zx?YGi)Nv}(rOs%Hvo>STD-VNSU+TkWq7ZoouvOtP zeImLgYPN#iSj2_RGE84$T_NQmkQ*Ch|2!%4ULIPRa4*H+LUbzkJo5SVIpKfCBt{L_ z>@vPuHZcGIkpKA#1^etc}rO;y4K$=EJiACm;QPjnur*i{J=$f0%ujY2>Kj6BMo52c@Nn8W`*abL( z@JBxL#U@%~A~fUJyK=-1!{+G1w*Q#S0L)*H70iFy4%6#;_BWB#Qr)!=!xq_0)znl_ zf{C!!_J0arljz-QQ1@P*mz+znCw>G4y&wYT{Ql|Ub(|(^{Ft*DwhfB5+)h=WxRvpa z*#woxoNNML!Z6nHN~Lm9+u`M=+;#&)RObTfIDzIuvK|baigeFwTI_< zIAT)KZH#Aaxr8q0X5jmL*fl*Jc)l+Pv44_bTXTY7xV^$Yu|O0zymDf&XCz$|mhW}# zz_|lr%svD@b^Nq-d{nioGbHlNPDVe>F=&xks-t*t{#mv#T^Gj9twzKl$q0`GeTbPM zI5ED9te<_>1fsK^-^ErJIe2l@t2*m7NJFoRKMGRaRB36f2kr{1_I1{xW z9WlAT-9o0^0x%h$f0jBgYmqop6?z9f5qiq(-h#OXxfsM4{MWaHh&`eR1Q7bHu$SOa zZ~_n5+b%ww$<9wmCgZw$I;EKX#81N|Nj=L2%u+AB^ktt~Kku&N+H&~H_nTv%&)B|R z#>3wK@w>nuZm4n|U!wd7`7fSs)2~n4l?@E7P5$t7@1r6V|wk^SnN48 zi)6wS*9hZf5Hhj#0E{i@sXQcF;#E`rKOqCY2cI*jNMe(VcTuv-~7zhDztp*Qw!TJuI%<0DRz%JC3A`Y|f< zc(NRN5>Y9LOBOpg_KAXnT~JXCi_(vRAt59jIuAO_6`tyV>}s{Shrz6Sx6Oy7%yNNM zBP*LMH(VTZHRhqmEwvSe~GVtxZ4 zLu_#MX@t>=?Ob*+umeMOu>{r(Xs3twt=HSywR4`?By93QhkS3qrFMA}3c3Y4xgJ|FtqxjIP!5hYR+tEectRYz#{Q36S@ z4J}j(l95t#f8sQZ1|Tf=CFY?%I8o@f=5$IoA*VRws?>PRI3}PdgK>NiJ?1MB9-am; z<&xRA%t?q0CnX8?DA!-Pn^v1aCK|Eh-v!P;cy+n?x>?m++RM8O{b$o>M(vXXFn5j2 ziMrq4fGk%X^On;o@k`~8i&9f=Z_lYQ3#%4=?eZz1hMID4j8Tp9D|Tj=)vQy#fl8SP zXPLcLOTnJia`NoiH6EaxxxbUmekXWg=0#tp1^Zb)EL;<#bI8->mp&zr>E4%e>Q(E; z^=Mak&3@Ar=h@o#ra;d}eI+*}fgCI}B%9xC_QWx#_jSqtQ(CnG#7JMhr1kX6g$n<# z(rRFD|Hni1|Ah7HvVCpYN`0|&^zhw8*Ki4!T4fuvsg@@wCy?iW%aXq?a$}e*Xb{&L zx))OYe&fL-210$t%NZt4#{-c$hHrM&k4)JO+utjvi~;&gFIF$RCpUn^G_QSpB7BaU}*Yu%q8S1O;JToo3pH7R#5ELMiRxk64w(fD4^QbaLliQFhsq2l27i>9b zA#46_R*6H&93`{h+%l*zq=mcoi#kwcdFl6Ybyk++4^5#m5x%Zn(TH`# zqT1$x%7|(B=^SF%fZr3RPvnL^i0=MvyYGcN{P_v=3bx;qu3I^Q8hOr{7nm1+JH@F) zl`*k%r$%)XOlxqjB_*2~)E_PlK*uQRWaiWznc~U-+^&fLG%f81m+)%Wy2tT@K$kVh z1A=u5wSx?7xL_(^z$fW8n91Bm%zVrbA#GfFk<+AnK1Dw=Y7aVK)}ESW0Z$qk+Yp=SaRP5z=DGSod#!1fT|Vcy zunsMloRfg;f`&N^KV_Y@aS0*aTik>ty#AbtGZ!ZE-ZO5pZ$wx5yS}Hzg%8q)QDgS# zU=+)UQ5-I!v6yQFBKp!1^Ojk007Wm N1@KEkb;bTT`hO-n?)Lxy literal 0 HcmV?d00001 diff --git a/labs/lab_02/37/Var_5/example.py b/labs/lab_02/37/Var_5/example.py new file mode 100644 index 0000000..34d25d0 --- /dev/null +++ b/labs/lab_02/37/Var_5/example.py @@ -0,0 +1,62 @@ +import timeit +import matplotlib.pyplot as plt +import random + +class TreeNode: + def __init__(self, key): + self.left = None + self.right = None + self.val = key + +def insert(root, key): + if root is None: + return TreeNode(key) + else: + if root.val < key: + root.right = insert(root.right, key) + else: + root.left = insert(root.left, key) + return root + +def inorder_traversal(root, result): + if root: + inorder_traversal(root.left, result) + result.append(root.val) + inorder_traversal(root.right, result) + +def tree_sort(A): + root = None + for key in A: + root = insert(root, key) + result = [] + inorder_traversal(root, result) + return result + +# Функция для генерации случайного массива заданной длины +def generate_random_array(length): + return [random.randint(0, 1000) for _ in range(length)] + +# Функция для замера времени выполнения сортировки +def measure_time(array): + return timeit.timeit(lambda: tree_sort(array), number=1) + +# Длины массивов для тестирования +lengths = [1000, 5000, 10000] + +# Списки для хранения результатов +times = [] + +# Замер времени для каждой длины массива +for length in lengths: + array = generate_random_array(length) + time_taken = measure_time(array) + times.append(time_taken) + print(f"Length: {length}, Time: {time_taken:.6f} seconds") + +# Построение графика +plt.plot(lengths, times, marker='o') +plt.xlabel('Array Length') +plt.ylabel('Time (seconds)') +plt.title('Tree Sort Performance') +plt.grid(True) +plt.show() \ No newline at end of file diff --git a/labs/lab_02/37/Var_5/main.py b/labs/lab_02/37/Var_5/main.py new file mode 100644 index 0000000..e432ff3 --- /dev/null +++ b/labs/lab_02/37/Var_5/main.py @@ -0,0 +1,54 @@ +import timeit +import matplotlib.pyplot as plt +import random + +def cocktail_sort(A): + left = 0 + right = len(A) - 1 + swapped = True + while swapped: + swapped = False + for i in range(left, right): + if A[i] > A[i + 1]: + A[i], A[i + 1] = A[i + 1], A[i] + swapped = True + if not swapped: + break + swapped = False + right -= 1 + for i in range(right, left, -1): + if A[i] < A[i - 1]: + A[i], A[i - 1] = A[i - 1], A[i] + swapped = True + left += 1 + +# Функция для генерации случайного массива заданной длины +def generate_random_array(length): + return [random.randint(0, 1000) for _ in range(length)] + +# Функция для замера времени выполнения сортировки +def measure_time(array): + return timeit.timeit(lambda: cocktail_sort(array), number=1) + +# Длины массивов для тестирования +lengths = [ 1000, 5000,10000,100000] + +# Списки для хранения результатов +times = [] + +# Замер времени для каждой длины массива +for length in lengths: + array = generate_random_array(length) + time_taken = measure_time(array) + times.append(time_taken) + print(f"Length: {length}, Time: {time_taken:.6f} seconds") + +# Построение графика +plt.plot(lengths, times, marker='o') +plt.xlabel('Array Length') +plt.ylabel('Time (seconds)') +plt.title('Cocktail Sort Performance') +plt.grid(True) +plt.show() + + diff --git a/labs/lab_02/37/Var_5/re.py b/labs/lab_02/37/Var_5/re.py new file mode 100644 index 0000000..6c4c209 --- /dev/null +++ b/labs/lab_02/37/Var_5/re.py @@ -0,0 +1,53 @@ +import random +import time +import matplotlib.pyplot as plt + +def quicksort(A, low, high): + if low < high: + p = partition(A, low, high) + quicksort(A, low, p - 1) + quicksort(A, p + 1, high) + +def partition(A, low, high): + pivot = A[high] + i = low - 1 + for j in range(low, high): + if A[j] <= pivot: + i += 1 + A[i], A[j] = A[j], A[i] + A[i + 1], A[high] = A[high], A[i + 1] + return i + 1 + +def measure_time(sort_func, arr): + start_time = time.time() + sort_func(arr, 0, len(arr) - 1) + end_time = time.time() + return end_time - start_time + +# Размеры массивов +n1 = 1000 +n2 = 5000 +n3 = 10000 +n4 = 100000 + +# Генерация случайных массивов +arr1 = [random.randint(0, 10000) for _ in range(n1)] +arr2 = [random.randint(0, 10000) for _ in range(n2)] +arr3 = [random.randint(0, 10000) for _ in range(n3)] +arr4 = [random.randint(0, 10000) for _ in range(n4)] + +# Измерение времени выполнения +times = [] +sizes = [n1, n2, n3, n4] + +for arr in [arr1, arr2, arr3, arr4]: + time_taken = measure_time(quicksort, arr.copy()) + times.append(time_taken) + +# Построение графика +plt.plot(sizes, times, marker='o') +plt.xlabel('Размер массива') +plt.ylabel('Время выполнения (секунды)') +plt.title('Зависимость времени выполнения от размера массива (Быстрая сортировка)') +plt.grid(True) +plt.show() \ No newline at end of file