一般情况下,创建一个非定向图格,应该花费很长时间吗?
如果我有一个包含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++;
}
答案 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));
}