Boost-Graph Library: Gibt es einen ordentlichen Algorithmus in BGL gebaut für Community-Erkennung?

StackOverflow https://stackoverflow.com/questions/272414

  •  07-07-2019
  •  | 
  •  

Frage

Jeder da draußen BGL mit für große Produktionsserver?

  • Wie viele Knoten hat Ihr Netzwerk besteht aus?
  • Wie gehen Sie Gemeinschaft Erkennung
  • Hat BGL keine coole Art und Weise müssen Gemeinden zu erkennen?
  • Manchmal werden zwei Gemeinden könnten zusammen mit einer oder zwei Kanten verbunden werden, aber diese Kanten sind nicht zuverlässig und können verblassen. Manchmal gibt es überhaupt keine Kanten.

Könnte jemand sprechen kurz, wie dieses Problem zu lösen. Bitte öffnen Sie meinen Geist und inspiriert mich.

Bisher habe ich es geschafft, zu arbeiten, wenn zwei Knoten auf einer Insel (in einer Gemeinschaft) sind in einer damit teure Art und Weise, aber jetzt brauche ich herauszufinden, welche zwei Knoten auf getrennten Inseln einander am nächsten sind. Wir können nur eine minimale Verwendung von unzuverlässigen geografischen Daten machen.

Wenn wir vergleichen es bildlich zu einem Festland und einer Insel und nehmen Sie es aus der sozialen Distanz Kontext. Ich möchte herausfinden, welche zwei Bits Land sind die am engsten zusammen über einem Gewässer.

War es hilfreich?

Lösung

Ich habe die BGL für Graphen mit Millionen von Knoten, aber die Größe der Grafik verwendet Sie hängt davon ab, verwenden können, was Algorithmus Sie versuchen, auszuführen. Sie können schnell Abstände zwischen den Knoten berechnen. Es gibt 4 kürzesten Weg Algorithmen, die die meist anwendbar sind abhängig von Ihren Daten: (einzelne Paare von Punkten, für alle Paare von Punkten, spärlich und dichter Graphen, ...)

.

Wie für Community-Erkennung, gibt es keine Algorithmen integrierte in die BGL speziell für das (aber vielleicht können Sie einen Beitrag, wenn Sie mit Ihrem Projekt fertig sind). Es gibt ein paar Algorithmen, die in den Aufbau einer Community Erkennungsalgorithmus nützlich sein könnte. Die max-flow / min-cut Algorithmen sie sind wahrscheinlich in der gleichen Community sein werden typischerweise in Gemeinschafts Detektion verwendet (wenn es eine Menge von Strömung zwischen zwei Teilnehmern möglich ist, dann, wenn es nicht viel Strömung ist, dann wird der min-cut wahrscheinlich Straßen zwischen Gemeinschaften vertreten ). Darüber hinaus gibt es Heuristik die Knoten des Graphen zu bestellen zu reduzieren Bandbreite . Knoten bilden „Communities“ sind wahrscheinlich miteinander in einer solchen Anordnung nahe sein.

Andere Tipps

Soweit ich weiß BGL keine Algorithmen hat speziell für die Gemeinschaft Erkennung.

Mit dem „Insel“ meinst du ein getrenntes Subgraphen?

Auch Diagramme haben keine Vorstellung von ‚Distanz‘.

Diese ‚soziale Distanz‘ ist etwas, das Sie definieren, gehen zu müssen. Sobald Sie das getan, dass ein großer Teil der Arbeit getan ist.

Es gibt zahlreiche Methoden aufgelistet auf der Seite, die Sie verknüpfen, die meisten nur von denen, benötigen Sie so etwas wie eine ‚Distanz‘ Metrik zu definieren, und dann stecken Sie Ihre Definitionen in den Algorithmus.

@ David Nehme

Graphen ohne Kantengewichte sind nur etwa Verbundenheit, sie haben keine Ahnung von der Entfernung. Wenn Sie über ein Netzwerk sprechen wollen, dann können Sie über Entfernung sprechen. Aber ein Graph ohne Kantengewichte hat keine Distanz, wenn Sie eine implizierte Kantengewicht von 1 für alle Kanten übernehmen wollen. Aber das ist wirklich nur die Grafik in ein Netzwerk drehen.

Auch er spricht über den Abstand zwischen zwei getrennten Graphen. Um dieses Modell, müssen Sie für Abstand zwischen den Knoten ein externes Konzept einführen, getrennt vom Rand-Abstand.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top