From eac1a9a524c63db3c79f99a81d2a657302cbf8b5 Mon Sep 17 00:00:00 2001 From: tuanvu Date: Fri, 19 Dec 2025 21:34:35 +0100 Subject: [PATCH] q3 fini --- .../src/main/java/fr/istic/vv/BinaryHeap.java | 75 ++++++++++++++++-- .../test/java/fr/istic/vv/BinaryHeapTest.java | 27 +++++++ .../classes/fr/istic/vv/BinaryHeap.class | Bin 1056 -> 2562 bytes .../fr/istic/vv/BinaryHeapTest.class | Bin 639 -> 2112 bytes 4 files changed, 97 insertions(+), 5 deletions(-) diff --git a/code/heap/src/main/java/fr/istic/vv/BinaryHeap.java b/code/heap/src/main/java/fr/istic/vv/BinaryHeap.java index ce38e05..95cb47e 100644 --- a/code/heap/src/main/java/fr/istic/vv/BinaryHeap.java +++ b/code/heap/src/main/java/fr/istic/vv/BinaryHeap.java @@ -1,17 +1,82 @@ package fr.istic.vv; +import java.util.ArrayList; import java.util.Comparator; +import java.util.NoSuchElementException; public class BinaryHeap { + private Comparator comparator; + private ArrayList elements = new ArrayList<>(); - public BinaryHeap(Comparator comparator) { } + public BinaryHeap(Comparator comparator) { + this.comparator = comparator; + this.elements = new ArrayList<>(); + } - public T pop() { return null; } + public T pop() { + if (elements.isEmpty()) { + throw new NoSuchElementException(); + } else { + T first = elements.get(0); + T last = elements.remove(elements.size() - 1); + if ((!elements.isEmpty())) { + //swap to first to reshift down + elements.set(0,last); + shiftDown(0); + } + return first; + } + } - public T peek() { return null; } + protected void shiftDown(int index){ + int size=this.count(); + int temp=index; + while(true) { + int left = 2*index + 1; + int right = left + 1; + if ((left < size) && comparator.compare(elements.get(left), elements.get(temp)) < 0) { + temp = left; + } + if ((right < size) && comparator.compare(elements.get(right), elements.get(temp)) < 0) { + temp = right; + } + if (temp == index) { + break; + } + //Il faut swap + swapItems(temp, index); + index= temp; + } + } - public void push(T element) { } + public T peek() { + if (elements.isEmpty()) { + throw new NoSuchElementException(); + } else { + return elements.get(0); + } + } - public int count() { return 0; } + public void push(T element) { + elements.add(element); + int size = elements.size() - 1; + while (size > 0) { + int parentIndex = (size - 1) / 2; + if (comparator.compare(elements.get(size), elements.get(parentIndex)) < 0) { + swapItems(size, parentIndex); + } + size = parentIndex; + } + } + + public int count() { + return elements.size(); + } + + public void swapItems(int index1, int index2) { + T temp = elements.get(index1); + elements.set(index1, elements.get(index2)); + elements.set(index2, temp); + } } \ No newline at end of file diff --git a/code/heap/src/test/java/fr/istic/vv/BinaryHeapTest.java b/code/heap/src/test/java/fr/istic/vv/BinaryHeapTest.java index 67ed489..6a86943 100644 --- a/code/heap/src/test/java/fr/istic/vv/BinaryHeapTest.java +++ b/code/heap/src/test/java/fr/istic/vv/BinaryHeapTest.java @@ -1,10 +1,37 @@ package fr.istic.vv; + import net.jqwik.api.*; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; + public class BinaryHeapTest { + /* @Property boolean absoluteValueOfAllNumbersIsPositive(@ForAll int anInteger) { return Math.abs(anInteger) >= 0; } + */ + + @Property + void popToujoursMinimum(@ForAll List valeur) { + Comparator comp = Comparator.naturalOrder(); + BinaryHeap bh = new BinaryHeap(comp); + List triee = new ArrayList<>(); + + //PUSH + for (Integer val : valeur) { + bh.push(val); + } + while(bh.count()!=0){ + int valeur_pop=bh.pop(); + triee.add(valeur_pop); + } + + for(int i=1; i$;qZRH&Yj#qE*?tYFlN6ZaZ%m?4ny$h|F~eHYtI2 znFwP*A(Sl@%2vg4OBIIP=6sJy=G4Xxl-s`bgk_Dd8=G6 zDG*P1dOdHi(Me?(tm3TaC_GL#}w4-%7oRHDw+3MxJ1pd0@5`e-x z-s(Kpyjq&;3p`*f4;QJwM32v*Q36JiPoa{}VBCC)o+k(;$DUy4w)Kzn(J;g35O;&w zbo4N;i9z(?0CUWGHZK+~;|f=dTE}wr6qQjj-o)tcD{ul5|au{lHMV2mTk*yLKtvz@4u@FMPAMy*vvv_; zeE*D78Xh4S(bJK@D_((4UV(Hh`YnQw(VvV(Yd9O5di?TBX{^u91e+)|1vpFw4smsu z42|-ecLWo>lJ6jayBLE_WxSxyaQFrCB~N zd-#(C5M!r4_BbSzCfBpsU)rtRY$n?sj_Cb5je;}S?O#Q>K{ta@6 zMt(T?l!|Bg7QVadg?>-jzZZg@KI4J%DeP_|RWy=T$p?~8iTFjG!%>OIv5YQwf;@yU z?-YxCTqNPhPZ#!xpC?BP*vHd(m{rIW3LoIqHm;yieBw=<=sxu(t_Q=MxP|(}4Y8HJ TzX0=X*J*2<)Vr{#@50J|^3UOE literal 1056 zcmb7CO;6iE6r8p5(S*>@6eul)eoIad^|2C(awt*-Qq-y<<-T#Zu+*_F$Bx8*;y_Q8 zdgu?}ML)E^)%6*JDa&5bRgr?Jtd<$ zDgrAfawc7021oAa@rm*hfm&Y&IvEH&c7_H`6YaaZ;Uto=Ov1R=Jrrmh=%YX;X{-dc z%X$6Ls5da=%5L~gHDP0^g(_MCw!<3jp$^oibTU@)NRE9{>I_3q`iC;se4iI9$+4aa zYz)iC=m|8v+#F3?ZkmA`;-}GdgROrkX9EaqmMUJOb`(Yet4=p#6`~|(Ri{fS2vj1a ze(;e_j|JA|ffczNNX;QK|J0SQCMuw1bjnn1qgnOBlqnSEK4owarm?3!YR<8}*z!AG zp@7pL?cA0c+%Dk-NRnO;XjL=-YOqkJn}vI5(D{|B7Nc)}q4|@3Y%J5aMr9E3K7H3S z0@_%i8w))^hwz6tu+=)FN1D3-N+g14U9=ER~ypsjc>MNH(w`IVYT)p!n=R z@Tr|Xb#$=4sWY_5O!e7c;e)@TCg1gol)){9%D$Pj9LgH8^1+Vxbn6KuZZ;^i?)K>gMvc zXZx-vU^%v5^z7`kmytZS_4H001spU{FA!by;;P`QbbNh1epNZPw{b(-`3UOJpuK7o zi1i$;-V}j-)XhN_SQM_iN%|Z;P1nMg|4H2kOzAU>OJ>=tfSw2{c zcAPQMVc{%Z7ig+j*oO$1%XVQ(eocF1=#JLtwD1PH1PrGnZrQh8#VccfQ=qYAuOuFK ze7Ph&9d?g}URu6v$KR&OF0!4#%V%vktT=kjC)JeuX>j6Wj_%9EJ`-8r9i z%nM`G%}8oYC`V2ea|_a&*AB8CCfu~0P1&B(=d#f7mlc)TCytMIkgCkhyjxsxi(X-p z9hNKR$U=3Y>lz*GO)+j}h!=~rNZCD(S0@4OHBo{|hbdN}lr{C@b|RhIReLr3^MOhXr|a1{@ZL-!ry(Q)`X z<}STDY3IvHIWeb}N>hoh_q@vT(MB}&u~{~j%E^=}C}ue6I4)~K7pW%6k$!w-?JKn! zxAQ7K zo2FkEFwU{b0-WWdp-s0LcR?^q2=hD3Q=F^d8oKZd;%9CGnB!Mp0};&gYwZE>8B#m} zx9~X(tt@`xYEts_In2o&)ZM=H3@4{{&~*D5S`x;^ZL|s`Lb1>`P76Flo8Fxh_ygUE za9=FEh4Y)cfA?+S;zOL}66eJh-nkr#8Lgq`cyAjY25@V0_b=mesFlKPTw#S~o*?lH zMjoMG!?rON&<3fekH&*4!S|@$!A&|d@%y(SvAO#~2WXT6OrW0o7M@x;5u^N#aR{D5 z0;h3>Gx{3NUM&X>xqGv?DDC zls&~g+$W6&exNm*B-i0F7Kje=Q$(Iec$aR5 zO(ac3P1KmED{b0=m+0vH2LUnsl8&tq9Kb5FTy=JHTpj+II{z*=HOQAPbX5#crhgin fl3SR31k>1r5&RV+|F013L8Apq|`ju8IH delta 396 zcmYLEyH3ME5S;S^$B7dX9tk8sB#?Ltxj~}k(ZoU_NFWNjOSlAsv5|eYM8!8CmwW(C z8Y&P4qUNK3b%I2(J2SVlb9bNRA8q^V`~3sJE}8}uhI&7=-AKAUJ4x&V*XQAVOYplh z5lI8uV{N&@pdAL6A`ca&1sxOVj@sE;;oT_kVkyqK7mH4R-}8>++pY*BCprltSGtLy z&2?wvB3;wtqdaC&Gf-tHUGs$79`^@!o69Q;bC_pPDR1m|7)