配列:arr
組み合わせ限界値:x
上記2つが与えられた時、
arrの組み合わせがxに最も近くなる組み合わせを計算するいい方法はないでしょうか?
arrには数値のみが格納されます。
※組み合わせ限界値について、1つ抜けていたので補足します。
配列の組み合わせ<=組み合わせ限界値
となるような結果を求める計算になります。
例1:
配列
[1,2,3,4,5]
組み合わせ限界値
3
この時`1,2`の組み合わせと`3`2つの組み合わせを検索出来ればよい。
例2:
配列
[6,10,100,8,4]
組み合わせ限界値
111
この時`10,100`の組み合わせと`6,100,4`2つの組み合わせを検索出来ればよい。
可能であれば組み合わせに利用した値のキー(PHPなので)も保持出来ればより良いです。
コメント(5件)
また,arrとxの具体例を書いて下されば,質問文の意味が理解されやすいと思います。
宜しくお願い致します。
要素の和が指定値(限界値)以下となる組合せという事なんですね。
どのような業界(学界)で必要となるものかは知りませんが、ライブラリは該当の界隈でお尋ねの方が良いのではありませんか?
あまり一般的なものだとは考え難いので。
(ただの勉強不足かもしれませんが...)
順列、組合せを求めるライブラリの改造で対応できるかもしれません。
組合せの条件が決まっているので、総当たりではなく途中で走査を打ち切れると思いますが、・元の配列の要素数が多い
・配列の要素に小さい値が多く指定値が大きな値
等の場合、かなり重い計算になるのは必至ですね。
「重量の異なる複数の商品を、特定のコンテナで運ぶとする。
商品の重量は配列arrに格納されている。
コンテナの最大積載容量はxであり、一度に運ぶ貨物の合計重量がこの値を超えてはならない。
この時、コンテナ内をできるだけ満杯にするような商品の選び方をアルゴリズムとして実装せよ。」
こういう処理要件であれば、キャパシティが関係する場合は、いつでも必要になりますよね。
テーブルや部屋に団体客を効率的に案内する場合とか…。
という事ですね?
(※PHPが出てくる時点で、まず学術系の話では無いなと…。)
100~200ポイント付けて質問を投稿し直せば、
すぐに回答がついて誰か実装してくれるでしょう。
私が実装してもいいし。
ただし質問文の内容は、コメント欄で突っ込まれている通り、分かりやすく書き換えて投稿する必要がありますけど。