Skip to content

Instantly share code, notes, and snippets.

@takageymt
Created June 12, 2018 07:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save takageymt/bced3e383b69cc0d659d558220bd3f65 to your computer and use it in GitHub Desktop.
Save takageymt/bced3e383b69cc0d659d558220bd3f65 to your computer and use it in GitHub Desktop.
std::vector<double> PageRank(const std::vector<Page>& pages, const int K, const bool normalizable) {
std::map<int, int> pid_conv;
for(int i = 0; i < static_cast<int>(pages.size()); ++i) {
pid_conv[pages[i].id()] = i;
}
std::vector<double> importances(pages.size(), 1.0);
for(int k = 0; k < K; ++k) {
std::vector<double> sums(pages.size(), 0.0);
for(int i = 0; i < static_cast<int>(pages.size()); ++i) {
int num_links = pages[i].links().size();
for(int to_pid : pages[i].links()) {
sums[pid_conv[to_pid]] += importances[i]/num_links;
}
}
for(int i = 0; i < static_cast<int>(pages.size()); ++i) {
importances[i] = 0.15 + 0.85*sums[i];
}
}
if(normalizable) {
double max_importance = *std::max_element(importances.begin(), importances.end());
for(int i = 0; i < static_cast<int>(pages.size()); ++i) {
importances[i] /= max_importance;
}
}
return importances;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment