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