理想的で仮想化されたネットワークの使用をモデル化するためにどのようなデータ構造を使用するかを考えています。
私のシナリオでは、互いに敵対的な多数のユーザーが、潜在的な接続がすべてわかっているコンピューターのネットワークを形成しようとしています。ただし、あるユーザーが接続する必要があるコンピューターは、別のユーザーが接続する必要があるコンピューターとは異なる場合があります。ユーザー1はコンピューターA、B、Dを接続する必要があり、ユーザー2はコンピューターB、C、Eを接続する必要がある場合があります。
NCTM Graph Creatorの助けを借りて生成された画像
このコアは、ノードがコンピューターを表し、エッジがイーサネットケーブルを表す、無向の循環グラフになると思います。ただし、シナリオの性質上、隣接リストと隣接行列を除外するいくつかの珍しい機能があります(少なくとも、重要な変更はありません)。
- エッジは使用が制限される場合があります。つまり、あるユーザーが特定のネットワーク接続を取得した場合、他のユーザーはその接続を使用できません
- この例では、緑のユーザーはコンピューターAに接続できない可能性がありますが、赤のユーザーはBをEに接続していますが、それらの間に直接リンクはありません
- 場合によっては、ノードの特定のペアが複数のエッジで接続されます
- この例では、DからEまでの2本の独立したケーブルがあるため、緑と青のユーザーは両方ともこれらのマシンを直接接続できました。ただし、赤はそのような接続を確立できなくなりました
- 2台のコンピューターが複数のケーブルで接続されている場合、各ユーザーが所有するケーブルは1本のみです
このグラフでは、次のようないくつかの操作を行う必要があります。
- 特定のユーザーに対して特定のコンピューターのペアが接続されているかどうかを判断する
- 特定のユーザーがターゲットコンピューターに接続するための最適なパスを特定する
- 特定のユーザーの最大遅延コンピューター接続(つまり、分岐のない最長パス)を識別する
最初に考えたのは、単純にすべてのエッジのコレクションを作成することでしたが、検索にはひどいものです。今考えられる最善の方法は、隣接リストを変更して、リスト内の各アイテムにエッジの長さだけでなく、コストと現在の所有者も含まれるようにすることです。これは賢明なアプローチですか?スペースが問題にならない場合、単一のグラフではなく、グラフの複数のコピー(ユーザーごとに1つ)を作成するのが妥当でしょうか?