Nick: AntScardi Oggetto: re:non è vero Data: 19/3/2007 20.15.36 Visite: 38
Grande D'Alessio!  Cmq io l'ho implementato l'anno scorso... se ti serve eccotelo! function siteOrder = pageRank(G, itermax, tol); % % % ORDINAMENTO DI UN INSIEME DI PAGINE WEB ATTRAVERSO % L'ALGORITMO PAGERANK DI GOOGLE % % % siteOrder = pageRank(G,itermax,tol) %========================================================================== %SCOPO % La routine ordina un insieme di pagine web in base alla loro importanza % utilizzando l'algoritmo del PageRank che costituisce il cuore del motore % di ricerca Google %========================================================================== %USO % siteOrder = pageRank(G,itermax,tol) %========================================================================== %PARAMETRI DI INPUT % G -> Matrice delle adiacenze dell'insieme delle pagine Web da ordinare % piena o sparsa % itermax -> Numero massimo di iterazioni consentite % % tol -> Tolleranza richiesta in termini di cifre significative % %========================================================================== %PARAMETRI DI OUTPUT % % siteOrder -> Matrice che contiene gli indici delle pagine Web ed il % relativo Rank ordinati dalla meno importante alla più % importante in base al Rank stesso %========================================================================== %TABELLA CODICI DI ERRORE % ERR SIGNIFICATO % 1 Numero di parametri in ingresso non corretto: % inserire in ingresso una matrice, il numero max di iterazioni e la % tolleranza richiesta % 2 Errore di dimensioni: % la matrice G inserita non è quadrata % 3 Matrice di adiacenza non valida: % gli elementi di G devono essere tutti 0 o 1 % %========================================================================== %ESEMPI % siteOrder = pageRank(G,itermax,tol) %========================================================================== % %========================================================================== %========================================================================== %Controllo sui parametri di input if(nargin ~= 3) error(['Numero di parametri in ingresso non corretto',10,... 'Errore: 1, consultare la tabella degli errori']); % Controllo sulle dimensioni della matrice in ingresso elseif(size(G,1) ~= size(G,2)) error(['Errore di dimensioni',10,... 'Errore: 2, consultare la tabella degli errori']); % Controllo sui singoli elementi di G (devono essere 1 o 0) elseif (length(find(G > 1 | G < 0))) error(['Matrice di adiacenza non valida',10,... 'Errore: 3, consultare la tabella degli errori']); end %Controllo su eventuali pagine che si autoreferenziano ed eliminazione %dei link di autoreferenza if(length(find(diag(G))) ~= 0 ) disp('Eliminzione dei link delle pagine che si autoreferenziano'); G=G-diag(diag(G)); end %Controllo sulla presenza di eventuali "pagine trappola" ed inserimento %delle uscite di sicurezza L = length(G); c=sum(G); z=find(c==0); if (length(z) ~= 0) disp('Eliminzione delle trappole'); for i=1:length(z) G(:,z(i))=ones(L,1); end %Rimetto a posto eventuali link di autoreferenza ottenuti involontariamente %con l'operazione precedente G=G-diag(diag(G)); end %Costruzione della matrice A e del vettore b ed applicazione del metodo di Jacobi c=sum(G); C=spdiags(1./c',0,L,L); I=speye(L,L); A= I - 0.85*G*C; [R C I] = msparsa(A); b=0.15/L*ones(L,1); xin=ones(L,1)/L; [sol,niter] = jacob(R, C, I, b, xin,0,itermax,tol); %Calcolo dei Rank %Ordinamento delle pagine in base al Rank ottenuto dal più piccolo al più grande siteOrder =[ [1:L]',sol]; siteOrder = sortrows(siteOrder,2); %Pulizia della memoria prima di terminare clear z A c C I b xin R C I L; return |