From a1438441fd393c6ca27bb301cbacff75c0f5d8a6 Mon Sep 17 00:00:00 2001 From: CyC2018 <1029579233@qq.com> Date: Mon, 2 Apr 2018 10:37:02 +0800 Subject: [PATCH] auto commit --- notes/算法.md | 41 ++++++++++-------- pics/5aac64d3-2c7b-4f32-9e9a-1df2186f588b.png | Bin 0 -> 10240 bytes pics/a4c17d43-fa5e-4935-b74e-147e7f7e782c.png | Bin 0 -> 5120 bytes pics/cdbe1d12-5ad9-4acb-a717-bbc822c2acf3.png | Bin 0 -> 9216 bytes pics/ed7b96ac-6428-4bd5-9986-674c54c2a959.png | Bin 0 -> 9216 bytes 5 files changed, 22 insertions(+), 19 deletions(-) create mode 100644 pics/5aac64d3-2c7b-4f32-9e9a-1df2186f588b.png create mode 100644 pics/a4c17d43-fa5e-4935-b74e-147e7f7e782c.png create mode 100644 pics/cdbe1d12-5ad9-4acb-a717-bbc822c2acf3.png create mode 100644 pics/ed7b96ac-6428-4bd5-9986-674c54c2a959.png diff --git a/notes/算法.md b/notes/算法.md index 1830732f..488beede 100644 --- a/notes/算法.md +++ b/notes/算法.md @@ -75,13 +75,13 @@ public class ThreeSum { } ``` -该算法的内循环为 if(a[i]+a[j]+a[k]==0) 语句,总共执行的次数为 N(N-1)(N-2) = N3/6-N2/2+N/3,因此它的近似执行次数为 \~N3/6,增长数量级为 N3。 +该算法的内循环为 if(a[i]+a[j]+a[k]==0) 语句,总共执行的次数为 N(N-1)(N-2) = N3/6-N2/2+N/3,因此它的近似执行次数为 \~N3/6,增长数量级为 O(N3)。 **改进**
通过将数组先排序,对两个元素求和,并用二分查找方法查找是否存在该和的相反数,如果存在,就说明存在三元组的和为 0。 -该方法可以将 ThreeSum 算法增长数量级降低为 N2logN。 +该方法可以将 ThreeSum 算法增长数量级降低为 O(N2logN)。 ```java public class ThreeSumFast { @@ -399,7 +399,7 @@ public void union(int p, int q) { 理论研究证明,加权 quick-union 算法构造的树深度最多不超过 logN。 -

+

```java public class WeightedQuickUnionUF { @@ -450,13 +450,11 @@ public class WeightedQuickUnionUF { | :---: | :---: | :---: | | quick-find | N | 1 | | quick-union | 树高 | 树高 | -| 加权 quick-union | lgN | lgN | +| 加权 quick-union | logN | logN | | 路径压缩的加权 quick-union | 非常接近 1 | 非常接近 1 | # 四、排序 - **约定**
- 待排序的元素需要实现 Java 的 Comparable 接口,该接口有 compareTo() 方法,可以用它来判断两个元素的大小关系。 研究排序算法的成本模型时,计算的是比较和交换的次数。 @@ -464,11 +462,11 @@ public class WeightedQuickUnionUF { 使用辅助函数 less() 和 exch() 来进行比较和交换的操作,使得代码的可读性和可移植性更好。 ```java -private boolean less(Comparable v, Comparable w){ +private boolean less(Comparable v, Comparable w) { return v.compareTo(w) < 0; } -private void exch(Comparable[] a, int i, int j){ +private void exch(Comparable[] a, int i, int j) { Comparable t = a[i]; a[i] = a[j]; a[j] = t; @@ -479,7 +477,7 @@ private void exch(Comparable[] a, int i, int j){ 找到数组中的最小元素,将它与数组的第一个元素交换位置。再从剩下的元素中找到最小的元素,将它与数组的第二个元素交换位置。不断进行这样的操作,直到将整个数组排序。 -

+

```java public class Selection { @@ -517,7 +515,11 @@ public class Insertion { } ``` -插入排序的复杂度取决于数组的初始顺序,如果数组已经部分有序了,那么插入排序会很快。平均情况下插入排序需要 \~N2/4 比较以及 \~N2/4 次交换,最坏的情况下需要 \~N2/2 比较以及 \~N2/2 次交换,最坏的情况是数组是逆序的;而最好的情况下需要 N-1 次比较和 0 次交换,最好的情况就是数组已经有序了。 +插入排序的复杂度取决于数组的初始顺序,如果数组已经部分有序了,那么插入排序会很快。 + +- 平均情况下插入排序需要 \~N2/4 比较以及 \~N2/4 次交换; +- 最坏的情况下需要 \~N2/2 比较以及 \~N2/2 次交换,最坏的情况是数组是逆序的; +- 最好的情况下需要 N-1 次比较和 0 次交换,最好的情况就是数组已经有序了。 插入排序对于部分有序数组和小规模数组特别高效。 @@ -529,7 +531,7 @@ public class Insertion { 希尔排序使用插入排序对间隔 h 的序列进行排序,如果 h 很大,那么元素就能很快的移到很远的地方。通过不断减小 h,最后令 h=1,就可以使得整个数组是有序的。 -

+

```java public class Shell { @@ -628,7 +630,8 @@ public static void busort(Comparable[] a) { ### 1. 基本算法 -归并排序将数组分为两个子数组分别排序,并将有序的子数组归并使得整个数组排序;快速排序通过一个切分元素将数组分为两个子数组,左子数组小于等于切分元素,右子数组大于等于切分元素,将这两个子数组排序也就将整个数组排序了。 +- 归并排序将数组分为两个子数组分别排序,并将有序的子数组归并使得整个数组排序; +- 快速排序通过一个切分元素将数组分为两个子数组,左子数组小于等于切分元素,右子数组大于等于切分元素,将这两个子数组排序也就将整个数组排序了。

@@ -652,7 +655,7 @@ public class QuickSort { 取 a[lo] 作为切分元素,然后从数组的左端向右扫描直到找到第一个大于等于它的元素,再从数组的右端向左扫描找到第一个小于等于它的元素,交换这两个元素,并不断进行这个过程,就可以保证左指针 i 的左侧元素都不大于切分元素,右指针 j 的右侧元素都不小于切分元素。当两个指针相遇时,将切分元素 a[lo] 和 a[j] 交换位置。 -

+

```java private static int partition(Comparable[] a, int lo, int hi) { @@ -679,15 +682,15 @@ private static int partition(Comparable[] a, int lo, int hi) { ### 4. 算法改进 -**(一)切换到插入排序** +(一)切换到插入排序 因为快速排序在小数组中也会调用自己,对于小数组,插入排序比快速排序的性能更好,因此在小数组中可以切换到插入排序。 -**(二)三取样** +(二)三取样 最好的情况下是每次都能取数组的中位数作为切分元素,但是计算中位数的代价很高。人们发现取 3 个元素并将大小居中的元素作为切分元素的效果最好。 -**(三)三向切分** +(三)三向切分 对于有大量重复元素的数组,可以将数组切分为三部分,分别对应小于、等于和大于切分元素。 @@ -720,7 +723,7 @@ public class Quick3Way { 堆的某个节点的值总是大于等于子节点的值,并且堆是一颗完全二叉树。 -堆可以用数组来表示,因为堆是一种完全二叉树,而完全二叉树很容易就存储在数组中。位置 k 的节点的父节点位置为 k/2,而它的两个子节点的位置分别为 2k 和 2k+1。这里我们不使用数组索引为 0 的位置,是为了更清晰地理解节点的关系。 +堆可以用数组来表示,因为堆是一种完全二叉树,而完全二叉树很容易就存储在数组中。位置 k 的节点的父节点位置为 k/2,而它的两个子节点的位置分别为 2k 和 2k+1。这里我们不使用数组索引为 0 的位置,是为了更清晰地描述节点的位置关系。

@@ -813,13 +816,13 @@ public Key delMax() { 由于堆可以很容易得到最大的元素并删除它,不断地进行这种操作可以得到一个递减序列。如果把最大元素和当前堆中数组的最后一个元素交换位置,并且不删除它,那么就可以得到一个从尾到头的递减序列,从正向来看就是一个递增序列。因此很容易使用堆来进行排序,并且堆排序是原地排序,不占用额外空间。 -**构建堆** +(一)构建堆 无序数组建立堆最直接的方法是从左到右遍历数组,然后进行上浮操作。一个更高效的方法是从右至左进行下沉操作,如果一个节点的两个节点都已经是堆有序,那么进行下沉操作可以使得这个节点为根节点的堆有序。叶子节点不需要进行下沉操作,因此可以忽略叶子节点的元素,因此只需要遍历一半的元素即可。

-**交换堆顶元素与最后一个元素** +(二)交换堆顶元素与最后一个元素 交换之后需要进行下沉操作维持堆的有序状态。 diff --git a/pics/5aac64d3-2c7b-4f32-9e9a-1df2186f588b.png b/pics/5aac64d3-2c7b-4f32-9e9a-1df2186f588b.png new file mode 100644 index 0000000000000000000000000000000000000000..f457a99dd853d679c8f1c814e389174be8ef513b GIT binary patch literal 10240 zcmeI22~?BUx`u<+B7&wCD<~wPRl$+LfiWan(crNV!2y&>h=R-l5(0rlML|RpS`{1+ zRFqM{Fo+TcC59*8I&OI|2m)Een0hI&{L_y>AS*+5S!~-!aPDp4_&avqtmv2PX%?uJ zd}%`YB6Huj=d|!j2iMxHdF*ABx#I3>?aU5m?$&wxzQWx5DxuRY;keDgH&*9aMon+` zEjmie*VwXNqmHhno0w^9xxe7eIhzIdwBD^RW5^O4b#fThiGt$d=rPh=j5hxiis)Vw z>R#bI8a)Sc@{Bqhvei}v3ej2B1@NPWc)YRnW=5}ZF8I-g~ z)~QGS5TS!`Wr;{5bmo#UOdf*l+(32zsWZYo_WGI&R?8RZiNu)kfeHnSYHu=0L zLPYEo%VYwy-eid{UlAQ*JN^InH~ixx zabxd|$_^$XLw^b}dzx_Wb3DSW?t+?|M+2`A(TDfxBja4b1R{B-RKVO3D$pZSb3aVb zVt~0TGUhG=b4RPgUrf#Y8Hn=jX!u$^p_;B^SIbWcZ>0(;r~lrS*GRg;#%!k^`Tj5! zXq;k{VuXW>i(V43?@4R2-_Q;<$=)>UZ$jP%uoCb*kLlQT#g^=)aULpfU8Iq$*qyE{jZxL9Y!;P_v{sNRaFdQbM^cW7vfWCL z5qy^PN+skKC*Ol7c+TnFh^WoQ`PS5e9`Tbq3d{XOTZNBqIEnX%8~dDe^D{)IS>Ie+ z7Lv!CbL*M-@L?X?TX?!RQw>j6b1O8L3iCRBt#T*LiFO4oldX8hB?deBq)oZ_@M`?2 zN6H0Ea<*;B!)9jNgpVlBR;kT(KjsLX*WY|&VodcU+W@J49a_~|LaYkW;GJ!8Bl|vS zg34|@Y+*U7gq*lIM*7$7igiPrvSodB^ zWYmC|0Zniz8@wsH?9vOXNLVFXbxtQaJh%8&TMM_b4o#kO9L9)zQ=U9R$V3E1EEB>m zQty;hDMbsaMrVc+CsuyqK_}CKu^XyyJre_Yb$vsM2QbAKmT&DyN5??q#|@Fivo)!p`+8y zP{Vb5nT4gp586G@(t|@%h6RT+E^IBKYih8;*68huh<>>m)nIjoQglB%dufYbVFQYhRN8+r@PyD?C}o^s9a1&z#x+(t7K9P{ZWLz`!bpa6;qtPhdHf`E z;`y<$G2uoO3iT7LY*H@5_#+Hc!Zhn|r)W1+nQcUV&l7WZOk4_SeW5#o?QInv!$wsl z=y@b$WUMh=@IA(=D?Mg-fTBYEijktEQ>1;O?hNI+y`JcWc)kJh`tdv7pScV9{xbNt zQ5aS06JR7tuq`y_)*pF`-3Xg`7L8yeuWeL&I$?j*#dZ-}no#o%^%ZQbwzjrmP}ta5 zSA^m&RYuT+Y-}LLAJ*GuszGOKdA6_2b>`6=9UU*U=Cq}o>FVk2mL9we({nDi{{f5j z|B&95fueM?ntpyh$oU#xTO_!ci6iK;Y}3-F;}RE0&@CaQa?OI-3!&jH{WgoR!z&Bx z%ulWFRxJs$DeO4$?80!>1Dr;bjwHPL0q&|ez=JSgFu)l6n}GQWUG{MF*x1wNMlmTe zHHLTa;K3hD0`pd5PYlxysJSUlC(Hdv+j4PUYBF(Yq(u`a+QZK;o6F^%YxTIg+U(6! zZouH}eu0NIi?bItP{e+vZ5k#sZio;*NC-JXICGh?_aYQ)Eg~R!yY4=IoTb;@kkyyf z>SdeQW#XhC@iYhyC*SYQk{{d>Z-s1-gb(?hA56^&iklBj!?Mm@X)mn~FBK^Yx*n~_ub&J*?m zQ)H!@-^?nrf>PzxEY#`Pmcq6R-Qs}7& zeS9Aq{E)&3KYma=8tOYKEYho6KXadMo)RBX(Bxm#!|8QTo@OC>#3ly?NTrW4(M(Ff zBJ++Omf?(A`&E{rn|kLQAs-0#y_3>?L~slj5q`1(5Y4_8>KO`itNZ`dRJVK!c2Wtg| z-N(HQCKM--ZEv0Xv{qD`O5wWFT`qpPs-u z9_Ngzld7o~$Q&~dD`4e2Df0N-2-@% zR9mz*DJl7tF1^CPN%+`;}+gX{tW*I%u*1GGlP!UJw%(6n#D>CgxS5GYJ*ew(aNV;zTsLG`!sbBQ30{ z=-Xsj#|Ro%E8_-gPLBPExig}%(n^IrIni9Uo47Vw(9Voy4h;>(lj507W|v%gas0F= z8+{bLd#~EC_-cc>|2`Na$Rys>{FAfgKF?qPvQ<56jEH{6B3Mo*%(tF17uK85VN9U=Maiv z5o%L-iiYdj&SztLeC1gqA|opmZ19VqWl8pbsDzbNmGzapj0$v3r6(a=R|iN*uRRW#C$n!RYeb)p}R!Ll!5!)$K;bHB`0T>oi5S?(esE zm^M{g%#o5!2d&~B|~*W^Ijk35SY@I%8;YM2ydbz4%XuwSEu$vSsYOq>d9tv zBcvB|Q=pF#g^AIaF+bMKlD!L0(x0%oAy2&_uW%5e=(QEh$$`Urcxdv#w>cW0bgwwP{o01Pd<4Cp;_+~l z<&6(0j13opN4W(V->s+CF-q|O+F7;3X4uQ#9LWpXGhD36{CnytPa9wCaJ2|sY_|w& zyxFyzaxakZh<>agqWFs159E-&R=RxkDgDfFwm&oD9f2`CTX4z28XnuSlrGX*c8}N8 zciQizCt-bk_W6)wl{{K3l|0mLgKnr)PQ?W9roP)*vPB|y{TNxzq*SoC(o>cvX{W%G zwC_y4@7Uq=&Hs^XF_X9cG<7YA_Gt4^8%?2VzSO1TTZ@_k0t0jH?d@Oa^7;HmD&HyO z8!S3}C0$t58Gj(yhk>(V@oJ+epUx8<*J(6bSFg$0X@73o%@EHIHoe)kt!7Q4#Z+Q5 z_4+xA;wnVX{V}UyA-1r212p|XXf|!Kw1UToj=gs6TGvR>{EsqG;e1PQKNygpV@98a z3B^FsvWLbYeU7x!QfHZ5L>9G#rGQhLKQo6c?-?kSj6l@Q0Znm^7_OfJKGogbUZMsK z`9MP1+u~%oIbai;%ADT5mN}Lp9RkC^Ys4)m<^ZZK9P6h zM#LHX`|4{0DB?)p2GXRo?bE;i4C(wrgWMRnGF{&?L)b+3X2x8Ai7b2wtpxtX0d{R| zEi-viCKxaT0S0s7ie=q)WoswHhq^egCev)EK8@VTea(HxeQ{=T8Zfu>y?$2JJl7`tv(C$yV&$3$YU7cnV)J#J3Ef=0kgc$)3VPb0DDi^FQqk2pYK0MF60l>m$=Udkfq8 z&eSA1EIBd3Om~LH!#QXp~z@|GP-&Qb3C^0iBgsS|2z>aKzQGUR`M;x5wy& z6++bKfnM(!u5*_Jjq;)+?7y z6efHre6-1<<}!Iv8_ah^SrJk?KDE~933BO3LdrnLC2V}*7+pi!T{h2yOpzn!KkWiY z4JSG#16Mj(8zT)3C5?vGkewQgxob2uHPkh3rC_M>Wcetcn&7g*NJ=)Ir@tIvw=p)p zuTJb{Tp_++pbL>~m7 z*#$}W>J%rM6Cc?hI#g+zmzT$U7O5DEV^MaLC2yZ*0=H9iv$C>w6gKxd84T6}zkb4$ z2^?u|4VP;_BuShm6iTq+gANWoPFtorn2=+fcug6DRYKK?=V{;X(0=}Y?g zG=WE6Rd&CFp;=#3UfR{l0@9%A`t)nx6Ce)U>q1p{fTdJ0esz0IU%I&$`EZeM(1c zlDg_S{T+C~OpXw~+$|it>cGNe#bn!iMi`?E%OEIVc)tzugkCqO#n>L6iNNW{pD5KNmPkF z(TEvZYk`UV2PSbetKAVWj%Ru(o*9N2lZ~WI;ganczriKp)xm_zdgnhf3OHPPjT-TV z8r{EaStqamk|k$vy#W}V@ah}dMR|nWB2=@Nz%*?r(aJ!011s1K-yZwP1+v)QQjf-n z#Ya9G9w=6QGW`{)_7#c00Wh77=NWrT9t-LWga_p3()}8>b$7xM{fQMEy>^nOe9Hfk z9T^{?2^uDzfqh#{kP{Amim8az*`>pWfYAluL8tg(V+rJ}O|XjeEGs)~F-+Ua@dDEK zak|42HT-@|S)6}@sTyGz2P1CVXEb9DDtVz}&o?=IS%Jp$VeG>;WnP1uIUL=eBp&ts z`|yq~E^UFbeXRZU2KeegGm7tWIN8Tzend6^O9+S?I-iRD(v>@&06=?OgIEr)4X zLfc1QYfU)H;+_)>*%LG8UTY4xuiXeN--NE?;!l=!^A+tV%uQ|ViT%?FXZA_)e+(x7 z33mCHb@@}H_xpqw`0BU$6u=$Ro7TV2qmtxPFZKhv-P{|mSl57T;X5%J=W2Cx2AWJY<3dWMc!cNVzpap-+JL-LrNs4aX4) zzM7_FUFlW8b#i*~M7wHPz8?WZod)#p{_hx8LqkKD-K(h%6a*UndzR(2E~vhn*Ocdh zH9(`2ohn!?hx-26YIi7D^Mi5tC!Vp#7>U27=Te&Jl$x4)sGjpHO9{!Mtbj#BXJHN{ zaI$AaE2qvzd@F@7#3~5gtFuAIrH3mRo5CL-{tfvnr>L;Sywe%8xyirjhQs3ZdU|TA zs;V~*PE`Z^<2LtyVNRY1A7d9#B>p!qws^#yf%W`SS9lYsiPb|RN<>`c;*ZM)nJN62A1rc`I^v6T;#LXmLw+qJm;<5`MsTAVF*ez| zu~~0Tqm&RqQ96hfXe2LEh_y8v>;3Ml){wZ(0e5m{&`CMv{4BB}^mJiJ7cTD(SZ9>?hJ!i6P9Z)d%p7?Wt8Ye{SS zRWrPFS(jFi@Mu5M{E~`9`1P4Q8tdmzIv9Q*hj_L+%C^ZM93J(u_fFqj&k|X2&1@Y6 z3Lp-OIQ__%AoM^<7CQ<{<)BWIQ9;RoHFMhNJ!NPeqEi>a<6OEC3F>0SPR||es z$Er>km5K1CTfRx&&)Pd?pOcg09}3S*O3tLvaPiFnKDFXeW#!m*oMG$?+4mxp+iBF- zMSPc@d@CLd7=0*9JFU%2nd)-YQMWt3SND1_!v82{3W->=XxAOlUf%6zb3R@Bi2l_< zp;Co-C|TKC$KN<=y0&0p0)PxI+n9F+43`-fZVuubDMnRVY)on<4s^TaZ?% zFE3eMd6+Wpfy_*gPK(L!{T)&LPv84dn16kQpq}vZ}UN*VMKodyk{Agyeldy?i31^e9Y}o#)`TRC+;Ykq#gg-bNZ~ZOT#pZHmPEf z4T`>?T#UT+=>3z53F-1^C_)z;y6?2Hzn!k#ytdIGo=VDVSO|sOY5_;vfA4Q+{smRt uw`3AZphic;Up!g_ewPH3%Eu&Ie@!}_?0B!ameqokv#?zwB=YRwjsk5iZ)00O zHa5QcgX>U}SD`Z-n}D&&1-+{ThxyEoSZsqt!w@_#SJD&=yUy{2yDM%@{$dV45@ysT zqKuD98-6($_i;QTU61R}&)3v=xbDThh~s3Ybs6kLP;!p@oZy!}j_@AR%%o`!(Vj2R zzuWu2pqICU_|g})bMrBo3ze4sUb`@j-YV1C@wW*^uioC_d632PaSgHED;Gx|w4WGx1G>G%71J6FY6NcWw z8H!VYQczA#Zegh{>*OGDYHYOhOt>6v?~Y$#v3OZi7;S7sOZp6K^ux~H_F}`_oCl_J zf$nC_8kO_1;`7wOg^PijlAD?~y&aN3U?1I1mUEzuIB}N1YEbRV%oej&lSq*3h+KIy zCI^9y>hA2W4{3%)q*^Ixpr_5$=vwghMBfLl^-$0UKE?E^AIJMLKCYb3Fj9FfGCp}A zU5E%9}zLym2Gy+6kc_#+#eAD6Mw1$cmLfJ;uZ zrz2z{0ejvfb!~=F`pk8K78WigQ5iz&mkMb-7IO$a z_avaoo+R_Ez&__!@Td<3b^f+N^}aC@CGPL8SDlbHk3{g@74y7@f6eBzu{6>i&dl(X z0sF8OuXWKww_BkjmC9f3F5WQA)yn@eAFnz%{WwYaC`pa2z#>z2p=N!M`r~@xf+fHC z-H&y3`kPx{Fgk4pUq#u`bNuW_YVUAzr}w1gRu4F2ZA|+O2EX#r60@d)rXKm_>1+%~ zQrF#FU18&-576Ml5ouJa0vf--Y#8U>78Ysyo@ycQZ?zQ|{idjRzhugB{-!osEerL0 zj0_K(W^&ZshgOT|>i|m%9X65(%0o(8)37u2;Mj?Y3F>-0w61iKX3eKuR=?KY;jfiZ z0H@8*J9^|mNCbVXxodOp)rO_y?|!G>xh>vd*=)BYIOzD%Q-XLGtJWgDzv0%oAR4N{ zw4ZfQjBYJkt{V|rU#E4yD5_5qE;ZggJ9{h8EQgCkxH$fY*|q6R+F?5T*RNkSP))Qm zM^b;Kcdkn0e9TD&A5K#^m<0oKD@NUoKcep%RM0b{qpnW)rYKd&Tc|}({g7K`O!N36`7m1*;$@=%Y7Lr(2o9qJDR#sNN zzoHz2jq-nZ(B746l=*1L8143;y3FXy<{YyW6@DcB+XV=iMaj?!rx(aJaK*KITQB-c z-7uTw!=LU?-$h6q!k$St4cpmZwY%TYej4oGmT6{Z>*#o9UpvHhck9RN?}5gxiVUHT z_9prFhJvOtGaX&H!kBL{3GaheTz#fHvzHgO0_JSi#gop0eU9#JPGyY_f1E$s^7!%N z%0=bGMfx^vM>9JwWe{YYQD zdDFtUY3O0I1w{t>L9OYH%VU*FAZMiT78`wkZyPXj9yWRiTNUu?W%GmG=1iIEfxajf zLl79|Ek(u=MTkB5ZQP-4_Dt-CkV@7e_((F4E$~h`ciA(I7xy>D5*IXsBB+EF^ zzE9GpVR+DV{3BJaajoE%h4EXEIr8E?4!^OA0< zZF}ORGbj+*_qPLalexVV1va#&vGa^&_Nu2sZ%*o=r~CgbFV?JBvK7@2 z*5}BTVWd69{^VD$j~aU~;p*0r*a#J58V2~{4u77UboItGdnZ9y#Y=;M`*)O9HXbH8 zXzm7_S`i%#oCmeskDSCQtmHNw&BO+;FU)U(?UyIGo*Q-}9BgfUj-$eJN(J^#{t(6m z&rNAav`4yTZmNd4q-*OCvEDrSJ9BaR1pT6i&J-UrI5k+_yrDJx41L*k!n7OH4{s{5 z7N{Oe&}`jr;)Ud;!l+BkzFuPm#`JixrV$^?U+Z%^eP4&B)zQ;)mDP!c_xw$tzKJP|$MH=}m6`053SNtBHW zQ*nIwY^g#E0+J$UJsl&FL$;y)jCGeBLQ!+Mr&9ay>Vs%A%pHCd2PHZ8fQJ1bH6YUiuwf$75fD5#G0e%TBU!c)QUwCr@DgJjxg)U~5|2)I@ z`;bjd7Qk=@es)S()M=?(lz2pEURxPPHC#a=&C@^MLLb?Y;pb^>c`{MnQK7juNB~0% z3C<;~MJGRlcUJUbG6t+HX;iS39YqQLHLZ)dajD>@r3CzU?4|en@BRR6jh_FlY+(Pb96isn=pn=21Z(rV?mQK8RSqF8 zFYfP@PnD{g|1b%U5gE5?!Q}rw0`stpN=_} z#HCa$$9r|1JLIK&O=t3|i7bO{1s6ErJ|Yp?9t=5^Kptyd8LrMqtP&(9skB7HoFs?# z){MT)J`*%^uzIGmw(|mIex7q`jQ!qTXYw7BvkVfzg%Vfdoi><(eR9?k9_0CwtRDn5 z$a4;qNn#!vteEGto@6@D)U?<78uli)uOs7(i$nc3ZC6q(6@4rhjp_b#6MCFvnQ@76 ze-uPa;<%;np^F49IN93R^mj22e-9YAE#A`i3z6oeSrAlAY$bGHcwm4NV(~O9Ytfi) zF>4UEwkoYPi}r|=FsI369b1)_kLOk*NnP}dM+@H6#ngQ%gpO^sUWE*$dQ{DDN5yEuO5?XFOTOzJtsFt*=WbtQQFGicP0~W0LsZ5*05^BQ9aCT zHa{ZZ{6JiPNbC{R^F+g_{$7uB_?6Rqt9ja@{CMlqHsC9@&g8AX;G=qNDpD##v(eO^ z*exjJR+&i2rq!9%Jck}K;jhxR>7M6TzP~aN2RvMYza%de z@|4(i5`BD1x&@^r58@6Ne!F%MpLFPT+-yaKx?42NQjJfzk}3v-wS`QuF{oJFo54@A zq{M3iw&pKSp08f~2ZC=9fe@39nUD!CE)BO=cVb3g1!^m3Z!edR&SF%_+ynnf2k0U_ zOt(}E^t!<&lgX60viPq`h9pFsoyJew5ym_{+8+;5~Q7xWftcF>_;Sk?T?O{zxWyNZjl_y zGxgA1-75WBr=U2HQB~zDH4xQ|Ns>T2vLkVMoDbEdCxB>ta8H@1=CQ&RG|$wdiRPff zNa{2q2Kq_nI7tla`t^kRc!ci+H>wN03jO4w=)*f+)#P_|WM|nN4tq9!E>U{|ohnu3Wj&@Xxc?83R{^TBSav@+^C;^`;C0 zK#k82CEy)>e>%ee;N2{4jQd)jsA2v>_A2-)^tlNdd{D`#e;)cd6Vn4wL-l6TQ=}#3 z7+(De+j?3h_=T+CC=WbzVdD7EL4ENVmlT1)#Eri$hB*4JGa;!#yY%I=?oGSPcL!1?`knb|vgs(Lwi|>9#qFgNs+gh=P{@Oqit1XP zy#>hpWd4zcT6B~e=$9ONV2sqV!8Wqb5=D#gIS4|auVcPveNt>0ypif18gfulg_2|X z7@9Z==oh)vGoXEDZ=vf6CK7ilY}3zcuG?e&%;Ry>VS< z|K8(!d3bpCU)8;0%)&YqL3mA3D;1Ul{QRKc2 zhu?tj5N};eKOUX~pMJb|)O%$)@$d*+UcGY3^q$>pk}biuC*VntVkhBZoWc>k^Y#<1 zhw85?J$fWq>GK@g*DX@&-Z*CZ?rHcHNry3`)3;7Ab-rhT;TKwdYq_#wauX^Q^1KOWd+2pBL8hxCL1qw(YhXa`_r9zpj2=DBdR z24EiWzWJYg=(|Ozg1Wk3MrLLdrxw4{fu3*c;N~WtsNi$@>dH(XpZ`qnrMlOp!eis( zPQ7JbNCnKa=~S@6rB;HrjN2b+t$xhb$6-gM&t3Pnn7wEPLb?fh4`~w43axIH@ zU4ZClYwNAt*7J2aWL{QWTpVU{@}_clY;9MjVcdZi(I-!wkWdBxMPg)f(sfGB;A$)H z=rm__aqQ=Ani6>Vp+LWKR(|D6zs+?vBfKVH>6`b$@P~1mGEV{6Z@}Mrvj2nv0@N3I zyfLe2KTIkP^$z^)Q@dX3{z&BJw0WcAg$o^wRsTa@28%oELZb*F15XI@U%hvtw1v1v zXJE3W!f6xV3DLEIsbHD*KVBN0f!{duPd4Cc012F{V1D!{V;qt5{967QJ5MQF-rOV} zbB+D*{%Zg;Y2@)yyL)Z)v6+La%k9|e>O|s+21DF>S0RQ)gVUw`Jw5Z6>Fl(15tQYq zdx%Zh+i60qSgXZd>DOPNuGkKaQ=*ZNK!O^AN}9*ypL6cw8WqtD4)4UYipbQhyir;? zS@x9R5;&BfVDe(o7?q(QxLXks+k`L%E#aXG!x|DN3aKIHH_4*-ChL<(w|bxe4HnH$WY z>Bzxdg2zgAJPPXO^WKud$?CXjZkya;Nk_)5_VM^4^zoG6kyvFN&UQT#d40m_Xh8ys zSV{Xr@EM6*akhGgn=Yg|loqWq z)JxrY!<<@H`Yg0?6{Ft3NxoOhM)S!lc6r?~^E%>8l!URnuC-dip0!o893!yFNDeYxNNLj4w~wx+Ug)3wXSQ`*`YG-<2^)}V*{Bjxrf%oQ0<$U(#n@GjIDEt zvFHh_daR7x<6HK1D{-r0){KJ&E_^5vHgpo(`hKnAItg5d7DO$7<)Al66D2muFQBgu z=854;KX{lN%~S67mBI&~xyifNB)-GT-kDYbllKuYKyH)QnltoMZ&5H&Z7`WdtQZotf|JDfu((HPL$Z zM(T$!UcMEvwG%StW=R)Lk+%>rn0*8#N1s*kUH#{)1#IrNg!;IQvXN5=lapC?hmFN7 zoL7#Tb-0ZVM!7+jZ5GMv{h3yvF;XV@qfkjHnCSUgF}9W*@WuU>MS1pqTSWB}j2~6b z5;WlJ68NA;Y}4S#P7|X8rm!)JMcJOi9-}r~**xr~jhXgP6h(3%XOq}q;qNj^TEWbb z1Y^5=1GM$*)k-qJYMfq2{R6}4PjvbHB=L5;rg{6`ej#xD43Z_P{pGr!0iGt4=C;jm z7F&xzwMvSe^H4y@mCUfoT4p4g^J6WuTd#W~gSCyDCyDPXh=kz%SWD(tQ5lXBf=b^_ zsj>dkscP+Zm&_UbQ4cM*8NB3vE0s!<`Yl7;u_{@Mbp-7USw4G7YjrBK3N5jT$#kgt9_dqQ&3W6Ak&j^%OLYx}XkFI`bIp^1s2`n6vC#s&E(2an% zd%2r=LF0_$J7_)hRbx7dNF-2p<;NRCB<*w%69^OkI>#I*^AuPcOPuo#cpAuzR~_%b z)2#$+$%i3d2Y#*FnrNKJjr3covK~?LiZM>zy?~Ds$D3XMNCR@sU!5shW7q2|GH&m{ zZcgez{;895`llZN(xi2%J47eqZ17MkfNNnA59c+7Y9`X5uts@RVa0?G{*U2;x|z_f5V zv->iyCy6r(#2Vr|fCu5!9WeK`!h3O)N`)NANz&FIZf?G2QR(l|84(#7DvPEGiHtNf z=>7>s{=m!U*(bNm4(Pr0<*82LmoFV19n(X3eBdVq1f&?5VvX^aY#681g9Cr;hH`~3 z)JY9|Owy^2O*GG~AyzIHFakYRHw01)TS+XMKVqx#8~S61CO2y7J0=c;2zFh%Qoh;# zV%(;3?z?B5DSe%|-yGA{oLLrlIHEUn!=66zRt;(c!=Hhl4A;eJ@=)c(bN) zt%&70=^3b;+qShHKVHQ-L-$AYI|OlSlCQP0)V^=aAF8|%XUmH5@6yR!_o8pUtT9N~ z?EmJJ*COe5SSgi_g-;{R@raS4`cu|{vg&_-#@gk=ZMFBC^8NCjUysezY;RG`6DAtZ zrto4{=4S7We0)qbH$U?Cw{c$ei7f~j#P0E4T^MOiL8)yncZDG>E&sC%9P@{4j2y%r zlk@1m0?B1XCU3MAIx1Irp;VKad+?1u4{V&%#d$>xa*E3(WjicJAvg5P*`?OXu-rc&TImIPr*`clJ3XXcrbt*1t|3K+r$sfqv zJX~J^ONUxf>W5Z55VSV8&@7F#{Z1O~kE5Uz`OzM%+qkW`>J93`vUJLQfGrW8E32dQ zIFllpzvpaQ8Mlm4KUT2WhT9OGsr10ED8&MY`AOsFtCp^>ws-~eCEpu;y0Db8ty0CN zS%=N%wuMPoA5-J@wLOUpUQT12)`jG{F1k2m+ysUF)}E()J{n#~ug$Us`<=rtk~43D zJZ#6%t{JAFrdE<=*&cB^*@A~*+KPDwZ-17^Pgc+=8fF7XspZ{HDt(Vim)_nywC^Iwj(@M?uCfsm3;-q5d+7VA%JKQFFp{F2N z)&|%Zd7*O(GEhq49twk67}Yo=ZVs$@UeYZB*THL>@Ient3|}r{bF$9iBU=-vwu*7& zTx;IfqWBOM{_<#p=-O2X9>}GHrb|huZveT+@)BxA9M8c>6C{j4Ejq1% z#di!gLy~Len1dzT0^7lHGEAte;iPB9MC<~)0H+%G4UsZc<LCS8r4;$kf~O5dy6 zs^GQ)nP^Vg^Ay}xfS$eWSmu@NnA*1<$Bx*6OzuM`hrSnBgP#GOlXt9lef@!MHhA4T z3t&>BUTVt3y~#L=++V(sI0yaIHYlq{_i36XDABi^vfLn|CO-LjlYMOKITdb&;7tgD zEjvfbusb#ubVG}3b+jqD#;z(9>q9`Y>J#;cnQAK)3j;%2rAuUfl9YAn9lJ<<+l_+g zDd$C`tRwD3Z!%9ma!*m_Gik~)6keF`A&%by3zHm1>t{W2_U%Vtk zfVxU+chF_P(|9);Z`gp1&*9bf+}}?iitDGsj$Y!fU69x(7Np!ur-jzwcz~cvP@p?& zy@~iFieFqemwNDPN}_AsENAtrdf zUJzHcKvODzPSyL$#^I#IZqu)DhA-AoL_VwaI6XnSfA6~`Mkk^ILp`Z~OQ znM4{zZ6}UKX>bR&)HXakJi?`r;zR2zP}lgXg&4qxr=gRAlcs*lVHGFt4&RXBT zj}C&a1Bj&NS?@9UAd#?emhdb4t$8|8Y1(^v>-U6;fOxfK+0pFim zLNnJxYl73k)%)N#bg#qD2P@sUm<~kmgJ)~gD*V1Nz%QrA#c4`qP}d`2sc(fu^;7e5 zPzaXVET#u-8@O&=#`F5eEi4cZZ0q-#LL`;PilS>*?q|P50$e_W|EeccrO(n!wPGWA zZ(n8?x?XmMxPJkjmmUV<{!s+Lb>|bb*FW<%P{Z>5ePa9nm7o6~r2KzyN`RZa`q!tt zSLgT|1E?|PcjdQ2<&Y<~HX`L;blX&VddQD`2FQwmQ_0N^SR*%)Ve%fyle~oPz#(!| zCCtQ@l_O`*c~8c4W7OGCKLorAKNPde@YyM4f619ain9AqHD#G42GFR9iHXDZ)~3V!ASInE z`QJtlE-QD-}Kn?*B zt;+L{n911ur6Kz=buaifBIqCJ4!zeP8=Lbu!5=vKgWU^ncV)DuXhCcoV6Hzx2%7a` z69}Z^1J65tN}7Ecje68)aD`tQ_@_8;^W z_$j_rTZ4uIms%EPirb!KCf^sY`u;^CZ2tI3uBsP>OJa~yo45-?95 zOXluNAWGB0v9pb2n4bjRdF2!$-H#zLrk8}45W0C~ zRFZn@t&*mJi{wCBh)tIWf@8%U<^IyehD#SF(<1%%CLr5b1vP3aTdQLL*c)z`K8N;( zR(A+0$PZC`x?#|KGPo{2kjL7ta)b)VWWE-?1}*t-wu>3wQjU5%Tci#=CA0FHC;Nzl zu5l)ops^hp3KIG2QvtatOJurP1&xXrg_$VQeT)_!zVD=WAmWGCIiJ!kH?}4VxWTfs zxcZu*ba$CF)cb+~`Y76lDuU>@s*ewx&9Tz~mS>;{;Vj+f zY-n(8pemxKCT{CW5wG6xgF0%h9JUWjR3PAE0Tpa|r|0t%*6w^Tsf43aRA7$Qy+sF~ zvxt&-H7C}Qjkg9#F!cemQ1f^IidmDWE9@N_F-0@v?ELi8X~>#Uw)h~nYTO*VRRh$B!_~hids+*FSEr5Y1(znbI(X~6+2?@64 z-TJ9Rl5$;9a6`?}*7Weq*l>sAtb zO*xKs9cIai2RcL;f2IX8^ijMVtn9@2^5P zE;yl_9z`ME0PQZ3g0~-hdpgrMHQqkik%W2|i1zsvns*VhF z-#BLZ#2toj`xVHtL#mQ8P-g}2vf+W44qA(^b#BP}8?w?iBPC&biOobpa%LRHSG-_ssLj^mr6xuoVIxeKSe$kaZ)Y*h zTlkhpI#=mJWMzGgOD)rLp@f#D8=n zyn04(Vm;g**su^bb&8NdaX}WZyfX!j**M>7JIos5Z@v51ixF{q06Eb!IY@lKH_dQs9Vnld2MqX`HPgzOH>QD7J9sErb zfKwNjj5~jMH@>=hZ%SCh<{x#5A3uJ4US6IaaQYSTtYI>5R8*7$vo$HnP+jc)Om9&k zAgUDxaXFm@nL;qx>wxsS$z2JhU{_-2=!gI88>nJAGo#?plddH{+xQx<|C=}Y1%x*Q lIp2HcuOKzw|6uZ~TGy}SU$%evzw!US@&Bv6{eQk({R@@tug?Gg literal 0 HcmV?d00001 diff --git a/pics/ed7b96ac-6428-4bd5-9986-674c54c2a959.png b/pics/ed7b96ac-6428-4bd5-9986-674c54c2a959.png new file mode 100644 index 0000000000000000000000000000000000000000..78b3cacebe828e2a87a01f01200cbaeb59a4397f GIT binary patch literal 9216 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 literal 0 HcmV?d00001