def randomTree(G): # assumption: nodes labelled 0 to n-1 n = len(G) nodes = np.arange(n) visited = np.zeros(n, dtype=np.bool) hitTime = np.zeros(n, dtype=np.int) x = [np.random.choice(nodes)] visited[x[0]] = True hitTime[x[0]] = 0 # random walk i = 0 while (visited.sum() < n): nbh = G.GetNeighbours(x[i]) r = np.random.choice(nbh) if (not visited[r]): hitTime[r] = i + 1 visited[r] = True # end if x = x + [r] i = i + 1 # end random walk T = Graph(n) for i in range(n): if (i == x[0]): continue p, q = hitTime[i] - 1, hitTime[i] T.AddEdge(x[p], x[q]) return T
def Sample(self): p = np.random.permutation(self._n) T = Graph(self._n) for i in range(self._n - 1): T.AddEdge(p[i], p[i + 1]) return T