1

サイクルがある場合とない場合がある、重み付けされていない有向グラフがあります。ノードのセットが与えられたので、与えられたノードとそれらが接続されるような最小量のノードを持つグラフを返す必要があります。新しいエッジを作成できないため、既存のエッジを使用する必要があります。

うまくいけば、これらの写真はそれを明確にします。グラフから始まり、

ここに画像の説明を入力

ノードc、f、およびgを持つグラフが必要だとしましょう。関数はこのグラフを返します ここに画像の説明を入力

ただし、もう1つ条件があります。各エッジには、必須と呼ばれるブール変数があります。これが true に設定されている場合、このエッジと対応するノードもグラフに含める必要があります。

説明する別の図を次に示します。黒いエッジは必要ありませんが、赤いエッジは必要です。含めるノードとして a と c が与えられたとします。

ここに画像の説明を入力

したがって、A->C であるグラフを返す代わりに、これを返します。

ここに画像の説明を入力

要点をさらに明確にするために、b と c を含むグラフが必要な場合、そのエッジが必要であるため、そのグラフも返されます。

このグラフを返すにはどうすればよいでしょうか? 循環を含むグラフが返されないようにしたいのですが、循環のエッジがすべて必要としてマークされている可能性があるため、常に可能であるとは限りません。

私が最初に考えたのは、必要なエッジを維持したままグラフのコピーを作成し、ばらばらなグラフをつなぎ合わせようとすることでした。しかし、グラフをつなぎ合わせようとするすべての試みの間に、最小のグラフではないことを示す反例を見つけることができました。

4

1 に答える 1

1

最初の例で意図した出力には、ノード e が含まれており、そこから他のすべてのノードに到達できますか? それとも連結性が弱い(エッジの向きは関係ない)ということですか?2番目のケースだと思います(A、B、Cの例から判断すると)、次のことができます

  1. エッジが向けられていることを無視するだけです(線形時間)、
  2. 「必要な」エッジを縮小します (線形時間)。
  3. 必要なポイントのサブセットでペアワイズ最短パスを計算します(O(|V|³) が、r が必要なポイントの数である O(r|V|²) にそれを押し下げることができると思います)。
  4. 必要な点 (O(r²))で最小全域木を見つける

それはあなたが望んでいたものですか?

于 2012-06-27T05:26:11.110 に答える