[networkx]双边缘交换

时间:2016-03-11 13:40:02

标签: networkx

$f = 'file.csv';
$separator = ',';

$file = file_get_contents($f);     

// bi-dimensional array
$regs = array_map(function($reg){return (explode($separator,$reg));},explode("\n",$file));

还有,connected_double_edge_swap(G,nswap = 1,_window_threshold = 3)     _window_threshold是什么?    保持连通性不应该是对连通子图进行保证连通性的断边重连吗?

1 个答案:

答案 0 :(得分:0)

我相信你的问题是:

  

nx.double_edge_swap的源代码说:

     
    

而不是从生成的边列表中随机选择,         该算法从节点集中选择非均匀的         按程度加权的概率。

  
     

他们为什么决定这样做?“

这是对的吗?

如果是这样,那么首先我将解释为什么这两种方法给出相同的结果。从概念上讲,我们想要创建一个大的边列表,然后从该列表中随机选择两条边。如果我们选择两个节点,其概率与其度数成比例,然后从每个节点中选择一个边,我们就完成了相同的结果:

如果u的边距是c的{​​{1}}倍,那么让v成为选择p_vv的概率学位。然后,从d_v中选择给定边的概率为v:这是选择p_v/d_vv的概率,即选择该边缘的概率。现在让我们看看1/d_v的一个边缘:它被选中的概率是u,这是相同的。

现在为什么这样做而不是创建一长串边?一个问题是内存限制。要从所有边缘中进行选择,需要在列表或集合中具有内存中的所有边缘。这很难。第二个问题是,一旦边缘交换,我们不仅需要更新图形,而且我们必须更新此列表或集合,这可能不是一个有效的过程。因此,将会有更多的代码被编写并采取更多步骤。