<?php /* In php.ini set memory_limit to 768MB and max_execution_time to 3000 */ //Create and initialize vector v $v=array(); $vnew=array(); $fd=fopen('nodes', 'r'); $lined=fgets($fd); fclose($fd); $numNodes=intval($lined); //Initialize starting vector for($k=0;$k<$numNodes;$k++)$v[$k]=1/$numNodes; //Stocastic the matrix $fs=fopen('adj_matrix','r'); $fp=fopen('stoc_matrix','w+'); $unomenoalfa=0.15*1/$numNodes; $lwrite=array(); do{ $tot=0; //$lwrite=NULL; $line=fgets($fs); if($line===FALSE)break; $exploded=explode(' ', $line); $tot=array_sum($exploded); switch($tot){ case 0:{ for($i=0;$i<$numNodes;$i++)$exploded[$i]=1/$numNodes; break; } case 1:{ break; } default:{ $keys=array_keys($exploded,1); foreach($keys as $k)$exploded[$k]=1/$tot; break; } } //buffer each row to be later written as a column for($i=0;$i<$numNodes;$i++)$lwrite[$i].=($exploded[$i]*0.85+$unomenoalfa)." "; }while(TRUE); for($i=0;$i<$numNodes;$i++){ //save each row as a column $lwrite[$i].="\n"; fputs($fp, $lwrite[$i]); } fclose($fs); fseek($fp,0,SEEK_SET); //$fp=fopen('stoc_matrix','r'); //PageRank for($j=0;$j<5;$j++){ $index=0; //Initialize vnew for($k=0;$k<$numNodes;$k++)$vnew[$k]=0; //Compute v_m = A*v_m-1 do{ $line=fgets($fp); if($line===FALSE)break; $exploded=explode(' ', $line); for($i=0;$i<$numNodes;$i++)$vnew[$index]+=$exploded[$i]*$v[$i]; $index++; }while(TRUE); //Compute 2nd norm vnew to normalize /*for($z=0;$z<sizeof($vnew);$z++)$tmp+=pow($vnew[$z],2); $norm=sqrt($tmp); for($w=0;$w<sizeof($vnew);$w++)$vnew[$w]/=$norm;*/ //Compute step increase $x=0; for($h=0;$h<sizeof($v);$h++)$x+=abs($vnew[$h]-$v[$h]); echo 'differenza tra i vettori al giro'.$j.': '.$x.' <BR/>'; $v=$vnew; $seek=fseek($fp,0,SEEK_SET); print_r($vnew); echo "<BR/><BR/>"; } //echo 'final: '; //print_r($vnew); fclose($fp); ?>