2016-08-24 7 views
0

Ich versuche, einen einfachen Graphen zu erzeugen, indem ich zufällig N Knoten annehme. Ich suche für einen effizienten Algorithmus zu tun, so etwas wie dieses:Randomly Connected Graph Generator

  • Eingang:
    • N Anzahl der Knoten
    • E Anzahl der Kanten von N-1 zu N(N-1)/2
  • Ausgang : Einfach Verbundener Graph mit N Ecken und E Kanten
+1

Wo ist das Problem? Welche statistischen Eigenschaften? – sascha

+0

Das Problem ist, ich bin auf der Suche nach effizienten Algorithmus, so etwas wie folgt: Eingabe -N Anzahl der Knoten -E- Anzahl der Kanten von (N-1 bis N (N-1)/2) Ausgabe: Einfach Verbundener Graph mit N Ecken und E Kanten – darksphere

+3

@darksphere gibt es [Bearbeiten] Knopf neben der Frage - bitte überprüfen Sie es und aktualisieren Sie Post mit Anforderungen, anstatt sie als Kommentar hinzuzufügen (das immer noch nicht genug, um Downvotes aufgrund von Mangel zu vermeiden Forschung, aber zumindest Post wird vernünftige Frage ähneln) –

Antwort

2

Erstellen Sie ein Array von N Knoten. Fisher-Yates shuffle das Array. Scannen Sie das Array und erstellen Sie eine Kante für jedes Knotenpaar, das im Array benachbart ist. Das Ergebnis ist ein zusammenhängender Graph mit N-1 Kanten.

Wenn die Anzahl der zusätzlichen Kanten klein ist, können Sie Kanten einfach zufügen, bis Sie genug haben. Erstellen Sie andernfalls ein Array der nicht verwendeten Kanten, Fisher-Yates mischt das Array und nimmt die ersten (E - (N-1)) Kanten aus dem Array.

-1

Hier ist ein extrem einfacher Algorithmus, der zufällig jeden Knoten mit einer zufälligen Anzahl anderer Knoten verbindet.

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

Dies beantwortet die Frage überhaupt nicht - basierend auf dem aktuellen Text oder der Post OP sucht nach verbundenen Graphen - das Hinzufügen zufälliger Kanten garantiert diese Eigenschaft nicht. –