问题描述
我需要实现 Watts-Strogatz 算法,但在创建完整图形时遇到了一些问题。我实现它的方式,它占用了太多内存,我需要在大型系统上工作,所以这是一个问题。
我正在为我的 n 个节点及其 n - 1 = k 个邻居创建一个称为格子的矩阵。例如。假设 n = 7。我的格子看起来像:
1 6 2 5 3 4
2 0 3 6 4 5
3 1 4 0 5 6
4 2 5 1 6 0
5 3 6 2 0 1
6 4 0 3 1 2
0 5 1 4 2 3
现在是创建它的代码。
这是 main.cpp:
#include "lattice.h"
#include <vector>
int main() {
/*
* initial parameters
*/
int n = 7; //number of agents MUST BE ODD
int k = 6; //number of agents with whom we wire; N - 1 for full graph
// NEEDS TO BE EVEN
int** lattice = new int* [n];
/*
* creating ring lattice
*/
for (int i = 0; i < n; i++) {
lattice[i] = new int [k];
}
createRingLattice (n,k,lattice);
delete[](lattice);
std::cout << std::endl;
return 0;
}
这是 createRingLattice 函数:
void createRingLattice (int n,int k,int** lattice) {
/*
* setting up ring lattice
*/
//table of the nearest neighbours
//next iN prevIoUs iP
int* iP = new int [n];
int* iN = new int [n];
for (int i = 0; i < n; i++) {
iP[i] = i - 1;
iN[i] = i + 1;
}
//boundary conditions
iP[0] = n - 1;
iN[n - 1] = 0;
for (int i = 0; i < n; i++) {
int countP = 0;
int countN = 0;
for (int j = 0; j < k; j++) {
if (j % 2 == 0) {
if (i + countN > n - 1) {
lattice[i][j] = iN[i + countN - n];
} else {
lattice[i][j] = iN[i + countN];
}
countN++;
}
if (j % 2 == 1 ) {
if (i - countP < 0) {
lattice[i][j] = iP[n + i - countP];
} else {
lattice[i][j] = iP[i - countP];
}
countP++;
}
}
}
delete[](iN);
delete[](iP);
}
第一个问题: 有没有办法以更少的内存使用量来实现这一点?
第二个问题: 我见过有人使用邻接列表 (this one for example) 实现图形,但我想知道它是否比我的实现更优化?它也使用指针,而且我不是专家,所以我很难确定它在内存使用方面是否更好。
注意:我目前不关心速度。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)