翻转单个边缘时,图形的平均测地线距离发生变化

|| 如果我添加或删除单个边的速度更快,然后计算前后的距离再减去,那么有什么方法可以发现图形的平均测地线距离会改变多少? 我正在对系统的状态由无向图表示的Metropolis Monte Carlo模拟。系统的能量取决于该图的平均测地距离。 在每个蒙特卡洛步骤中,我必须提出对图形的修改,然后计算由于该修改而引起的能量变化。我只是选择一个随机边缘并将其翻转(如果不存在则添加边缘,如果存在则删除边缘)。我现在要做的是一种蛮力:
Graph = initialize;
L = avgGeodesicLength(Graph)
E0 = energy(L)
for(i = 0; i < mcsteps; i++) {
   newGraph = copy Graph;
   flip a random edge of newGraph;
   L = avgGeodesicLength(newGraph);
   E1 = energy(L);
   dE = E1 - E0
   if (metropolis criteria(dE) is true) {
      Graph = newGraph;
      E0 = E1;
   } 
   else {
      throw the copy away and keep the current state;
   }
}
我宁愿这样做:
Graph = initialize;
L = avgGeodesicLength(Graph);
E0 = energy(L);
for(i = 0; i < mcsteps; i++) {
   edge = random edge of Graph;
   dL = difference in AvgGeodesicLength if I flip edge;
   dE = differenceInEnergy(dL);
   if (metropolis criteria(dE) is true) {
      flip edge; 
      E0 += dE;
   }
   else { do nothing;}
}
如果计算能量差远快于计算能量本身。如果有一种方法可以以给定的边以更快的方式(大O方向)翻转,则可以计算平均测地线长度的差异。 有没有办法做到这一点?我知道很难预测一条边上的变化会影响哪些路径,但是...也许我很幸运! :D 编辑:我不在乎您要考虑的任何算法必须使用的任何表示形式。如果可以节省时间,我愿意这样做。 我的图通常很小(顶点的数量通常少于一百个,边的数量在少数和完全连接之间变化)。问题是我必须重复执行此循环许多步骤才能达到平衡,并且它们针对许多不同条件中的每一个都计算出许多可观测值... :( 编辑2:我不需要单独的测地线路径或它们的长度,只需要平均测地线长度即可。     
已邀请:

要回复问题请先登录注册