在C ++中创建图形adt的执行时间

时间:2013-04-20 19:42:54

标签: c++ performance graph

一般情况下,创建一个非定向图格,应该花费很长时间吗?

如果我有一个包含40个节点的图表,并且每个节点连接到20%的其他节点,我的程序在尝试将节点链接在一起时将会停止。

我真正能达到的最大值是20个节点的20%密度。我将顶点链接在一起的代码如下所示:

    while(CalculateDensity()){
    LinkRandom();
    numLinks++;
}

void LinkRandom(){
int index = rand()%edgeList.size();
int index2 = rand()%edgeList.size();
edgeList.at(index).links.push_back(edgeList.at(index2));
edgeList.at(index2).links.push_back(edgeList.at(index));
}

有没有办法更快地做到这一点?

编辑:这是数据结构声明的地方:

    for(int i=0; i<TOTAL_NODES; i++){
    Node *ptr = new Node();
    edgeList.push_back(*ptr);       //populate edgelist with nodes
}
cout<<"edgelist populated"<<endl;
cout<<"linking nodes..."<<endl;
while(CalculateDensity()){
    LinkRandom();
    numLinks++;
}

1 个答案:

答案 0 :(得分:1)

在我看来,你正在用每个push_back复制一个不断增长的结构。

这可能是缓慢的原因。

如果您可以显示数据结构声明,我可以尝试更具体。

编辑我仍然想念Node声明,但我会尝试将edgeList更改为指针到Node的列表。然后

// hypothetic declaration
class Node {
  list<Node*> edgeList;
}

//populate edgelist with nodes
for(int i=0; i<TOTAL_NODES; i++)
  edgeList.push_back(new Node());
....

void LinkRandom(){
  int index = rand()%edgeList.size();
  int index2 = rand()%edgeList.size();
  edgeList.at(index)->links.push_back(edgeList.at(index2));
  edgeList.at(index2)->links.push_back(edgeList.at(index));
}