tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル 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除く)までを加算して設定値と比較
のようなイメージです。

説明不足なところがありますが
把握できましたでしょうか。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。