Forum: Mikrocontroller und Digitale Elektronik Algorithmus: erreichbare Knoten in Graphen finden


von Lord of L. (lightninglord)


Lesenswert?

Hallo zusammen,

ich hätte da ein Problem: Ich habe ein Funknetz, bei dem alle Teilnehmer 
(Knoten) bekannt sind. Nun wird ein Knoten als Basisstation definiert. 
Nun möchte ich das Netzwerk durchsuchen und für jeden Knoten seinen 
erreichbaren Nachbarn bestimmen (die Qualität der Verbindung wird über 
die RSSI bestimmt). Jetzt meine ich mich an einen rekursiven Algorithmus 
zu erinnern, der diese Aufgabe ausführt. Also von Knoten zu Knoten 
springt und dessen Nachbarn herausfindet, bis alle Verbindungen gefunden 
sind. Die große Frage die sich nun stellt: Wie heißt dieser Algorithmus?

Grüße lighninglord

von info (Gast)


Lesenswert?

Der Reisende Handelsmann von Königsberg

von Lord of L. (lightninglord)


Lesenswert?

Google scheint den Algorithmus nicht zu kennen. Hmm. Aber ich lande beim 
Königsberger Brückenproblem. Ob der Graph eulersch ist ist mir 
eigentlich latte.

von Dex (Gast)


Lesenswert?

Breitensuche oder Tiefensuche?

von Lord of L. (lightninglord)


Lesenswert?

Soweit bin ich schon: Ich suche eine Algorithmus zur Erstellung der 
Adjazenzmatrix aus einem (physikalisch) bestehenden Graphen.

von Maxx (Gast)


Lesenswert?

Lord of Lightning schrieb:
> Soweit bin ich schon: Ich suche eine Algorithmus zur Erstellung der
> Adjazenzmatrix aus einem (physikalisch) bestehenden Graphen.

Das ist eine reine Formatierung.

Du hast doch die direkten Nachbarn, bzw die "Kanten":
Mache eine Tabelle mit Spalten = Zeilen mit den Knoten als 
Zeilen/Spaltenbeschriftung und trage überall da 0 ein, wo keine direkte 
Nachbarschaft besteht, eine 1 wo es diese gibt. (Entweder in dem du jede 
Kante durchgeshst und (A,B) und (B,A) mit 1 markierst und den Rest 0 
lässt, oder indem du alle Spalten (betrachtete Knoten) durchgehst und 
alle Zeilen(direkt erreichbare Knoten) mit 1 markierst und den Rest 0 
lässt.

Voila.

von sesd (Gast)


Lesenswert?


von Klaus W. (mfgkw)


Lesenswert?

oder gleich bei boost::graph

von Udo S. (urschmitt)


Lesenswert?

Hauptsache der Handelsmann macht sich einen Knoten ins Taschentuch, daß 
er seine Nachbarn nicht wieder vergisst (duck und weg :-))

von Lord of L. (lightninglord)


Lesenswert?

Tiefensuche wäre geschickte zum implementieren.

von Tiramisu (Gast)


Lesenswert?

> Wie heißt dieser Algorithmus?
Spanning Tree und eine Loesung des im Post
beschriebenen (verteilten) Netzwerkproblems
waere OSPF.

von Flipper (Gast)


Lesenswert?

Der gesuchte Algorithmus heist: Travelling Salesman

Einfach Googeln, da findest Du jede Menge Infos.

von Possetitjel (Gast)


Lesenswert?

Lord of Lightning schrieb:

> Ich habe ein Funknetz, bei dem alle Teilnehmer
> (Knoten) bekannt sind.

Okay.

> Nun wird ein Knoten als Basisstation definiert.

"Weiss" dieser Knoten, dass er Basisstation ist?

> Nun möchte ich das Netzwerk durchsuchen

Wer ist "ich" in dem Netzwerk?
Wer will die Struktur des Netzwerkes wissen? Alle
Knoten oder nur die Basis-Station?

von Stryker (Gast)


Lesenswert?

Flipper schrieb:
> Der gesuchte Algorithmus heist: Travelling Salesman

Aus irgendwelchen Gründen soll man den jetzt "Travelling Salesperson" 
nennen...

von Arc N. (arc)


Lesenswert?

Lord of Lightning schrieb:
> Hallo zusammen,
>
> ich hätte da ein Problem: Ich habe ein Funknetz, bei dem alle Teilnehmer
> (Knoten) bekannt sind.

