Files
@ c954bec4a590
Branch filter:
Location: AENC/switchchain/cpp/graph_powerlaw.hpp - annotation
c954bec4a590
1016 B
text/x-c++hdr
Add datafile with general properties
c9c22e41130d c9c22e41130d c9c22e41130d c9c22e41130d c9c22e41130d c9c22e41130d c9c22e41130d c9c22e41130d c9c22e41130d c9c22e41130d c9c22e41130d c9c22e41130d c9c22e41130d c9c22e41130d c9c22e41130d c9c22e41130d c9c22e41130d c9c22e41130d c9c22e41130d c9c22e41130d c9c22e41130d c9c22e41130d c9c22e41130d c9c22e41130d c9c22e41130d c9c22e41130d c9c22e41130d c9c22e41130d c9c22e41130d c9c22e41130d c9c22e41130d c9c22e41130d c9c22e41130d c9c22e41130d c9c22e41130d | #pragma once
#include "graph.hpp"
#include "powerlaw.hpp"
#include <algorithm>
#include <iostream>
template <typename RNG>
void generatePowerlawGraph(int n, float tau, Graph& g, DegreeSequence& ds,
RNG& rng) {
ds.resize(n);
powerlaw_distribution degDist(tau, 1, n);
// Generate a graph
// might require multiple tries
for (int i = 1;; ++i) {
std::generate(ds.begin(), ds.end(),
[°Dist, &rng] { return degDist(rng); });
// First make the sum even
unsigned int sum = std::accumulate(ds.begin(), ds.end(), 0);
if (sum % 2) {
continue;
// Can we do this: ??
ds.back()++;
}
if (g.createFromDegreeSequence(ds))
break;
// When 10 tries have not worked, output a warning
if (i % 10 == 0) {
std::cerr << "Warning: could not create graph from "
"degree sequence. Trying again...\n";
}
}
}
|