From 6b33e451ddf1fdf5a6e908fa0030b74d446e074a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Fran=C3=A7ois=20Pitois?= <francois.pitois@univ-lyon1.fr>
Date: Wed, 12 Jun 2024 09:40:52 +0200
Subject: [PATCH] SORTING speed-up

---
 run.sh                                        |   3 +-
 src/part2/GraphCompress/.idea/misc.xml        |   1 -
 src/part2/GraphCompress/.idea/vcs.xml         |   1 -
 .../GraphCompress/CompressMath.class          | Bin 1623 -> 1876 bytes
 .../out/production/GraphCompress/Greedy.class | Bin 0 -> 3657 bytes
 .../out/production/GraphCompress/Main.class   | Bin 3006 -> 5289 bytes
 .../out/production/GraphCompress/Pic.class    | Bin 0 -> 635 bytes
 .../production/GraphCompress/Score$1.class    | Bin 0 -> 764 bytes
 .../out/production/GraphCompress/Score.class  | Bin 0 -> 1336 bytes
 src/part2/GraphCompress/src/CompressMath.java |   7 ++
 src/part2/GraphCompress/src/Greedy.java       |  88 ++++++++++++++
 src/part2/GraphCompress/src/Main.java         | 112 ++++++++++++++++--
 src/part2/GraphCompress/src/Pic.java          |  21 ++++
 src/part2/GraphCompress/src/Score.java        |  27 +++++
 14 files changed, 250 insertions(+), 10 deletions(-)
 create mode 100644 src/part2/GraphCompress/out/production/GraphCompress/Greedy.class
 create mode 100644 src/part2/GraphCompress/out/production/GraphCompress/Pic.class
 create mode 100644 src/part2/GraphCompress/out/production/GraphCompress/Score$1.class
 create mode 100644 src/part2/GraphCompress/out/production/GraphCompress/Score.class
 create mode 100644 src/part2/GraphCompress/src/Greedy.java
 create mode 100644 src/part2/GraphCompress/src/Pic.java
 create mode 100644 src/part2/GraphCompress/src/Score.java

diff --git a/run.sh b/run.sh
index 35ab6c2..41cff02 100755
--- a/run.sh
+++ b/run.sh
@@ -1,7 +1,8 @@
 #!/bin/bash
 
+date "+%T"
 cp $1 build/graph.graph
 python3 src/part1/unified.py
 java -classpath src/part2/GraphCompress/out/production/GraphCompress Main
 python3 src/part3/encode.py
-# python3 src/part4/draw.py
+date "+%T"
diff --git a/src/part2/GraphCompress/.idea/misc.xml b/src/part2/GraphCompress/.idea/misc.xml
index e0844bc..0a44d59 100644
--- a/src/part2/GraphCompress/.idea/misc.xml
+++ b/src/part2/GraphCompress/.idea/misc.xml
@@ -1,4 +1,3 @@
-<?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
   <component name="ProjectRootManager" version="2" languageLevel="JDK_11" default="true" project-jdk-name="11" project-jdk-type="JavaSDK">
     <output url="file://$PROJECT_DIR$/out" />
diff --git a/src/part2/GraphCompress/.idea/vcs.xml b/src/part2/GraphCompress/.idea/vcs.xml
index f1f0a09..710fa8b 100644
--- a/src/part2/GraphCompress/.idea/vcs.xml
+++ b/src/part2/GraphCompress/.idea/vcs.xml
@@ -3,6 +3,5 @@
   <component name="VcsDirectoryMappings">
     <mapping directory="$PROJECT_DIR$/../../../../.." vcs="Git" />
     <mapping directory="$PROJECT_DIR$/../../../../../" vcs="Git" />
-    <mapping directory="$PROJECT_DIR$/../../.." vcs="Git" />
   </component>
 </project>
