2016-08-24 4 views
0

N 노드를 임의로 연결하여 간단한 그래프를 생성하려고합니다.무작위로 연결된 그래프 생성기

  • 입력 : 노드의
    • N 수 가장자리의
    • EN-1의 출력
  • N(N-1)/2에 나는, 그래서 이런 일을 할 효율적인 알고리즘을 찾고 있어요 : N vertex와 E edges를 가진 Simple Connected 그래프
+1

어디에 문제가 있습니까? 어떤 통계적 특성? – sascha

+0

문제는 내가 이렇게 효율적인 알고리즘을 찾고 있는데, 다음과 같은 것이다. 입력 -N- 노드 수 - E- (N-1에서 N (N-1)/2까지의) 가장자리 수 출력 : 단순 N 개의 꼭지점 및 E 가장자리가있는 연결된 그래프 – darksphere

+3

@darksphere 질문 옆에 [편집] 버튼이 있습니다. 체크 아웃하고 의견을 의견으로 추가하는 대신 요구 사항으로 업데이트하십시오 (시연이 부족하여 다운 폰트를 피하기에 충분하지 않음). 연구하지만, 적어도 게시물은 합리적인 질문과 비슷합니다) –

답변

2

N 노드의 배열을 만듭니다. Fisher-Yates shuffle 배열입니다. 어레이를 스캔하고 어레이에 인접한 노드 쌍마다 에지를 작성하십시오. 결과는 N-1 가장자리의 연결된 그래프입니다.

추가 가장자리 수가 적 으면 충분한 크기가 될 때까지 임의로 가장자리를 추가 할 수 있습니다. 그렇지 않으면 사용되지 않는 모서리의 배열을 만들고 Fisher-Yates는 배열을 임의로 뒤집어 배열에서 첫 번째 (E - (N-1)) 모서리를 가져옵니다.

-1

다음은 임의의 수의 다른 노드와 각 노드를 무작위로 연결하는 매우 간단한 알고리즘입니다.

void CreateRandomGraph(IList<Node> nodes, int maxConnections) 
{ 
    var rnd = new Random(); 

    foreach (Node node in nodes) 
    { 
     int numConnections = (int)(rnd.NextDouble() * maxConnections); 
     for (int i = 0; i < numConnections; i++) 
     { 
      //Find a random node to connect to 
      int idx = (int)(rnd.NextDouble() * nodes.Count); 
      node.ConnectTo(nodes[idx]); 
     } 
    } 
} 
+1

이것은 현재의 텍스트를 기반으로하거나 게시자가 연결된 그래프를 찾는 질문에 전혀 답하지 않습니다. 임의의 가장자리를 추가했다고해서 해당 속성이 보장되는 것은 아닙니다. –