Für meine zwei Cent, sind, wenn Sie nur die ganze Graph versuchen zu durchqueren es nicht eine ganze Menge ist egal, was Algorithmus Sie so lange verwenden, wie es nur einmal pro Knoten trifft. Dies scheint zu sein, was Sie sagen, wenn Sie Folgendes beachten:
Ich bin nur
die ganze Grafik zu überqueren versuchen
Dies bedeutet, dass Ihre Terminologie technisch ist flawed- Sie sprechen Walking ein Diagramm, nicht Suche ein Diagramm. Es sei denn, du versuchst tatsächlich, nach etwas speziellem zu suchen, was du in der Frage überhaupt nicht zu erwähnen scheinst.
Mit dieser sagte, Facebook und Twitter sind sehr unterschiedlich Graphenstrukturen, die einen Einfluss haben, wie Sie sie gehen:
Facebook ist im Grunde ein ungerichteter Graph. Wenn X mit Y befreundet ist, MÜSSEN Y mit X befreundet sein. (Oder in einer Beziehung mit oder verwandt mit usw.).
Twitter ist grundsätzlich ein gerichteter Graph. Wenn Sie X auf Y folgen, muss Y nicht X folgen.
Diese Probleme haben erhebliche Auswirkungen auf den Graph-Algorithmus. Um ganz ehrlich zu sein, wenn Sie nur alle Knoten besuchen wollen, brauchen Sie sogar eine Grafik? Warum nicht einfach alle durchlaufen? Wenn Sie alle Knoten in einem gewissen Datenstruktur my_data haben, die iterable ist, könnten Sie nur einen Generator Ausdruck wie diese:
def nodeGenerator(MY_DATA)
for node in MY_DATA:
yield node
Natürlich müssen Sie die nodeGenerator Interna anpassen zu handhaben, wie Sie sind eigentlich Zugriff auf die Knoten. Nachdem dies gesagt wurde, implementieren die meisten Graphstrukturen einen Knoteniterator. Dann können Sie einfach einen Iterator, wann immer Sie Dinge tun wollen erstellen über:
for node in nodeGenerator(MY_DATA):
(Do something here)
Vielleicht bin ich nur den Punkt der Frage fehlt hier, aber derzeit haben Sie eine Frage zu Suchalgorithmen ohne Durchsuchungs gestellt Problem. Aufgrund der Natur der Optimierung und Suche No Free Lunch hängt der Wert jedes Suchalgorithmus vollständig von dem Suchproblem ab, das Sie untersuchen möchten.
Dies gilt sogar für den gleichen Datensatz.Wenn Sie schließlich nach jedem suchen, dessen Name mit dem Buchstaben D beginnt, wäre es ein guter Ansatz, alle alphabetisch zu sortieren und eine binäre Suche durchzuführen. Wenn Sie stattdessen versuchen, den Grad der Trennung von Kevin Bacon zu finden, werden Sie einen Algorithmus haben, der mit Mr. Bacon beginnt und rekursiv über jeden, der ihn und alle anderen kennt, iteriert. Dies sind Dinge, die Sie auf Facebook oder Twitter tun könnten, aber ohne irgendwelche Besonderheiten gibt es wirklich keine Möglichkeit, einen Algorithmus zu empfehlen. Daher, wenn Sie nichts wissen, nur über alle als eine Liste iterieren. Es ist genauso gut wie alles andere. Wenn Sie dann optimieren möchten, cachen Sie alle Berechnungen zwischen.
Ich finde die wikipedia Beschreibung Brot ersten Such recht beschreibend in Bezug darauf, wie eine Implementierung zu adressieren. http://en.wikipedia.org/wiki/Breadthfirst_search –
Die Implementierung hängt davon ab, was Sie erreichen möchten, aber von Ihrer Frage, ich bin nicht klar auf Ihrem gewünschten Ergebnis. Suchst du den kürzesten Weg zwischen Freunden? Oder versuchst du nur den ganzen Graphen zu durchqueren? –
Danke, ich versuche nur die ganze Graphik zu durchqueren, schaue auf den kürzesten Weg. – eWizardII