Ist der Dijkstra-Algorithmus eine geeignete Lösung für dieses Signalrouting-Problem?

12

Ich bin dabei, ein Signalmanagement- und Routing-Modul für ein integriertes audiovisuelles System zu entwickeln und entwerfe es mit der Absicht, über verschiedene Signalverteilungsnetze hinweg so flexibel wie möglich zu sein. Die Absicht des Moduls ist es, das Routing über eine Anzahl von gestapelten Matrixschaltern 1 und die erforderliche Formatkonvertierung zu handhaben.

Die beste Lösung, die ich an dieser Stelle untersucht habe, besteht darin, das Netzwerk auf einen Graphen mit diskreten Eckpunkten für jeden von den Switchern unterstützten Signaltyp abzubilden, die dann über Knoten verbunden werden, die die Videoprozessoren darstellen, die die Formatkonvertierung handhaben.

Beispiel Grafik

Farben repräsentieren Signalformate. Runde Knoten sind entweder Switcher, Quellen oder Senken. Quadratknoten sind Videoprozessoren, die eine Formatkonvertierung durchführen.

Von dort aus kann ich mit einer Implementierung des Dijkstra-Algorithmus den Pfad identifizieren, der gebildet werden muss, um die Eingabe X zur Ausgabe Y zu bringen. Dies sollte die Übergabe der Daten über die Eingabe- / Ausgabekonfiguration aller Switches und Prozessoren ermöglichen und das Modul entsprechend anpassen.

Ist dies eine angemessene Lösung oder gibt es einen alternativen Ansatz, der möglicherweise untersucht werden sollte?

1 auch als "Crossbar-Switch" bezeichnet, ein Video-Router mit M Eingängen und N Ausgängen, der 1: 1-Verbindungen unterstützt. Jedes physikalische Gerät kann mehrere Signalformate verarbeiten und ist möglicherweise nicht in der Lage, eine Formatkonvertierung durchzuführen.

edit: Wie von Péter Török erwähnt, wird die Grafik nicht unbedingt ein Baum sein, das Diagramm ist ein einfaches Beispiel, um die Idee zu veranschaulichen. Bei der Implementierung in der "realen Welt" können mehrere Pfade existieren, die unterschiedliche Definitionsebenen bieten (DVI> VGA> Component> Composite), die ich mit Kantengewichtung darstellen wollte.

edit 2: Hier ist ein etwas umfassenderes Beispiel mit angegebener Richtwirkung und einem Netzwerk, das aus zwei Signaltypen besteht. Das erste Beispiel wurde geringfügig geändert, sodass jeder Ein- und Ausgang eines Geräts als diskreter Knoten definiert ist, da hierdurch die zur Steuerung des Matrixroutings / der Eingangsauswahl erforderlichen Daten bereitgestellt werden. Beispiel 2 - zwei Signaltypen, gestapelte Umschalter

Kim Burgess
quelle
Beabsichtigen Sie, dass Kantengewichtungen multiplikativ sind?
Peter Taylor
Zusatzstoff. Die Theorie, die dies ist, erlaubt es, es so zu definieren, dass die Gewichtung umso niedriger ist, je höher die Definition des Signalpfades ist. Kanten, die Knoten verbinden, die eine Formatkonvertierung durchführen, würden dann eine höhere Gewichtung erhalten als Kanten, die Nichtkonvertierungsknoten verbinden. Dies würde das Signal wenn möglich in seinem nativen Format weiterleiten, wobei nur bei Bedarf eine Formatkonvertierung (und die damit verbundene Signalverschlechterung und Geräteauslastung) erforderlich ist.
Kim Burgess
1
@ PeterTaylor: Wäre es wichtig, wenn sie multiplikativ wären? Sie haben genau die gleiche Semantik wie additive (vorausgesetzt, sie sind positiv), indem sie einen Logarithmus anwenden. Oder steckt etwas Komplizierteres dahinter?
Herby
@herby, guter Punkt, hatte nicht daran gedacht. Kopf hängt in Schande
Peter Taylor

