![]() |
---|
Hallo, Community! Ich habe ein kleines Programm geschrieben, welches abhängig der Kanten- und Knotenanzahl einen Zufallsgraphen ausgibt. Die Implementation entspricht der Vorgehensweise von dem Erdős-Rényi-Graphen (wiki: Zufallsgraphen) , der von allen möglichen ungerichteten Kanten mit der Anzahl (keine parallele Kanten!) von Knoten genau Kanten auswählt und zurückliefert. Für die Laufzeitanalyse eines anderen Algorithmus wird von dem Zufallsgraphen erfordert, dass der Zufallsgraph zusammhängt, also von allen Knoten einen Pfad zu allen anderen Knoten existiert. Da meine Laufzeitanalyse nicht auf die Knotenanzahl gerichtet ist, sondern eher auf die Anzahl der Kanten, habe ich jeden resultierenden Zufallsgraphen die isolierten Knoten, also Knoten mit dem Grad 0, entfernen lassen. Der Zufallsgraph ohne isolierten Knoten wird genau dann zurückgegeben, wenn demnach alle nicht-isolierten Knoten zusammenhängen. Meine Frage hierzu lautet, mit wie vielen Versuche von Zufallsgraphenerzeugungen ich rechnen muss, bis ein Zufallsgraphen erzeugt wird, der meinen Kriterien erfüllt? Wie gehe ich da am Besten vor? Literaturangaben zu dem Thema ist wünschenswert! Für alle, die mir helfen möchten (automatisch von OnlineMathe generiert): "Ich möchte die Lösung in Zusammenarbeit mit anderen erstellen." |
![]() |
![]() |
Hallo, vielleicht kann ich zumindest ein bisschen helfen... Ganz allgemein lässt sich Deine Situation als Wartezeitproblem mit geometrischer Verteilung beschreiben: Du sucht den Erwartungswert von , wobei der Zeitpunkt des ersten E-R-Graphen mit Parameter ist, der (i) genau Kanten hat, oder (ii) zusammenhängend ist. Der erste Fall lässt sich relativ leicht lösen: Die Anzahl der Kanten des Graphen ist binomialverteilt mit Parameter . Das heißt, die Wahrscheinlichkeit dafür, genau Kanten zu haben, ist . ist nun geometrisch verteilt mit Parameter , sodass gilt: . Der zweite Fall, d.h. die Bestimmung des zugehörigen , ist wesentlich komplizierter und es scheint mir, dass es dazu klassisch nur asymptotische Ergebnisse gibt: en.wikipedia.org/wiki/Erd%C5%91s%E2%80%93R%C3%A9nyi_model mathoverflow.net/questions/60075/connectivity-of-the-erd%C5%91s-r%C3%A9nyi-random-graph Ich kenne aber jemanden, der sich sehr gut mit E-R-Graphen auskennt und werde mal fragen. Gruß Mauthagoras |
![]() |
Wartezeitproblem trifft den Nagel auf den Punkt :-). Hierzu wollte ich noch mal anmerken, dass die W'keit m Kanten zu erhalten, genau ist, denn es werden aus allen Kanten mit der Anzahl genau gezogen. Aber wie in der Stochastik üblich, kann man ja annehmen, dass nicht gezogen werden, sondern mit W'keit eine Kante vorhanden bzw. mit nicht enthalten ist. Erwartungstechnisch müssen Kanten resultierenden. (Die Annahme ist dann aber approximativ oder?) Vielleicht ist noch interessant, dass jeder E-R-Graph genau dann zusammenhängend ist, wenn es einen Teilgraphen als Baum gibt. Im Prinzip kann man mithilfe der totalen W'keit wie folgt vorgehen: mit als den aus G mit der Verschmelzung der Knoten und aus resultierender Graph und als Graphen der die Kante garantiert nicht enthalten wird. Dabei gilt , wenn letztlich nur ein Knoten existiert, denn dies würde bedeuten, dass alle Knoten miteinander verschmolzen wurden -> zusammenhängend.Hierzu hab ich auch noch eine Formel gefunden, bzw. jemanden gefunden, der nach der Erklärung der Formel fragt ;-) math.stackexchange.com/questions/584228/exact-probability-of-random-graph-being-connected Jetzt besteht nur noch das Problem, dass der Graph im Prinzip nicht zusammenhängend sein muss! Knoten, die keiner Kante zugeordnet wurden, entfallen aus der Zusammenhangsbetrachtung... |
![]() |
Okay, für mich ist das Modell mit zufälliger Kantenanzahl üblich. Dann ist mein Fall (i) natürlich nicht relevant und der Algorithmus hat keine zufällige Laufzeit. Dein letzer Post klingt, als wäre Deine Frage eigentlich viel spezieller als es zuerst klang... Was ich geschrieben habe hat nichts beigetragen, weil Du in Wirklichkeit nur noch wissen möchtest, wie Du mit den entfernten Kanten umgehen kannst. Es wäre schön gewesen, wenn Du das klarer geschrieben hättest. Kannst Du nochmal die Motivation dafür beschreiben, isolierte Knoten zu ignorieren? Die Aussage, dass sich Deine Analyse auf die Anzahl der Kanten und weniger auf die der Knoten bezieht, wundert mich, da die beiden natürlich stark zusammenhängen. Wäre die Zielfrage "Wie viele (n,p)-ER-Graphen müssen durchschnittlich erzeugt werden, bis einer zusammenhängend ist?", dann könntest Du keine Knoten ignorieren. Was ist also die Zielfrage? |
![]() |
Ich hatte heute/gestern als ich den Post geschrieben eine lange Nacht und konnte daher viel recherchieren und überlegen (Nachtmensch). Das Problem mit dem Umgang von isolierten Knoten ist nach der langen Nacht mein letztes Rätsel :-), also als ich die Frage geschrieben habe, hatte ich echt gar kein Plan, was zu tun ist. So jetzt sehr spezifisch und wiederhole ggf: Ich habe ein Programm erhalten, welches die Zuverlässigkeit eines Netzes berechnet. Ein Netz besteht aus Knoten und eindeutigen (keine parallelen Kanten), ungerichteten Kanten. Ein Knoten steht für ein Gerät bspw. für einen Computer, ein Server o.ä., eine Kante steht für eine Verbindung zweier Geräte. So ein Graph könnte bpw. wie folgt aussehen: (a) 0/\1 (b) ____ (c) 2 mit und und . Hierzu wird jedes Graphenelement eine Intaktwahrscheinlichkeit (I.W.), eine Wahrscheinlichkeitsangabe der Funktionsfähigkeit während einer gegebenen Missionszeit , zugeschrieben. Nehmen wir mal konkret am Beispiel von an, dass alle Knoten garantiert intakt sind, also alle I.W. der Knoten genau 1 sind, und die Kanten mit Wahrscheinlichkeit 0.5 mindestens in einer gegebenen Missionszeit ausfallen. Hierzu könnte eine Zuverlässigkeitkeitsfrage wie folgt lauten: Wie groß ist die Wahrscheinlichkeit, dass während einer Missionszeit die Knoten a und c ununterbrochen in Verbindung stehen? Die Lösung des Problems lautet trivialerweise: , da die Knoten a und b mithilfe der Verbindung (a,0,b) und (a,1,c,2,c) eine intakte Verbindung eingehen können. Das erhaltende Programm gibt genau den selben Wert aus. Erforderlich für den Eingabegraphen ist hierbei, dass das Netz zusammenhängend ist und mindestens zwei Knoten miteinander eine Verbindung eingehen müssen. Die Vorgehensweise des Programms hängt hierbei sehr stark von der Kantenanzahl ab. Ein großes Problem des Programms ist die exponentielle Laufzeit (Problem liegt in NP-hard)! Meine Aufgabe lautet: Verbessern Sie das Programm durch einen Preprocessing, der den Eingabegraphen mit wenig Aufwand zugungsten der Zuverlässigkeitsberechnung vor der eigentlichen Berechnung verbessert. Dies habe ich auch getan. Wichtiger Merkmal meines Preprocessing ist es, dass je vernetzter der Graph ist, desto weniger der Laufzeit günstige Veränderungen kann ich am Eingegraphen vornehmen. Wenn es bspw. sehr viele Knoten mit dem Grad 1 oder 2 gibt, desto wahrscheinlicher der Erfolg des Preprocessing. Nun möchte ich anhand zufälliger erzeugter Graphen die Laufzeit zwischen dem Programm ohne Preprocessing und mit dem Preprocessing vergleichen. Da das Programm sehr stark von der Kantenanzahl abhängt ist meine meine Überlegung: Wenn ich eine feste Knotenanzahl habe - ein übliches zu untersuchendes Netz ist ein Graph mit bis zu 20 Knoten - dann fange ich mit einem Zufallsgraphen an, der sehr wahrscheinlich nicht stark vernetzt ist und erhöhe langsam die Anzahl der Knoten. Wenn die Anzahl der Kanten bspw. 10 ist, dann ist die Wahrscheinlichkeit relativ hoch, dass ein zusammenhängender E-R-Graph eher eine Kette bildet, anstatt einen vollständigen Graphen. Mit wäre die Grenze erreicht,- der Preprocessing ist lediglich ein Overhead für das Programm und demnach ineffizient. Der Zufallsgraphalgorithmus funktioniert so: G(n,m) 1a) Erzeuge eine Liste S von allen möglichen Kanten mit n Kanten. 1b) Erzeuge eine leere Kantenliste E 2) m' = m 3) Generiere eine Zufallszahl a von 0 bis m'-1 4) Falls m' 0 ist , dann teste ob dieser die Kantenliste E zusammenhängt: Wenn ja, dann gib E aus Wenn nein, dann verwerfe E und gehe zu 1) , ansonsten weiter zu 5) 5) Füge die a.te Kante in S zu E, entferne a.te Kante aus S, setze m' = m' -1 und gehe zu 3 Hierzu habe ich jedoch die Überlegung gemacht, was denn passieren würde, wenn ich die Anzahl der Knotenanzahl auf 2000 setze und die Knotenanzahl auf 2 setze? Wie lange müsste ich denn warten, bis ein Zufallsgraph generiert werden würde! Der Erwartungswert ist demnach sehr interessant! |
![]() |
Okay, danke. Allerdings bin ich immer noch skeptisch (vermutlich weil es einfach zu weit führen würde, wenn Du es erklärst), ob es vertretbar ist, isolierte Knoten wegzulassen. Kleine Zusammenfassung: Parameter: : Anzahl der Knoten, : Anzahl der Kanten, zwischen und . : Wahrscheinlichkeit einer Kante. Es ist doch immer noch so, dass Du solange Graphen der "Größe" erzeugst, bis einer davon zusammenhängend ist, oder? Dann muss also gelten und die Zahlenkombination und in Deinem Beispiel ist nicht möglich. Wenn wir auf die feste Kantenanzahl verzichten könnten, dann liefert die asymptotische Rate eine gute Beziehung zwischen und , um mit sehr hoher Wahrscheinlichkeit einen zusammenhängenden Graphen zu bekommen, in dem Sinne, dass Du durchschnittlich (wesentlich) weniger als zwei Versuche brauchst, bis der Graph zusammenhängt. So scheint es auf jeden Fall, wenn ich die Formel, die Du verlinkt hast, berechnen lasse und das asymptotische Resultat selbst ist natürlich eine formale Rechtfertigung. Konkret: Der Graph ist mit sehr hoher Wahrscheinlichkeit zusammenhängend, falls . Das gilt insbesondere, falls . Also für z.B. sind Knoten eine gute Wahl. Für die Variante mit fester Kantenzahl wüsste ich bis jetzt nur sehr informal, wonach man sich richten könnte. Typischerweise würde man versuchen, die folgende naheliegende, heuristische Wahl theoretisch zu rechtfertigen: und . Die Motivation für ist die oben genannte und die Motivation für ist, dass dies die wahrscheinlichste Kantenanzahl bei der gewählten Kombination von und ist. Also ist es vernünftig zu erwarten, dass man nur wenige Graphen erzeugen muss. Es fehlt jedoch die theoretische Begründung. Noch eine kleine Bemerkung: Dein Verfahren, ohne Zurücklegen aus den möglichen Kanten zu ziehen, erscheint mir sehr umständlich. Typische Sprachen wie R und MatLab können das einfach so. Ich hoffe, das war jetzt nicht zu verwirrend geschrieben... |
Diese Frage wurde automatisch geschlossen, da der Fragesteller kein Interesse mehr an der Frage gezeigt hat.
|