long_flt_type Schechter_like_functor::operator()( const long_flt_type & in_param) const { const flt_type & mag_jump_limit = 23.; const long_flt_type x = std::pow(10,0.4*(m_star()-in_param)); long_flt_type result = 0.4*std::log(10.)*N_scale()*std::pow(x,alpha()+1)* std::exp(-std::pow(x,mag_lower_lim_sharpness())); if(in_param>=mag_jump_limit) result += mag23_jump(); const long_flt_type xh = std::pow(10,0.4*(in_param-mag_upper_lim())); result *= std::exp(-std::pow(xh,mag_upper_lim_sharpness())); return result; }
int main(int argc,char** argv) { Graph g=read_graph(argv[1]); int length=g.len(); float* betweenness=new float[length]; float** distances=new float*[length]; int** sigmas=new int*[length]; for(int i=0;i<length;i++) { distances[i]=new float[length]; sigmas[i]=new int[length]; } tablistlist predecs; unordered_map<int,tablist > DAG; clock_t begin=clock(); betweenness_centrality1(g,betweenness,distances,sigmas,predecs,DAG); clock_t end=clock(); cout<<"Time for Brandes first up:"<<(end-begin+0.0)/(CLOCKS_PER_SEC+0.0)<<endl; int l=g.len(); int m=g.edges(); cout<<"Edges (m):"<<m<<endl; cout<<"Vertices (n):"<<(l-1)<<endl; cout<<"m/n :"<<(float)m/(l-1)<<endl; int mstar=m_star(DAG); cout<<"m* :"<<mstar<<endl; cout<<"m*/n :"<<(float)mstar/(l-1)<<endl; // cout<<"Time for Brandes first up:"<<(end-begin+0.0)/(CLOCKS_PER_SEC+0.0)<<endl; /* int u,v; float newweight; cout<<"Enter u,v, new weight"<<endl; cin>>u>>v>>newweight; vector<Edge> vector_u=g.adj_list[u]; for(vector<Edge>::iterator it=vector_u.begin();it!=vector_u.end();it++) { if((it->vertex==v)&&(it->weight<newweight)) { cout<<"Non-incremental change"<<endl; exit(-1); } } */ delete[] betweenness; int* a=new int[40]; int* b=new int[40]; float* c=new float[40]; read_in_triples(a,b,c,argv[2]); int successes=0; clock_t total_time=0; //read in the edge updates for(int j=0;j<40&&successes<20;j++) { vector<Edge> vector_u=g.adj_list[a[j]]; int exit_flag=0; for(vector<Edge>::iterator it=vector_u.begin();it!=vector_u.end();it++) { if((it->vertex==b[j])&&(it->weight<c[j])) { cout<<"Non-incremental change"<<endl; exit_flag=1; break; } } if(exit_flag==1) { continue; } successes+=1; float* BCprime=new float[length]; float** distancesprime=new float*[length]; int** sigmasprime=new int*[length]; for(int i=0;i<length;i++) { distancesprime[i]=new float[length]; sigmasprime[i]=new int[length]; } tablistlist predecs_new; unordered_map<int,tablist > dagprime; begin=clock(); incremental_BC( a[j], b[j], c[j],distances,sigmas, DAG,g,BCprime,distancesprime, sigmasprime,predecs_new,dagprime); end=clock(); cout<<"Time for incremental :"<<(end-begin+0.0)/(CLOCKS_PER_SEC+0.0)<<endl<<endl;; total_time+=end-begin; //Recomputing Betweenness Centrality after addition float** distances_new=new float*[length]; int** sigmas_new=new int*[length]; for(int i=0;i<length;i++) { distances_new[i]=new float[length]; sigmas_new[i]=new int[length]; } tablistlist predecsnew; unordered_map<int,tablist > dagnew; float* betweenness_new=new float[length]; g.add_edge(a[j],b[j],c[j]); betweenness_centrality1(g,betweenness_new,distances_new,sigmas_new,predecsnew,dagnew); for(int i=0;i<length;i++) { if(abs(BCprime[i]-betweenness_new[i])>EPSILON) { cout<<"There is a mismatch at "<<i<<":"<<(BCprime[i]-betweenness_new[i])<<endl; } } for(int alpha=0;alpha<length;alpha++) { for(int beta=0;beta<length;beta++) { distances[alpha][beta]=distancesprime[alpha][beta]; sigmas[alpha][beta]=sigmasprime[alpha][beta]; } } //std::copy(dagnew.begin(), dagnew.end(), std::inserter(DAG, DAG.end()) ); DAG=dagnew; for(int i=0;i<length;i++) { delete[] distancesprime[i]; delete[] sigmasprime[i]; delete[] distances_new[i]; delete[] sigmas_new[i]; } delete[] distancesprime; delete[] sigmasprime; delete[] distances_new; delete[] sigmas_new; delete[] betweenness_new; delete[] BCprime; } for(int i=0;i<length;i++) { delete[] distances[i]; delete[] sigmas[i]; } delete[] distances; delete[] sigmas; cout<<"\n(Average)Time for incremental :"<<(total_time+0.0)/((CLOCKS_PER_SEC+0.0)*successes)<<endl; return 0; }