次の関数は、ランダムに生成された size の隣接行列を返しnxn
、グラフを表します。
import random
def random_adjacency_matrix(n):
matrix = [[random.randint(0, 1) for i in range(n)] for j in range(n)]
# No vertex connects to itself
for i in range(n):
matrix[i][i] = 0
# If i is connected to j, j is connected to i
for i in range(n):
for j in range(n):
matrix[j][i] = matrix[i][j]
return matrix
これは非常にナイーブなソリューションであり、2 つの追加要件を満たしたいと考えています。
マトリックスが表すグラフは完全に接続されている必要があります。つまり、いくつかのステップで他のノードから到達できないノードがあってはなりません。
各ノードには多数のエッジがあります。現在、それは完全にランダムであるため、ノードが持つエッジの数はかなり均一であり、
n
が大きい場合、すべてのグラフでエッジの平均数も大きくなる傾向があります。グラフのサイズに関係なく、ノードあたりのエッジの平均数をさらに変化させて、接続が非常に少ないグラフと多くのグラフがあるようにしたいと考えています。
編集: networkx パッケージを使用すると、これは私が望むもののようですが、上記のポイント 1 のみが満たされています:
import networkx, random
G = networkx.binomial_graph(50, random.random()) # 50 nodes, random probability of an edge