我在python中工作,而不是r,所以下面只是伪代码。
我将研究邻接矩阵(不是igraph对象),因为这将是最快的。
让
A
是邻接矩阵,
W
重量和
w
元素
西
是的。
基本思想是迭代邻接矩阵中的所有权重。
一个
,阈值
一个
在每个权重处,检查是否有空行(和列,如果图是有方向的)。
则定向情况的伪代码为:
function (A) -> w
W = sort(list(A))
for w in W:
A' = A > w
for row in A':
if sum(row) == 0:
for col in A':
if sum(column) == 0:
return w
有很多方法可以优化这一点,但这可以让我们了解基本的想法。#
最快的方法可能是计算每行和每列的最大权重,
maxima_rows
和
maxima_columns
,找出其中的最小值,
min_max_row
和
min_max_col
然后取这两个值的最大值
西
是的。
编辑:
在python中,快速方法如下所示:
from numpy import min, max
def find_threshold_that_disjoints_graph(adjacency_matrix):
"""
For a weighted, fully connected graph, find the weight threshold that results in multiple components.
Arguments:
----------
adjacency_matrix: (N, N) ndarray of floats
Returns:
--------
threshold: float
"""
maxima_rows = max(adajacency_matrix, axis=1) # (N, ) vector
maxima_cols = max(adajacency_matrix, axis=0) # (N, ) vector
min_max_rows = min(maxima_rows) # float
min_max_cols = min(maxima_cols) # float
threshold = max([min_max_rows, min_max_cols])
return threshold