raffinages presque finis

git-svn-id: http://cregut.svn.enseeiht.fr/2020/1sn/pim/projets/GH-05@207792 e13453a9-b01f-0410-a051-f404c4f0c485
This commit is contained in:
lfainsin 2020-12-09 13:44:41 +00:00
parent 9341d9e6fd
commit 647d7d8730

View file

@ -1,29 +1,4 @@
Ce raffinage décrit l'implémentation de l'algorithme de PageRank dans le cas d'une implémentation de matrice naives. Ce raffinage décrit l'implémentation de l'algorithme de PageRank dans le cas d'une implémentation de matrice naives.
Une syntaxe proche du python3 est adoptée pour simplifier l'écriture et la lisibilité.
DISCLAIMER: Cette implémentation n'est pas la plus efficace, mais la plus simple.
On suppose que l'on utilise un language fortement typé (utile pour la robustesse).
On suppose que les procédures/fonctions suivantes sont élémentaires:
Std:
- Arguments
- Longueur
- Exception
- Écrire
- Lire
- Ouvrir
- Fermer
- Fin // end of file
- Somme
Matrice:
- Transposer
- Ones
- Zeros
- Les opérations binaires: * / +
- L'accès via les [ ]
- Trier
R0: Calculer le PageRank et le poids de chaque nœud d'un réseau R0: Calculer le PageRank et le poids de chaque nœud d'un réseau
@ -34,15 +9,14 @@ R1: Comment « Calculer le PageRank et le poids de chaque nœud d'un réseau »
Écrire les résultats dans des fichiers in: pi, filename, N Écrire les résultats dans des fichiers in: pi, filename, N
R2: Comment « Récupérer les arguments de la ligne de commande » ? R2: Comment « Récupérer les arguments de la ligne de commande » ?
args ← Arguments() args ← Récuperer les arguments de la ligne de commande
len_args ← Longueur(args) len_args ← Récuperer le nombre d'arguments de la ligne de commande
Si non 0 < len_args <= 6 Alors Si non() 0 < len_args <= 6 ) Alors
Lever l'exception ERROR_ARGS Lever l'exception ERROR_ARGS
Sinon Sinon
Traiter les arguments in: args, len_args ; out: filename, ite_max, alpha, naif Traiter les arguments in: args, len_args ; out: filename, ite_max, alpha, naif
FinSi FinSi
Lors d'une exception Faire Lors d'une exception (quelconque) Faire
// ici on attend principalement les exceptions: EEROR_ARGS et CONSTRAINT_ERROR
Afficher les consignes d'utilisation Afficher les consignes d'utilisation
Fin du traitement des excpetions Fin du traitement des excpetions
@ -78,10 +52,11 @@ R2: Comment « Initialiser les variables » ?
Créer H out: H, N Créer H out: H, N
Créer S in: H, N ; out: S Créer S in: H, N ; out: S
pi ← Vecteur de Taille N remplit de 1/N pi ← Vecteur de Taille N remplit de 1/N
G ← alpha * S + Matrice de Taille N, N remplit de (1-alpha)/N E ← Matrice de Taille N, N remplit de (1-alpha)/N
G ← alpha * S + E
R3: Comment « Créer H » ? R3: Comment « Créer H » ?
fichier ← Ouvrir(filename + ".net") Ouvrir le fichier: filename + ".net"
N ← Lire(fichier) N ← Lire(fichier)
H ← Matrice de Taille de N,N de 0 H ← Matrice de Taille de N,N de 0
@ -90,45 +65,45 @@ R3: Comment « Créer H » ?
j ← Lire(fichier) j ← Lire(fichier)
L'element i,j de la matrice H ← 1 L'element i,j de la matrice H ← 1
FinTantQue FinTantQue
Fermer(fichier) Fermer le fichier: filename + ".net"
Pour i de 0 à N-1 Faire Pour i de 0 à N-1 Faire
somme_ligne ← La Somme la ligne i de la matrice H somme_ligne ← La Somme la ligne i de la matrice H
Si somme_ligne /= 0 Si somme_ligne /= 0
La ligne i de la matrice H ← La ligne i de la matrice H divisé par somme_ligne La ligne i de la matrice H ← La ligne i de la matrice H, divisé par somme_ligne
FinSi FinSi
FinPour FinPour
R3: Comment « Créer S » ? R3: Comment « Créer S » ?
V ← H * Vecteur de Taille N remplit de 1
S ← H S ← H
Pour i de 0 a N-1 Faire Pour i de 0 à N-1 Faire
Si L'element i du vecteur V = 0 Alors somme_ligne ← La Somme la ligne i de la matrice S
La ligne i de la matrice S ← 1/N Si somme_ligne = 0
Fin Si La ligne i de la matrice S ← 1/somme_ligne
FinSi
FinPour FinPour
R2: Comment « Éxecuter l'algorithme itératif » ? R2: Comment « Éxecuter l'algorithme itératif » ?
G ← Transposer(G) G ← Transposer(G)
Pour i de 1 à ite_max Faire Pour i de 1 à ite_max Faire
pi ← G_transpo * pi pi ← G_transpo multiplié matriciellement par pi
FinPour FinPour
R2: Comment « Écrire les résultats dans des fichiers » ? R2: Comment « Écrire les résultats dans des fichiers » ?
Coupler les poids et leur indice in: pi ; out: pi_couple Coupler les poids et leur indice in: pi ; out: pi_couple
pi_couple ← Trier(pi_couple, 0) // on trie selon la première colonne Trier pi_couple selon sa première colonne
fichier ← Ouvrir(filename + ".p") Ouvrir le fichier: filename + ".p"
Écrire(fichier, Première Colonne de pi_couple) Écrire dans le fichier la première colonne de pi_couple
Fermer(fichier) Fermer le fichier: filename + ".p"
fichier ← Ouvrir(filename + ".ord") Ouvrir le fichier: filename + ".net"
Écrire(fichier, Seconde Colonne pi_couple) Écrire dans le fichier la seconde colonne de pi_couple
Fermer(fichier) Fermer le fichier: filename + ".ord"
R3: Comment « Coupler les poids et leur indice » ? R3: Comment « Coupler les poids et leur indice » ?
pi_couple ← Matrice de Taille N,2 remplit de 0 pi_couple ← Matrice de Taille N,2 remplit de 0
Première Colone de pi_couple ← pi Première Colone de pi_couple ← pi
Pour i de 0 à N-1 Faire Pour i de 0 à N-1 Faire
L'element i,1 de pi-couple ← i L'élément i,1 de pi-couple ← i
FinPour FinPour