Ce raffinage décrit l'implémentation de l'algorithme de PageRank dans le cas d'une implémentation de matrice Naifs. R0: Calculer le PageRank et le poids de chaque nœud d'un réseau R1: Comment « Calculer le PageRank et le poids de chaque nœud d'un réseau » ? Récuperer les arguments de la ligne de commande out: filename, ite_max, alpha, naif Initialiser les variables out: pi, G, N Éxecuter l'algorithme itératif in out: pi ; in: G Écrire les résultats dans des fichiers in: pi, filename, N R2: Comment « Récupérer les arguments de la ligne de commande » ? args ← Récuperer les arguments de la ligne de commande len_args ← Récuperer le nombre d'arguments de la ligne de commande Si non() 0 < len_args <= 6 ) Alors Lever l'exception ERROR_ARGS Sinon Traiter les arguments in: args, len_args ; out: filename, ite_max, alpha, naif FinSi Lors d'une exception (quelconque) Faire Afficher les consignes d'utilisation Fin du traitement des excpetions R3: Comment « Traiter les arguments » ? ite_max ← 150 alpha ← 0.85 naif ← False i ← 0 Répéter Si le ième argument est "-I" Alors ite_max ← l'entier du (i+1)ème argument i ← i + 2 SinonSi le ième argument est "-A" Alors alpha ← le réel du (i+1)ème argument i ← i + 2 SinonSi le ième argument finit par ".net" Alors filename ← le ième argument sans l'extension i ← i + 1 SinonSi le ième argument est "-P" Alors naif ← True i ← i + 1 Sinon Lever l'exception ERROR_ARGS FinSi SortirQuand i < len_args FinRépéter R3: Comment « Afficher les consignes d'utilisation » ? Écrire("Erreur lors de la saisi de la commande") Écrire("Usage: pagerank [-I max_iterations] [-A alpha] fichier_reseau.net") R2: Comment « Initialiser les variables » ? Créer H out: H, N Créer S in: H, N ; out: S pi ← Vecteur de Taille N remplit de 1/N E ← Matrice de Taille N, N remplit de (1-alpha)/N G ← alpha * S + E R3: Comment « Créer H » ? Ouvrir le fichier: filename + ".net" N ← Lire(fichier) H ← Matrice de Taille de N,N de 0 TantQue non Fin(fichier) Faire i ← Lire(fichier) j ← Lire(fichier) L'element i,j de la matrice H ← 1 FinTantQue Fermer le fichier: filename + ".net" Pour i de 0 à N-1 Faire somme_ligne ← La Somme la ligne i de la matrice H Si somme_ligne /= 0 La ligne i de la matrice H ← La ligne i de la matrice H, divisé par somme_ligne FinSi FinPour R3: Comment « Créer S » ? S ← H Pour i de 0 à N-1 Faire somme_ligne ← La Somme la ligne i de la matrice S Si somme_ligne = 0 La ligne i de la matrice S ← 1/somme_ligne FinSi FinPour R2: Comment « Éxecuter l'algorithme itératif » ? G ← Transposer(G) Pour i de 1 à ite_max Faire pi ← G_transpo multiplié matriciellement par pi FinPour R2: Comment « Écrire les résultats dans des fichiers » ? Coupler les poids et leur indice in: pi ; out: pi_couple Trier pi_couple selon sa première colonne Ouvrir le fichier: filename + ".p" Écrire dans le fichier la première colonne de pi_couple Fermer le fichier: filename + ".p" Ouvrir le fichier: filename + ".net" Écrire dans le fichier la seconde colonne de pi_couple Fermer le fichier: filename + ".ord" R3: Comment « Coupler les poids et leur indice » ? pi_couple ← Matrice de Taille N,2 remplit de 0 Première Colone de pi_couple ← pi Pour i de 0 à N-1 Faire L'élément i,1 de pi-couple ← i FinPour