\ No newline at end of file
diff --git a/src/part2/GraphCompress/out/production/GraphCompress/CompressMath.class b/src/part2/GraphCompress/out/production/GraphCompress/CompressMath.class
index 3d105f92d4750af7187f08f6bac09f5d28e90515..ab261a4e89d6cb07bf916b86bf9fa4bddde8312b 100644
GIT binary patch
delta 972
zcmYjP%T7~K6kVt1KHAH*p!7vsutlH`E6^gyqx7K`0Rho6F*;Bi6B|RKQl>I-=D@`J
z2Tq(gAtuH+z=<QrM!!Mh2QU)Xxwj&xx%;ehy7pds@3Vi{--1hD|9m<Ca0y!$PN8n$
zGOj3dH2@n8g_evO32Irqx~9ysGAkBVaoxn4iS_;ZmT2_df7b3i+J4w+x0<^Tn!DQq
zf$W{N&30=cw;~{)v|9qYdloQxT5Iog1PqTNAa+bFIF1-E_TjXN4I4KQv$2U`8$tBi
zxT#QDnXHFKOx&_jMAP{tmhzOK7Hu}SLYmEb0D-u2CJGQUFzp#<!xzc)^UmN2&=I1w
zyEu%9%Z?)Ea$ovZMZfdiH`P$A3Vq@j;4e-;8|RTA@=+s)B#}fEDGU;6WY1xUNUb@X
zB@#$E8!~CK2sidqSvZkL>_i?3oa<(t#)!-PB1=`3vqd#f%b<$NC`C=M-qEg78e_=N
z!(e7AhGgaJmm6bR8=X}#f?Xej_kPCzUw?=ht8S(ENeDlkbKOR~)^4*AzqQO`MZe2`
zfaT)?myvf1lxVOiy-d<X9R(td53zs?L<S>Gx=H!T9>O?1EWTe96GT0zGUg<a&Ao_{
zoAPtLM%B-HV((x3LG~0`YE9sxTdbtgG!-Nt*o&)E%ZqEUAzoaQ`wVBDBS7C*%+cUJ
zCd>Kt!a+sOXkl&e4WfmxR+`rn1NsN_+$+D(#M`5viFbRXN~rEd`0~Ia-7CaZ3Rc*|
z`tfT-*wb0QxMGcAp2dUQ5tNxUCxE9gd`GNYH?b(xCxAnal%Ijz0VQRaE^1jJ7#|_u
UBdP84DBKLZxmC8xJ0EI)0lyMo`Tzg`

delta 718
zcmYk4O>PrG5QX1N&yPKH3<)L)vE!foU;>7O1d^D5;{Y)cV#x-H8*m0rG2$ALA~uKx
z2VjSU#14ryI}U*Os%=PGn)2)Nt5?;p`&;e1Kl<|L(`QM0dS1wDztBJrEgV#JNskOY
z&PEVy6{Ln14lRsw9p!p*HhvYAKcoJ}WnIbj)a#iRypGlNno-SbY^Y<QH$kiAFdnzm
zMZzN*X~~G73K$XMY<U{b_vXlD?4(pziGGUfy2h@mc`XF)ulPkYSMIu<V`B}eS<-ba
z@}<<=4!f8R8)}eqRCUw@C9nrt2H6^@1&Y)zPhB%-;Gq50^)Jk^cwvr)R>IU()K&v`
zE!jS_nG40lCUYzYeuthyZ*AJCt99L=B4ZxYaGV8ig2ww~ecv=JYc&~+3YF*QucK;i
zwfUT)3dJ|4M*L1*W5mm}_txld_(wYVf4~zAumd_S=N1yNxIpZwVZ@9M)CXnQwiSk|
zz-j3Y6@~7he;35Xqqzz4{BDuAtNM|S=-SR2@BY~@INPvnZE7bR)}eo&4o<UE-IQJv
n-3-P=H|MYqCQpFcm0%=>)|Gvf`=I2EY^3vtVb5ciT&%snHa$0f

diff --git a/src/part2/GraphCompress/out/production/GraphCompress/Greedy.class b/src/part2/GraphCompress/out/production/GraphCompress/Greedy.class
new file mode 100644
index 0000000000000000000000000000000000000000..c0e12c0997227f03aabeef71c85015f9fb04c587
GIT binary patch
literal 3657
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

literal 0
HcmV?d00001

diff --git a/src/part2/GraphCompress/out/production/GraphCompress/Main.class b/src/part2/GraphCompress/out/production/GraphCompress/Main.class
index 562dcf712292d0ff6b837971221fe8d9730c9bd0..e8c4dd8035ad746e684dd8f8cc1dd5a8078f56a3 100644
GIT binary patch
literal 5289
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

literal 3006
zcmaJ@+jA3T6#s3TWRuOdrI&yer~wPKrL>3=wZ$S73zd|j#UdBQZL+jWlij$xDHIjF
zR7Ft~M7fC<bo9j+cqpC9IKDXJs82rm;`rc<Z;t*2*59|=l60D(mv6uC>^Z-4&hMP_
zB|rT){T+Y@@uh+W^n|g!hR2;Xki=4koeDN%mx5aKD~MpXj3>miM~I({U;ul<cuK(_
z_ST>r`xNZQ0ikeEEYHYzRwy14%X4DUgm|b10i?xIS8y1^3PxZkSdJqyMrC9qgf<zb
z;dV(VZ)zTt5a_njx`e8vVd}f`*&*HDqYY&!sYzNXEi<UuhB(g(1MZ075F^>A8D=Lp
z!?v!c$GLG_JD+kTM3V#FE^q66zbKWrZQXRY8P4cHPD>G2>ZQ}1=8gy#N3=1mJ)@b!
z?X)t?VVYD7+gfg<$H?fWmZg5Bk6aL_In8zp$DpS#K~8QLhD1<&i=^Q&o|x|=?;4r*
zEw-(V3o(@>ga0PshjhpFL-q}-grM8X=4{<@42voi1r=sRvm+7~&u3>mH^<P*QvNm-
zk<vxyEv1zTZ1kG0KCIiFLb+nV)l#E<TF$G1jI0a>709vzjHBtmLK3~YYW6TIRa@dU
z85*$ic1jl{N{EPBwh7-V?m?Wj9LgJ+bUUlJ)v{cYspa}~cf?9NRUuem<WxKlI}9fb
zS4AFUDvsiqig6sLLobQ>bgOs)$7Q^z;w79Q{%#g9zCp%G6))qJFkTgaugRED@jBj6
z@g`2GcnfbcHor2YUBzj{RlI|DRh$vK_i!qV_l4zI73c7QjPoi!#78nNsJMtrDpreR
z0wO!6QsB0K=!h;lwMaxSY(5D=uZ0v`#uW*w<aJitY=14uYNL9$Wu`QDui=hx=eU~b
zlH=7)B}%YR#MzKYCa0v$Jx2ePl4xYZWsmuS@L}7^`ZZZv5^}D=)eL*M=eBZlN#zoC
zU^4|A<2Y;1+2<HW(uJ`sW@FrO^(>XFd|`kLt9>^~5~HGPSt9v`o-gJU=7ds)jK@kv
z#S5pkD=zpWcHC!!#chpq=8UZ7>TwZY+;HMje8>>w#+rJYOL19UDCq34(D|5_$?N@x
z#aPU<nj0qx;gn^%><ACJ2-k0l&gT70dsr7~&qtVjPk_9cwt9JkvO%<Tnsl(B-nCHK
zR5ayc1QnsWB_#?>R4PkY-xVLwGi*P$TOs|pbO!>M%Di0Y(Z48F#wjMr>mXheP0h*M
zN7g5D`yip(wR$X@{JOe`*z5H=>K8b?jT#aS*xS!pIBFX%TV+j&IxaM99+dI17{<>e
zG!|eDbIcmmXD@euczU#yYuV#6uJI;FTGnVjM=E<wQ@6V_n&ap!&BbD$vl#vrv_mt~
z8Qp304LcVGQY4vYxQADC3H9RZajpjzLUe1H%mCTwl<|dxRSWVf6`O>HJL_QuKb9N#
zjR5>~m&Db}bp=oDd`f%<TW&(S&P^Fsat(Px8TWFp`U+^oDxM<Zs-uL)Wj_+ElCpnm
z%67I)^ME8D0ichMAh2ug6ha+=)+xvx!TR7N!U_3XME2c;(h*st)CVRJ9Z4uRpw?7O
zqLNQfG>s~N=ki2FSt44V2*pA%`5JobBeBpF7EPl1G7|N{SZES8-=nr8EUfD41NGra
z#5{zA8dGD+HAG`-LWzYEQ6XJC5t6>1nT$oRU?ZWT9@LV(v<t?fJ{0X4M9fo<PU9{w
zjEM@GjSGbON!-0|3QGk~0gtB>q!Lh=dX%e*YE;mwl2libuWGF27p@0Thb}BZ58n);
z9{aEq2eFLbn3lt#=1F2qkkixT^c+zyk@c&z{+vvIMZIs(jO%E@Eu#I5R{V~2_!IZz
zA8hpMbB6v-Vhw+r5GFz$^;;NAIsT?as~6v2v}tA4s__TfxGQ5Uzp?nO)M~)5SdaUd
zQ6qlA1|kP>2xl303;SR#exRQg$UNUdf^Q?t<_5oMwlL#^IFE<8i!!SVc$m8ibkO5s
zdhpRYiRN2wqU9recMhQ$s#nVBD*D?j^EIzkMA(k}o1t9^70Flensx?TN~_4I6*&A6
zIDyhio+}S0n4s%N3FeQ)2F6H31g5a8FcAtf0&^{AmW8PZU@N*QFUK~nWq1sq@~P1N
dD(m+NtG$EgICJTx>~U{RdTXDzKJBfk{{f~k*{=Wq

diff --git a/src/part2/GraphCompress/out/production/GraphCompress/Pic.class b/src/part2/GraphCompress/out/production/GraphCompress/Pic.class
new file mode 100644
index 0000000000000000000000000000000000000000..de829a4e4f34178eb380aa564201fd23ea21f35a
GIT binary patch
literal 635
zcmZut%SyvQ6g`u)O^m70s`dR=XtS`(E)+L{P^k}41eZx1+L1PuHWh!szi}h@!i68;
zM~P?BA|eKIX6D>`&bc$6U+*6Ps@QU1V{QZ%<~1xhghdTY4wkWEVb#K#KsF9fVksbM
z0#+QJsyo>d$nC0FC3`HFYPIr(KxV&l#V)U|VtL$ehq8Mfge@|KdM6567eQC)^N`FW
zP1U2geyXA!0lOiS<3WsBDl^DQiD6cr+N9Z*iHgqpA&Y07em9Z_O559X*uD;K0~apV
zU5vnSF{)t_Q!b`4Wnsfb5t{-gdj-aIccm4?jmk-QEu(~mlD>kw-)Y};Wv_P>B+c|@
zhvgd9_#!qR%s@e#b63#*Tr;2sdEyvPm+UaPdj2bfzwivhUwnr7NXmdmEKmSsi8&fs
z6xkRjvpSGrf*tzv(ioBMbdbRS-enk5;i_v{{|UweHv{urN{*(6?x104DD)eU(KG%Q
nn}5aLzvAMLxXL+oa^8PIhJW_{4Y|K2lfO*zKNHNPbIyJPLugVQ

literal 0
HcmV?d00001

diff --git a/src/part2/GraphCompress/out/production/GraphCompress/Score$1.class b/src/part2/GraphCompress/out/production/GraphCompress/Score$1.class
new file mode 100644
index 0000000000000000000000000000000000000000..5c23d4495cf0da714317d95140f8c4a38ac6734a
GIT binary patch
literal 764
zcmZ`$O>fgc6r7FixG_$XwB`FN&;sd)h<fTFRRxMbL`uscsP~P#N}Rgh%HHsU5K=E(
zkPt{55NCcAV%9MdYK5iU_uhEk%-h{xzrX(gu!pAss<>Z+g9kny2Jq1K@yN$xAL|0u
z{Wy)yfq>K5JQi^K`a}sdhH<Kn=4WG-y_4gF$jVShGC7u6Z0izq%{0yh!a<s<te?m{
zS1fD8QKU1qvD*{yBYk!*GYYgi3%FN?%>g}=Dfxbhu+D5<9~l{)9?J95<ymJqlka6W
zk?ExSc05y&>0L#vUTqXlQfcPaZ}%!?fy_;ubo<3v(&%izbU)y<!AQ@uNWG5jiG$)4
z&#g5t<W(9aI*-%Ip)yl_BCvF%a`Q&#Cd3kIAvW+tz$<z}G|}R@%4-m4UY=iIt$;4g
zLV?^~oq!mi&6lczGJHjci!Q7JW?e?X=xu$2_{^k&Yuqgvq=($Y1p#$5SaAZhxZCC#
z*;cN-{RNdBu8;8D3#|SvKfteCz;!;6<NTu=6uRw2Z>dWatYDSOHd|v>!FA?UIF02O
zqWO}(H~823?y=MQ*0;8Q!r9^a3fG$aZ}@s?;^Ah&x`o?Cyo0-pZXtHBKpZSH1~l>*
G`TYS}A&rIr

literal 0
HcmV?d00001

diff --git a/src/part2/GraphCompress/out/production/GraphCompress/Score.class b/src/part2/GraphCompress/out/production/GraphCompress/Score.class
new file mode 100644
index 0000000000000000000000000000000000000000..4117690c26f2bebfbb7af22221150981ad2e07bc
GIT binary patch
literal 1336
zcmaJ=?M@Rx6g^YQZYkwMK1EPbK-&sb{6vdrY(i{O@J9*8_-iN=SXg$+?v%)z_z?ck
zC?Ubb2k@bcXLdJX#l|K(bN9}<=bm$?`|J1lPXJHxDvvzw_Mitvvy{wI9^%oWjY=L?
ze0JZ)l8pxfg}UddpytXjRG~n(<L#)A0;0}1Z25r_utFWQTUwyE(Tt*YpsIw_1jZWs
z@>o{d+Hos2|L{l#Qu_f9dz#L!CpD1*(;Y!83yr4XudWhqtvH^eR|N)(^?IsHX-gnm
z^LNNH&~QAp(LUT(!KU1HnHg&ME$ME_z%lPhGOPC-`mhsnD%n*!mMzd%ETzZ=ay+ZY
zhP#R-TFz;oSjXEH7$G(?=Spw45@)G2x6*PGtt_FueA90SEw$ztN%_dqqN(G!HdLtB
zl~EiPFp8N13g|1K-z)<dq}$iNuR|TkqjjbC{GD*X!owUM74R5OXd+^pT`J%ThIk**
zE2}PKz1`kdEuH7JFLQ`RF+VLz0^^7BK-GM&CG|T;?=cFs^fbpZ#_@KrW#gG?xgs!o
z!R>g*{((xI$82k|#p^w>!JD!gzJJg@68Kb1%_%90?YxoRj;q4i7+Fohl5wUoe-&<?
z9H|cQ4=H@?yqY$XP}HRBHXW_1HeL$M{bQ(;Hh~-e$Ke(~qddQ&EHdU68D-2xMmz74
z`-HhA2n<KL5p**i#TeIdW?bU4+(*i15ar2JWXe;g=qfLqBKtL}xXN{mRUmJc|BoKB
z_LFm%tP{+Z<9b}fB;Uvs=@3z5lw_jFXz60lDO^uFSGXHgclkTAUl?RyT3JzYB%&_F
zfP|XEz)fb1>~wMF^QGd^j>XfQRb0HxR;F`5J7@TGof~_XB}}AP`V$E`+{R48G7~ui
zdVj!re+K&-a%Ny6<-+D@W+QQPxWhfmQwzO}hFENIH^1k2fhwEbW1J&mp3lM`O4Si$

literal 0
HcmV?d00001

diff --git a/src/part2/GraphCompress/src/CompressMath.java b/src/part2/GraphCompress/src/CompressMath.java
index 8ebd7a8..01e29fd 100644
--- a/src/part2/GraphCompress/src/CompressMath.java
+++ b/src/part2/GraphCompress/src/CompressMath.java
@@ -57,4 +57,11 @@ public class CompressMath {
         return term1 + term2 + term3;
     }
 
+    public static int arithmeticSubSum(Pic[] picList){
+        int s = 0;
+        for (Pic pic : picList){
+            s += pic.arithmeticSub();
+        }
+        return  s;
+    }
 }
diff --git a/src/part2/GraphCompress/src/Greedy.java b/src/part2/GraphCompress/src/Greedy.java
new file mode 100644
index 0000000..15d3e68
--- /dev/null
+++ b/src/part2/GraphCompress/src/Greedy.java
@@ -0,0 +1,88 @@
+import java.util.ArrayList;
+
+public class Greedy {
+    String path;
+    Graph graph;
+    ArrayList<Structure> structList;
+    ArrayList<Integer> bestStructList;
+    ArrayList<Score> score; // size of score should always be (size of structList - size of bestStructList)
+
+    public Greedy(String path){
+        this.path = path;
+        String graphFilename = path + "graph.graph";
+        String structFilename = path + "struct.txt";
+        this.graph = Graph.fromFile(graphFilename);
+        this.structList = Structure.listFromFile(structFilename);
+        this.bestStructList= new ArrayList<Integer>();
+        this.score = new ArrayList<Score>();
+    }
+
+    public void updateScore(){
+        int i;
+        int n = structList.size();
+        Structure struct;
+        int currentDiskSpace;
+
+        this.score.clear();
+
+        for (i = 0; i < n; i++) {
+            if (!bestStructList.contains(i)) {
+                struct = structList.get(i);
+                graph.undoInit();
+                graph.addStructure(struct);
+                currentDiskSpace = graph.diskSpace();
+                this.score.add(new Score(i, currentDiskSpace, struct));
+                graph.undoAction();
+            }
+        }
+
+        this.score.sort(Score.C);
+    }
+
+    public void addBestStructure(){
+        int i = 0;
+        int j = this.bestStructList.size();
+        int n = this.score.size();
+        Structure struct;
+        int structIndex;
+        int currentDiskSpace;
+        int bestCompression = graph.diskSpace();
+        while (i < n) {
+            struct = score.get(i).getStruct();
+            structIndex = score.get(i).getIndex();
+            graph.undoInit();
+            graph.addStructure(struct);
+            currentDiskSpace = graph.diskSpace();
+            if (currentDiskSpace < bestCompression) {
+                bestCompression = currentDiskSpace;
+                bestStructList.add(structIndex);
+                graph.addStructure(struct);
+                System.out.println("> Selecting structure " + structIndex + " as n°" + j + ", estimate size is " + graph.diskSpace() + " bits");
+                j++;
+                i++;
+            } else {
+                graph.undoAction();
+                i = n; // break
+            }
+        }
+    }
+
+    public void run(){
+        String partFilename = this.path + "partition.txt";
+
+        System.out.println("Part 2");
+        System.out.println("> Without structure, estimate size is " + graph.diskSpace() + " bits");
+
+        int prev_size = -1;
+        int new_size = 0;
+        while(prev_size < new_size){
+            prev_size = bestStructList.size();
+            System.out.println("> Updating scores...");
+            this.updateScore();
+            this.addBestStructure();
+            new_size = bestStructList.size();
+        }
+
+        FileIO.write(graph.getPartition().toFormattedString(), partFilename);
+    }
+}
diff --git a/src/part2/GraphCompress/src/Main.java b/src/part2/GraphCompress/src/Main.java
index 5fff43d..cc46eb1 100644
--- a/src/part2/GraphCompress/src/Main.java
+++ b/src/part2/GraphCompress/src/Main.java
@@ -1,20 +1,103 @@
-import java.io.File;
-import java.sql.SQLOutput;
 import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Iterator;
 
 public class Main {
+    public static void test1() {
+        int n = 10;
+        String edgeString = "0,1;0,2;0,3;1,2;1,3;2,3;2,4;2,5;3,5;4,6";
+        Graph graph = new Graph(Edge.parseString(edgeString), n);
+        Structure s1 = new Structure("fc 0 1 2 3");
+        Structure s2 = new Structure("fc 2 3 4 5");
+        graph.addStructure(s1);
+        System.out.println(graph.toString());
+        Graph copyGraph = graph.clone();
+        copyGraph.undoInit();
+        copyGraph.addStructure(s2);
+        System.out.println(graph.toString());
+        System.out.println(copyGraph.toString());
+        copyGraph.undoAction();
+        System.out.println(graph.toString());
+        System.out.println(copyGraph.toString());
+    }
+
+    public static void test2(){
+        String graphName;
+        graphName = "as-oregon";
+        graphName = "choc";
+        String path;
+        path = "/home/pitois/Documents/these/thesis/prog/compress/";
+        path = "C:/Users/Pit/Documents/Boulot/Thèse/travail/thesis/prog/compress/";
+        path = "../compress/";
+        String graphFilename = path + "graph/" + graphName + ".graph";
+        String structFilename = path + "struct/" + graphName + ".txt";
+        Graph graph = Graph.fromFile(graphFilename);
+        ArrayList<Structure> structList = Structure.listFromFile(structFilename);
+        int i, n;
+        Structure struct;
+        n = structList.size();
+        for (i=0; i<n; i++){
+            struct = structList.get(i);
+            graph.addStructure(struct);
+        }
+
+        ArrayList<Edge> edgeList = Edge.readFile(graphFilename);
+        Graph graph2 = Graph.fromFile(graphFilename);
+        for (i=0; i<n; i++){
+            struct = structList.get(i);
+            graph2.undoInit();
+            graph2.addStructure(struct);
+            graph2.undoAction();
+            graph2.addStructure(struct);
+            System.out.println(i + ": " + graph2.diskSpace());
+        }
+        System.out.println(graph.check(edgeList));
+        System.out.println(graph2.check(edgeList));
+
+        int row, column;
+        for (Block block: graph.getBlockMatrix()){
+            row = block.getRow();
+            column = block.getColumn();
+            if(!graph2.getBlockMatrix().hasValue(row, column)){
+                System.out.println("Missing: " + row + ", " + column);
+            }
+        }
+
+        //System.out.println(i + ": " + graph.diskSpace());
+        //System.out.println(i + ": " + graph2.diskSpace());
+        //System.out.println(graph);
+        //System.out.println(graph.getPartition());
+        //System.out.println(graph2);
+        //System.out.println(graph2.getPartition());
+
+        /*
+        Iterator<Block> iterator = graph.getBlockMatrix().iterator();
+        Iterator<Block> iterator2 = graph2.getBlockMatrix().iterator();
+        Block block;
+        Block block2;
+
+        for (; iterator.hasNext() && iterator2.hasNext();) {
+            block = iterator.next();
+            block2 = iterator2.next();
+            System.out.println(block);
+            System.out.println(block2);
+            System.out.println(block.equals(block2));
+        }
+
+         */
+    }
+
     public static void greedy(){
         String path;
         path = "build/";
+        // path = "../../../build/";
         String graphFilename = path + "graph.graph";
         String structFilename = path + "struct.txt";
         String partFilename = path + "partition.txt";
         Graph graph = Graph.fromFile(graphFilename);
         ArrayList<Structure> structList = Structure.listFromFile(structFilename);
-        int i, n;
+        int i, k, n, m;
         n = structList.size();
+        m = n / 10;
+        m = n;
         Structure struct;
         ArrayList<Integer> bestStructList= new ArrayList<Integer>();
         int bestCompression = 10*graph.diskSpace();
@@ -25,6 +108,7 @@ public class Main {
         int j = 0;
         while (true) {
             bestStructure = -1;
+            k = 0;
             for (i = 0; i < n; i++) {
                 if (!bestStructList.contains(i)) {
                     struct = structList.get(i);
@@ -34,6 +118,13 @@ public class Main {
                     if (currentDiskSpace < bestCompression) {
                         bestCompression = currentDiskSpace;
                         bestStructure = i;
+                        k = 0;
+                        //System.out.println(i);
+                    } else {
+                        k++;
+                        if (k > m){
+                            i = n; // break
+                        }
                     }
                     graph.undoAction();
                 }
@@ -41,18 +132,25 @@ public class Main {
             if(bestStructure >= 0){
                 bestStructList.add(bestStructure);
                 graph.addStructure(structList.get(bestStructure));
-                System.out.println("> Selecting structure " + bestStructure + ", estimate size is " + graph.diskSpace() + " bits");
+                System.out.println("> Selecting structure " + bestStructure + " as n°" + j + ", estimate size is " + graph.diskSpace() + " bits");
+                //FileIO.write(graph.getPartition().toFormattedString(), path + "partition" + j + ".txt");
                 j++;
             } else {
                 break;
             }
         }
 
+        //System.out.println(graph.check(edgeList));
         FileIO.write(graph.getPartition().toFormattedString(), partFilename);
 
     }
 
     public static void main(String[] args) {
-        greedy();
+        /* run the old algorithm without speed-up */
+        // greedy();
+
+        /* run the new algorithm with SORTING speed-up */
+        Greedy g = new Greedy("build/");
+        g.run();
     }
 }
\ No newline at end of file
diff --git a/src/part2/GraphCompress/src/Pic.java b/src/part2/GraphCompress/src/Pic.java
new file mode 100644
index 0000000..98de9c9
--- /dev/null
+++ b/src/part2/GraphCompress/src/Pic.java
@@ -0,0 +1,21 @@
+public class Pic {
+    private final int nbOne;
+    private final int nbPixel;
+
+    public Pic(int nbOne, int nbPixel) {
+        this.nbOne = nbOne;
+        this.nbPixel = nbPixel;
+    }
+
+    public int getNbOne() {
+        return nbOne;
+    }
+
+    public int getNbPixel() {
+        return nbPixel;
+    }
+
+    public int arithmeticSub(){
+        return CompressMath.arithmeticSub(this.getNbOne(), this.getNbPixel());
+    }
+}
diff --git a/src/part2/GraphCompress/src/Score.java b/src/part2/GraphCompress/src/Score.java
new file mode 100644
index 0000000..6660d10
--- /dev/null
+++ b/src/part2/GraphCompress/src/Score.java
@@ -0,0 +1,27 @@
+import java.util.Comparator;
+
+public class Score {
+    private int index;
+    private int score;
+    private Structure struct;
+    public static final Comparator<? super Score> C = new Comparator<Score>(){
+        @Override
+        public int compare(Score lhs, Score rhs){
+            return lhs.score > rhs.score ? 1 : (lhs.score < rhs.score ? -1 : 0);
+        }
+    } ;
+
+    public Score(int index, int score, Structure struct){
+        this.index = index;
+        this.score = score;
+        this.struct = struct;
+    }
+
+    public Structure getStruct(){return struct;}
+    public int getIndex(){return index;}
+
+    @Override
+    public String toString() {
+        return "(" + this.index + ", " + this.score + ")";
+    }
+}
-- 
GitLab