グラフ理論の語彙の知識が少ないことをお許しください。
問題を一般的な英単語でしか説明できません。誰かが私を正しい方向に向けたり、検索する用語を教えてくれるかもしれません。
この問題は、ビジュアル プログラミング言語の実装の一部として発生しました。頂点は関数/メソッドであり、エッジは関数間でデータを転送します。現在、次の問題があります。
Collection< TItem >型の頂点 A の出力をTItem型の頂点 B の入力に接続することができます。次に、 TItem型の頂点 B の出力を、Collection< TItem >型の入力頂点 C に出力します。これは、頂点 B の周りにforeach関数をラップして、B の関数を A からのコレクション内の各項目に適用し、新しい項目をコレクションとして C の入力に出力する必要があることをコンパイラに伝えます。したがって、A から B へのエッジは多対 1 接続で、B から C へは 1 対多です。
実際の問題は、1対多の接続で囲まれている/分離されている(有向)サブグラフを見つけるアルゴリズムは何ですか? コンパイラがこの特定のサブグラフの周りに foreach 関数をラップするように? この図で問題を視覚化しようとしました: