From d4a1970e54c9b129b3e2277d9147084bba4f9e85 Mon Sep 17 00:00:00 2001
From: Louis Fourcade <louis.fourcade142@gmail.com>
Date: Wed, 10 Mar 2021 14:40:56 +0100
Subject: [PATCH] pagerank (marche moyen)

---
 TP2   | Bin 20364 -> 20364 bytes
 TP2.c |   1 +
 TP3   | Bin 14908 -> 14908 bytes
 TP3.c |  49 ++++++++++++++++++++++++++++++++++++++-----------
 4 files changed, 39 insertions(+), 11 deletions(-)

diff --git a/TP2 b/TP2
index 7842f9c515ab9445446ce256f5dce16a12d3a8f6..8c90ef31e5334fcce47f26e929f863d6d82585a1 100755
GIT binary patch
delta 17
YcmeB~&)74caf5<0Q`Yg#O3qn406U%rEdT%j

delta 17
YcmeB~&)74caf5<0Q_7*uO3qn406SI&A^-pY

diff --git a/TP2.c b/TP2.c
index 9785637..dc4d9d9 100644
--- a/TP2.c
+++ b/TP2.c
@@ -161,6 +161,7 @@ unsigned long compute_densest_core_ordering_prefix(adjlist *g, unsigned long *et
 
 
 
+
 	}
 	return max_prefix;
 }
diff --git a/TP3 b/TP3
index 272b1556eb400a4ce954769f1625d4a440252984..2c865c5723dcb9cea539ca0d5767943ff098fea6 100755
GIT binary patch
delta 3641
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

delta 2887
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
CiF+&n

diff --git a/TP3.c b/TP3.c
index e8f8631..60d9de8 100644
--- a/TP3.c
+++ b/TP3.c
@@ -33,12 +33,13 @@ void calc_in_deg(edgelist *g, unsigned long *in_res) {
 
 // fonction réalisant nb_iter itération de power pagerank
 // distr_res doit être malloc et de taille g->n
-int pagerank(edgelist *g, long double *distr_res, long double alpha, int nb_iter) {
+int pagerank(edgelist *g, long double *distr_res, long double alpha, unsigned long nb_iter) {
 	unsigned long i, j;
 
 	unsigned long *out_deg;
+	long double *prob_t = distr_res;
 	long double *prob_t1;
-	long double *swap_buffer;
+	long double *swap_pointeur;
 
 
 	out_deg = (unsigned long*) malloc((g->n)*sizeof(unsigned long));
@@ -49,7 +50,7 @@ int pagerank(edgelist *g, long double *distr_res, long double alpha, int nb_iter
 
 	// initialisation des probas
 	for (i = 0; i < g->n; i += 1) {
-		distr_res[i] = 1./((long double) (g->n));
+		prob_t[i] = 1./((long double) (g->n));
 	}
 
 
@@ -65,16 +66,40 @@ int pagerank(edgelist *g, long double *distr_res, long double alpha, int nb_iter
 
 		// itération sur les arêtes pour chaque quantité
 		for (j = 0; j < g->e; j += 1) {
-			prob_t1[g->edges[j].t] += (1 - alpha)*(distr_res[g->edges[j].s]/out_deg[g->edges[j].s]);
+			prob_t1[g->edges[j].t] += (1 - alpha)*(prob_t[g->edges[j].s]/out_deg[g->edges[j].s]);
 		}
 
 
 		// ajout du poids alpha en plus
-		for (j = 0; j < g->n; j +=1) {}
-	}
+		for (j = 0; j < g->n; j +=1) {
+			prob_t1[j] += alpha*(1./((long double) (g->n)));
+		}
 
+		// renormalisation du vecteur
+		long double v = 0;
+		for (j = 0; j < g->n; j += 1) {
+			v += prob_t1[j];
+		}
+		v = (1-v)/((long double) (g->n));
+		for (j = 0; j < g->n; j += 1) {
+			prob_t1[j] += v;
+		}
 
+		// échange des pointeurs pour prochaine itération
+		swap_pointeur = prob_t;
+		prob_t = prob_t1;
+		prob_t1 = swap_pointeur;
+	}
 
+	// si nombre impair d'itération, copie du résultat final dans le bon tableau
+	if (nb_iter%2 == 1 || nb_iter == 0) {
+		for (i = 0; i < g->n; i += 1) {
+			distr_res[i] = prob_t[i];
+		}
+	}
+
+	free(prob_t1);
+	free(out_deg);
 	return 0;
 
 }
@@ -114,18 +139,20 @@ int main(int argc, char **argv) {
 
 
 
-
-
-
 	// fonctions du TP3
 	long double *p_distrib;
 	p_distrib = (long double*) malloc((g->n)*sizeof(long double));
 
 
 
-	pagerank(g, p_distrib, 0.5, 4);
+	pagerank(g, p_distrib, 0.001, 200);
 
-	printf("test %f = %Lf\n", (1./548552.), p_distrib[0]);
+	long double last = p_distrib[0];
+	for(int i =0; i < g->n; i +=1) {
+		if (last != p_distrib[i]) {
+			printf("|%Le|\n", p_distrib[i]);
+		}
+	}
 
 
 	return 0;
-- 
GitLab