我想创建一个邻接矩阵,给定n行代表图形某些节点之间的部分连接。例如,由于每一行代表一个集团,行A-B; B-C; C-D; A-E-D
形成以下图表。
我的第一种方法是使用for loop
来读取每一行,对于每一行,我使用另一行for loop
来获取其中的每个节点,最后,使用另一个for loop
我检查是否其余的节点已经在分析的节点的adyacence列表中,如果没有,我添加它。所有这些都给出了O(n ^ 3)的复杂性。还有另一种方法可以降低复杂性吗?是否可以用O(n)完成此操作?
答案 0 :(得分:0)
在伪代码中,您可以执行以下操作:
A[n,n] <- {0 ... 0n} // Dense matrix size n x n , initalized to zero.
for L in LINES: // Loop through input lines
{N,adj}=Split(L) // Split Node and adjecencies
I=IDNameToIndex(N) // Numeric index corresponding to Node name or id.
for n in adj: // Loop through adjecencies
i=IDNameToIndex(n) // Numeric index corresponding to Node name or id.
A[I,i]=1; // Set unidrectional adjecency
A[i,I]=1; // Set bidirectional adjecency(optional, depending on input)