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:
parent
9341d9e6fd
commit
647d7d8730
|
@ -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
|
||||||
|
La ligne i de la matrice S ← 1/somme_ligne
|
||||||
FinSi
|
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
|
Loading…
Reference in a new issue