タイトル : Re^6: 組み合わせ合計探索 投稿日 : 2023/02/10(Fri) 16:38 投稿者 : たけし
> > > > > ペアとは限りませんし、ひとつだけのデータで完了することもありません。 > > > ・数値リストの総データ数が、最大50個というのは分かりました。 > > > ・数値リストの総データ数は、最小何個でしょうか。 > > 1の時もあります。 > そうすると、『ひとつだけのデータで完了することもありません』とは、どういう意味でしょうか。 > ここでいう「ひとつだけのデータ」とは、何を指しているのでしょうか。 次のように検索した結果が1件の場合もあります。 リスト ------ 57 > > > ・リスト内から、同じ項目が複数回、重複して選ばれても良いのでしょうか? > > リスト内に同じ値は重複することもあります。 > > 個々に分けて算出し最善の結果を求めます。 > いえ、リスト内の値について聞いているのではなく、リストから何を選ぶかという話です。 > > 「同じ項目が複数回、重複して選ばれる」というのは、 > たとえば値リストに a, b, c という 3 つの値があったときに、 > a + c や a + b + c だけでなく、 > a + a や、a + b + c + c を認めるか、という意味です。 > > > だからこそ、 > > > ・リスト内から値を選んで合計する際に、何個のデータを選べるのでしょうか。 > > 答えが出るまで求めます。ダメなときはメッセージで伝えます。 > このやりとりで、最大回数を聞いてみた次第です。 > > たとえば重複選択を許可した場合、値リストに 10 個の数値があり、 > その最小値を 25 回抽出しら設定値に合致した…というケースも許容されます。 > > 一方、リスト内の値は重複するが、重複選択は許可しない、となれば、 > 抽出回数は「1 以上、リスト内容の要素数以下」となるわけで。 > > 要素数以下ではなく『答えが出るまで求める』ということは、重複選択ありということでしょうか? > > > > 結果だけが欲しいです。 > その結果は、どのように表示するのでしょうか? > > たとえば参考元の Excel にあるように、何番目の項目が選択されたのかを > 表示することを想定しておられますか? > (重複選択するなら、「○」の代わりに「選択回数」を併記するなど) > > それとも、合計値の一覧さえ得られれば、どれを選択したのかという情報は不要ですか? > これは、値リストの管理に添字情報が必要になるのか否か、という点で重要です。 > > > もしも「どれを選択したのか」まで情報として必要となる場合、 > それを保持するためのデータ管理の仕方も当然変わってきます。 > > > 話を単純化するため、条件値を少し小さくして、 > 値リストの中身が 3 項目(A, B, C)しかない場合を考えてみましょう。 > ここでは同一値を含むリストで (A, B, C) = (15, 27, 27) だったとします。 > > ここで、[設定値] を 60 とすると、求めるべき範囲は 40以上60以下と定まります。 > リストからの重複選択を許す場合、得られる組み合わせとしては > 60 = 15 を4回 > 57 = 15 を2回と 27 を1回 > 54 = 27 を2回 > 45 = 15 を3回 > 42 = 15 を1回と 27 を1回 > の 5 パターンですね。ここまでは良いでしょうか。 説明不足で大変申し訳ありません。 寸法に重複データはありますが 番号を重複して合計値を求めることはありません。 ※番号001を数回選択することはできません。 ※番号001と005の寸法60(合計:120)を同時に選択できます。 例えば設定値を590とした場合 検索結果は次のようになります。 詳細値:60, 500, 25 合計値:585 ◆リスト 番号 寸法 -------- ----- 001 60 002 57 003 54 004 45 005 42 006 500 007 1000 005 60 006 25 -中略- 050 57 > > 以前vb.net以外のソフトで同じような処理を作りました。 > 今回選択しているのは、VB2010 という、結構古めの言語なんですよね。 vb関係でこのような処理を作成するのは初めてでして 前回行った方法は必要なデータをいったんデータベースへ登録して データをselect文でloopさせる方法でした 番号 寸法 -------- ----- 001 60 002 57 003 54 004 45 005 42 006 500 007 1000 005 60 006 25 -中略- 050 57 番号の001と002〜050までを加算して設定値と比較 答えが出ない場合は 番号の002と001〜050(002除く)までを加算して設定値と比較 答えが出ない場合は 番号の003と001〜050(003除く)までを加算して設定値と比較 のようなイメージです。 説明不足なところがありますが 把握できましたでしょうか。 |