N人とM個のアイテムがあるとします(人が特定のアイテムを持っている場合、通常は1個しか持っていません)。例えば、
人3はアイテムEを持っていて、Gを望んでいます
.。
あなたはその考えを理解します。つまり、これは基本的に需要と供給のマッチングの問題であり、これを人とアイテムのマトリックスとして表すと、非常にまばらなものになります。
だから私の質問は次のようになります:
何かアドバイスをいただければ幸いです。
スパース行列の代わりに、 有向グラフ を使用します。ここで、各ノードは人であり、各リンクは潜在的なトランザクションです。
グラフの各サイクルは潜在的な取引です。詳細については、 有向グラフでサイクルを検出するための最良のアルゴリズム を参照してください。
問題を表す良い方法は、 2部 、 有向 グラフとして表現することだと思います。
グラフを作成するには、次のようにします。
あなたの目標は、単にこのグラフで回路を見つけることです。
これは、あなたの質問を「2部有向グラフで回路を見つけるにはどうすればよいですか?」と言い換えることができることを意味します。これらの質問と回答で説明されているアルゴリズムが役立つ場合があります。
(回路とサイクルの違いは、回路が同じノードに複数回アクセスします(ただし、同じarrowを複数回使用することはできません)が、サイクルは各ノードに1回しかアクセスできません。問題のコンテキストでは、サイクルとは、各人が1つの取引にのみ参加し、各アイテムが1つの取引にのみ参加することを意味します。)