テーブルに約 2M のレコードが格納されています。各レコードには、数と約 5K のブール属性があります。
ということで、表はこんな感じ。
3, T, F, T, F, T, T, ...
29, F, F, T, F, T, T, ...
...
-87, T, F, T, F, T, T, ...
98, F, F, T, F, F, T, ...
そしてSUM(A, B)
、Ath 属性と Bth 属性が真である数の合計として定義しました。たとえば、上記のサンプル データから: SUM(1, 3) = 3 + ... + (-87)
1 番目と 3 番目の属性が 3 と -87 の T であるため
3, (T), F, (T), F, T, T, ...
29, (F), F, (T), F, T, T, ...
...
-87, (T), F, (T), F, T, T, ...
98, (F), F, (T), F, F, T, ...
AndSUM()
は任意の数のパラメータを取ることができます: SUM(1)
andSUM(5, 7, ..., 3455)
はすべて可能です。
L
最大の結果がSUM(L)
得られる属性のリストを見つけるためのスマートなアルゴリズムはありますか? 明らかに、この大規模なデータ セットに対してブルート フォースは実行できません。
最大数だけでなく、上位 N 個のリストを見つける方法があれば素晴らしいと思います。
EDIT ブルートフォースなしでは答えを見つけることはできないようです。「良い見積もり」を見つけるために質問を変更した場合、それを行う良い方法はありますか? または、L のカーディナリティが 10 などに固定されていると言ったら、L を計算する方法はありますか? どれでも嬉しいです。