(「マッピングアルゴリズム」と「1対1アルゴリズム」を検索した)適切な用語が何であるかわからず、より単純な(より標準的な)定式化を考えることはできません。
私は2つのセットを持っています、
A B C D E
と
L M N O P
そして私は1対多の地図を与えられます、例えば
A --> L, M, N, P
B --> M
C --> M, N, O
D --> N
E --> O, L
マップの1対1の「サブセット」がすべてのアイテムをカバーできるかどうかを判断する最も単純および/または最速のアルゴリズムは何ですか?たとえば、上記のような「サブセット」は存在します。
A --> P
B --> M
C --> O
D --> N
E --> L
サブセットマップ自体を知る必要はなく、存在するかどうかだけを知る必要があります。
「ブルートフォース」アルゴリズムは明らかです。わずかな改善は、必要なマッピングを満たすアイテムがない場合は常に深さ優先でバックトラックすることです。別の改善は、マッピングの昇順、たとえば、最初B --> M
、、、D --> N
次に2番目E --> O, L
などです。
しかし、これらはすべて、ブルートフォース検索の原始的な変形のように見えます。より良いアルゴリズムはありますか?マップを行列に変換したり、答えを決定するある種の縮小を行ったりするなど、線形システムを使用してこのような問題を解決するという漠然とした記憶がありますが、これを理解するには線形代数を再学習する必要があります。多分SOは私をより速く助けることができます。
ありがとう!