ダイクストラのアルゴリズムは、この信号ルーティング問題の適切な解決策ですか?


12

私は、統合された視聴覚システム用の信号管理およびルーティングモジュールの開発を進めており、さまざまな信号配信ネットワークにわたって可能な限り柔軟になるように設計しています。モジュールの目的は、多数のスタックマトリックススイッチャー1を経由するルーティングを処理し、必要なフォーマット変換を処理することです。

この時点で検討した最良の解決策は、ネットワークをスイッチャーでサポートされている各信号タイプの個別の頂点を持つグラフにマッピングし、フォーマット変換を処理するビデオプロセッサを表すノードを介して結合することです。

グラフの例

色は信号形式を表します。 ラウンドノードは、スイッチャー、ソース、またはシンクのいずれかです。 スクエアノードは、形式変換を実行するビデオプロセッサです。

そこから、ダイクストラのアルゴリズムの実装を使用して、入力Xから出力Yを取得するために形成する必要があるパスを特定できます。これにより、すべてのスイッチャーおよびプロセッサーの入力/出力構成に関するデータを渡すことができます。モジュールはそれに応じて適応します。

これは適切な解決策ですか、それとも調査する価値がある代替アプローチがありますか?

1別名「クロスバースイッチ」、1対多の接続をサポートするM入力x N出力のビデオルーター。各物理デバイスは複数の信号形式を処理でき、形式変換を実行できる場合とできない場合があります。

編集: PéterTörökが述べたように、グラフは必ずしもツリーである必要はありません。図はアイデアを説明するための簡単な例です。「実世界」に実装すると、エッジの重みで表現することを計画していたさまざまなレベルの定義(DVI> VGA>コンポーネント>コンポジット)を提供する複数のパスが存在する場合があります。

編集2:指向性が示され、2つの信号タイプで構成されるネットワークを示す、もう少し包括的な例です。最初の例は、マトリックスルーティング/入力選択を制御するために必要なデータを提供するため、デバイスの各入力と出力が個別のノードとして定義されるようにわずかに変更されました。 例2-2つの信号タイプ、スタック型スイッチャー


エッジの重みを乗法にするつもりですか?
ピーターテイラー

添加剤。これであるという理論により、信号経路の定義が高いほど、重み付けが低くなるように定義できます。フォーマット変換を実行するノードを接続するエッジには、非変換ノードを接続するエッジに割り当てられたものよりも高い重みが与えられます。これは、可能であれば、ネイティブ形式で信号をルーティングし、必要な場合にのみ形式変換(および関連する信号劣化と機器利用)を伴います。
キムバージェス

1
@PeterTaylor:それらが乗法的であるかどうかは重要ですか?これらは、対数を適用することにより、加算的(正である場合)とまったく同じセマンティクスを持ちます。それともその背後にあるより複雑なものですか?
ハービー

@herby、良い点は、それを考えていなかった。恥ずかしそうに頭を吊るす
ピーターテイラー

回答:


4

これはツリーです。ダイクストラはO(n ^ 2)過剰です。単純なO(n)幅優先探索で十分です。

編集:少なくとも2度の任意のノードでBFSを開始します。

EDIT2:グラフはツリーであることが保証されていないため、ダイクストラを使用します。少し最適化する場合は、まずグラフを次数1のすべての頂点(「パス」は自明です)で「ストリップ」できます。それは、彼らの元隣人を除去するために次数1を取得し、残り(正確に「非ツリー」部分である)でダイクストラを実行します。

さらに、すべてのノードから他のすべてのノードへのパスが必要だと思いますか?Dijsktraのアルゴリズムは、1つから他のすべてへのパスのみを実行します。たぶん、ストリッピングされた残りの部分でFloyd-Warshallアルゴリズムを実行します。もちろん、トポロジが非常に動的である場合は、アドホック(ストリッピングおよび)ダイクストラを実行することをお勧めします。


2
上記のグラフは単純化された例であり、実際には2つのノード(形式)の間に複数の代替パスが存在する場合があります。つまり、常にグラフであるとは限りません。
ペテルトレック

適切に実装された場合、ダイクストラのアルゴリズムもO(n)になりますが、より複雑でまだやり過ぎです。
ピーターテイラー

@PéterTörök:その場合、はい。質問者だけが確実に知っています。しかし、それがツリーの場合、bfsで十分です(そして非常にシンプルです)。
ハービー

@PeterTaylor:興味深い。ソースはありますか?
ハービー

@PéterTörökは正しいです。編集された質問を参照してください。
キムバージェス

2

問題のグラフを検索するために、A *(ダイクストラのアルゴリズムのより一般的な形式)を使用できる場合があります。コメントで重みのコストについて言及しています。

添加剤。これであるという理論により、信号経路の定義が高いほど、重み付けが低くなるように定義できます。フォーマット変換を実行するノードを接続するエッジには、非変換ノードを接続するエッジに割り当てられたものよりも高い重みが与えられます。これは、可能な場合はネイティブ形式で信号をルーティングし、必要な場合にのみ形式変換(および関連する信号劣化と機器利用)を伴います

私がそれを正しく理解していれば、開始からゴールまでの最低コストのパスパスを見つけることができます。各ノードに目標に対する実際のコストと推定値(ヒューリスティック)の両方を提供する場合(許容範囲と一貫性の両方)、A *は最適なソリューションを提供することが保証されます。あなたの問題をどれだけよく理解しているかにもよりますが、やり過ぎかもしれません。


+1:同様に、IIRC、ヒューリスティックは、最適なパスを保証するために、実際のコストよりも悪いコストを常に推定する必要があります。最悪の場合、ヒューリスティックを正しく取得できない場合は、ヒューリスティックから0を返すだけで、ダイクストラのアルゴリズムが得られます。
スティーブンエバーズ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.