web-dev-qa-db-ja.com

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

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

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

Example graph

色は信号形式を表します。ラウンドノードはスイッチャー、ソース、またはシンクです。正方形ノードはビデオですフォーマット変換を実行するプロセッサ。

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

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

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

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

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

12
Kim Burgess

これは木です。ダイクストラはO(n ^ 2)過剰です。ささいなO(n)幅優先検索で十分です。

編集:次数が2以上の任意のノードでBFSを起動します。

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

さらに、すべてのノードから他のノードへのパスが必要だと思いませんか?ダイスクトラのアルゴリズムは、1つから他のすべてへのパスのみを実行します。おそらく、剥ぎ取った休符でフロイドワーシャルアルゴリズムを実行します。もちろん、トポロジーが非常に動的な場合は、アドホックで(ストリッピングと)ダイクストラを実行するのが最善です。

4
herby

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

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

私がそれを正しく理解していれば、最初から目標までの最小コストのパスパスを見つけたいと思います。各ノードに実際のコストと目標への見積もり(ヒューリスティック)の両方(つまり、許容可能で一貫性がある)を提供する場合、A *が最適なソリューションを提供することが保証されます。問題の理解度によっては、やり過ぎかもしれません。

2
jdt141