Antworten:

4

Dies ist ein Baum, Dijkstra ist O ( n ^ 2 ) Overkill. Triviale O ( n ) Breitensuche ist ausreichend.

BEARBEITEN: Starten Sie das BFS in einem beliebigen Knoten mit mindestens zwei Graden.

EDIT2: Da das Diagramm nicht unbedingt ein Baum ist, verwenden Sie Dijkstra. Wenn Sie ein wenig optimieren möchten, können Sie zuerst alle Scheitelpunkte des ersten Grades (für sie ist der Pfad trivial) einschließlich dieser "streifen" Das passiert, um Grad eins zu erreichen, weil man seine Ex-Nachbarn entkleidet und die Dijkstra für den Rest erledigt (was genau der "Nicht-Baum" -Teil ist).

Außerdem würde ich sagen, Sie möchten Pfade von jedem Knoten zu jedem anderen, nicht wahr? Dijsktras Algorithmus führt nur Pfade von einem zu allen anderen aus. Vielleicht tun Floyd-Warshall-Algorithmus auf dem Rest abgestreift. Wenn die Topologie sehr dynamisch ist, ist es natürlich am besten, die (Abisolier- und) Dijkstra ad hoc durchzuführen.

herby
quelle
2
Ich glaube, das oben gezeigte Diagramm ist ein einfaches Beispiel (falls vorhanden), und im wirklichen Leben kann es häufig mehrere alternative Pfade zwischen zwei Knoten (Formaten) geben, dh Sie können möglicherweise nicht davon ausgehen, dass das Diagramm immer ein Baum ist.
Péter Török
In geeigneter Weise implementiert, wäre Dijkstras Algorithmus auch O ( n ), obwohl dies komplizierter und immer noch übertrieben ist.
Peter Taylor
@ PéterTörök: In diesem Fall ja. Nur der Fragesteller weiß es mit Sicherheit. Aber wenn es ein Baum ist, ist bfs genug (und ganz einfach).
Herby
@ PeterTaylor: Interessant. Irgendeine Quelle, bitte?
Herby
@ PéterTörök ist richtig. Siehe bearbeitete Frage.
Kim Burgess
2

Möglicherweise können Sie A * (die allgemeinere Form des Dijkstra-Algorithmus) zum Durchsuchen des betreffenden Diagramms verwenden. In Ihrem Kommentar erwähnen Sie die Kosten für die Gewichtung:

Zusatzstoff. In diesem Fall kann theoretisch so definiert werden, dass die Gewichtung umso geringer ist, je höher die Definition des Signalwegs ist. Kanten, die Knoten verbinden, die eine Formatkonvertierung durchführen, würden dann eine höhere Gewichtung erhalten als Kanten, die Nichtkonvertierungsknoten verbinden. Dies würde das Signal wenn möglich in seinem nativen Format weiterleiten, wobei nur bei Bedarf eine Formatkonvertierung (und die damit verbundene Signalverschlechterung und Geräteauslastung) erforderlich ist

Wenn ich es richtig verstehe, möchten Sie den Pfad mit den niedrigsten Kosten vom Anfang bis zum Ziel finden. Wenn Sie jedem Knoten sowohl die tatsächlichen Kosten als auch eine Schätzung (heuristisch) für das Ziel bereitstellen (die zulässig und konsistent ist), bietet A * garantiert eine optimale Lösung. Es könnte jedoch übertrieben sein, abhängig davon, wie gut ich Ihr Problem verstehe.

jdt141
quelle
+1: Außerdem, IIRC, muss die Heuristik immer Kosten schätzen, die schlechter als die tatsächlichen Kosten sind, um einen optimalen Pfad zu gewährleisten. Im schlimmsten Fall, wenn Sie die Heuristik nicht richtig einstellen können, geben Sie einfach 0 aus der Heuristik zurück und Sie haben den Algorithmus von dijkstra.
Steven Evers