Es sind alle "Adressen"/MAC-Adressen o.ä. vorab bekannt? Die Topologie 
des Netzes?

> Nun wird ein Knoten als Basisstation definiert.
> Nun möchte ich das Netzwerk durchsuchen und für jeden Knoten seinen
> erreichbaren Nachbarn bestimmen (die Qualität der Verbindung wird über
> die RSSI bestimmt).

Die Basisstation muss zumindest wissen an wen sie die Pakete schicken 
soll und da jeder Knoten als Basisstation definiert werden kann (?) 
kennt zumindest jeder Knoten seine erreichbaren Nachbarn...
Falls bestimmt werden soll, ob ein Knoten einen bestimmten anderen 
erreichen kann: Erreichbarkeitproblem (es kann bspw. passieren das ein 
Knoten einen anderen sieht aber nicht hört...)

Ansonsten stellt sich die Frage wie groß der Graph werden kann...
Oder was passiert wenn die alle hintereinander "hängen" a -> b -> c -> 
... -> n oder jeder jeden sieht...

Vielleicht ein interessantes Paper das ein paar Ideen liefert:
"Tree-Based Data Broadcast in IEEE802.15.4 and ZigBee Networks",
Mobile Computing, IEEE Transactions on, 2006
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.417.2657&rep=rep1&type=pdf

: Bearbeitet durch User
von tz (Gast)


Lesenswert?

Tiramisu schrieb:
>> Wie heißt dieser Algorithmus?
> Spanning Tree und eine Loesung des im Post
> beschriebenen (verteilten) Netzwerkproblems
> waere OSPF.

OSPF implemtiert Dystra

von ah8 (Gast)


Lesenswert?

Beim Travelling Salesman (engl.) oder Königsberger Brückenproblem 
(dtsch.) geht es darum, einen Pfad in einem Graphen zu finden, der jeden 
Knoten einmal berührt und das nach Möglichkeit genau einmal. Ist das 
wirklich das, worum es hier geht? Geht es nicht vielmehr darum, zu jedem 
beliebigen Koten den günstigsten Pfad von oder zur Basisstation zu 
finden? In diesem Fall würde ich die priorisierte Breitensuche 
bevorzugen: Man bestimmt, ausgehend vom Startknoten, alle unmittelbar 
erreichbaren Nachbarknoten und sortiert sie entsprechend der Kosten, die 
es verursacht, sie zu erreichen, in eine Warteschlange ein. Dann wird 
der erste, also der bisher günstigste Pfad aus der Warteschlange 
entfernt und der Vorgang mit dem Koten, zu dem er führt, wiederholt. 
Pfade, die mindestens einen Knoten mehrfach enthalten, werden ignoriert. 
Der Vorgang wird wiederholt, bis ein Pfad zu dem gewünschten Knoten am 
Anfang der Warteschlange erscheint oder die Warteschlange leer ist. 
Dieser Algorithmus  terminiert garantiert, auch in zyklischen Graphen, 
und liefert stets den günstigsten Pfad (bzw. einen der günstigsten, 
sofern es mehrere gleichwertige gibt).

von S. R. (svenska)


Lesenswert?

Um die kürzesten (besten) Wege von einem ausgezeichneten Knoten zu allen 
anderen Knoten eines Graphen zu berechnen, eignet sich Dijkstras 
Algorithmus sehr gut.

Oder suchst du nach einem Algorithmus, um den Graphen zu ermitteln?

von Udo S. (urschmitt)


Lesenswert?

Stryker schrieb:
>> Der gesuchte Algorithmus heist: Travelling Salesman
>
> Aus irgendwelchen Gründen soll man den jetzt "Travelling Salesperson"
> nennen...

Muss man jetzt "mankind" auch in "personkind" umbenennen? :-)

von Oliver (Gast)


Lesenswert?

Lord of Lightning schrieb:
> Wie heißt dieser Algorithmus?

Einfach machen?

Einfach jeden erreichbaren Knoten vom Basisknoten daraufhin überprüfen, 
ob er ein direkter Nachbarknoten ist. Das dann für jeden Nachbarknoten 
wsiederholen (schon bekannte Nachbarknoten überspringen). Kann man 
rekusiv machen, muß man aber nicht.

Oliver

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.