Boost Graph Library C ++ / Power Law

时间:2014-04-08 05:53:14

标签: c++ boost boost-graph power-law

我有一个带有id,x和amp的顶点向量y坐标,我想为我的顶点生成幂律图。 Boost Library图提供幂律 plod_iterator()但是如何使用我的顶点生成幂律。谁有人可以帮忙?

1 个答案:

答案 0 :(得分:3)

Boost文档指出这些是生成器。

"该类模板使用Power Law Out Degree(PLOD)算法实现无标度图的生成器" (http://www.boost.org/doc/libs/1_55_0/libs/graph/doc/plod_generator.html

它说iterator有点令人困惑。

我会用你的数据创建一个结构矢量,然后生成一个具有相同节点数的幂律图。

从增强文档修改:

#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/plod_generator.hpp>
#include <boost/random/linear_congruential.hpp>

struct VertData{
  size_t id;
  size_t x;
  size_t y;
};

typedef boost::adjacency_list<> Graph;
typedef boost::plod_iterator<boost::minstd_rand, Graph> SFGen;

int main()
{

  vector<VertData> vertData;
  //... Initialize with data ...


  boost::minstd_rand gen;
  // Create graph with 100 nodes 
  Graph g(SFGen(gen, 100, 2.5, 1000), SFGen(), 100);


  typedef property_map<Graph, vertex_index_t >::type VertexIndexMap;
  VertexIndexMap iMap = get(vertex_index,g);
  // ... get some vertex v
  size_t vertexIndex = iMap[v];
  //...
  vertexData.at(vertexIndex).x = 4;//or what ever



  return 0;
}

这里将设置一个使用幂律指数为2.5的100个节点的无标度图。

然后,当您想要访问节点的数据时,只需访问其索引并在结构向量中查找。你可以得到这样的索引:

typedef property_map<Graph, vertex_index_t >::type VertexIndexMap;
VertexIndexMap iMap = get(vertex_index,g);
size_t vertexIndex = iMap[v];
...
vertexData.at(vertexIndex).x = 4;//or what ever

这可能不是绝对最好的方式,但它使我能够完成我的工作。