A
とB
N
次元ベクトル(N=10
)、|B|>=|A|
(|A|=10^2
、|B|=10^5
)のセットです。類似度sim(a、b)はドットプロダクト(必須)です。タスクは次のとおりです。各ベクトルに対してA
のa
を検索すると、B
にベクトルb
があり、すべてのペアの類似度の合計が最大になるように検索されます。最適化問題 - ベクトル・マッピング
私の最初の試みは、貪欲アルゴリズムた:B
- が最も類似度の高いペアを見つけるとAからのペアを削除
- リピート(1)Aが空になるまで
しかしこのような貪欲アルゴリズムは、この場合最適ではない。
a_1=[1, 0] a_2=[.5, .4] b_1=[1, 1] b_2=[.9, 0] sim(a_1,b_1)=1 sim(a_1,b_2)=.9 sim(a_2,b_1)=.9 sim(a_2, b_2)=.45
アルゴリズムの戻り値[a_1,b_1]
および[a_2, b_2]
,ss=1.45
であるが、最適な溶液収率はss=1.8
である。
この問題を解決するには効率的なアルゴリズムがありますか?ありがとう
適切であれば、宿題としてタグ付けしてください.... –
直感では、* O(| A || B |)*最悪の場合よりも速くアルゴリズムを見つけることはできません。 –
@Oli Charlesworthあなたはこの問題を誤解しているかもしれません。 *正しい* 'O(| A || B |)'アルゴリズムはここで大いに歓迎されるでしょう:) –