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

タイトル Re^3: 組み合わせ合計探索
投稿日: 2023/02/09(Thu) 09:53
投稿者魔界の仮面弁士
> > > hhttps://hatenachips.blog.fc2.com/blog-entry-430.html
> > 上記では『値リストがあって、そのすべての組み合わせの中から選ぶ』ものでしたが、
> > 今回のは「個数リストがあって、その個数だけ(何かを)ランダムに選ぶ」…ということですか?
> 個数は意識していなくて、

元の設問は、『[個数]よりランダムに選んだ合計値』と書かれていましたが、
実際には『個数は意識していない』と…?

となると、個数 = 12 が選ばれたからと言って、12 個の値を合計していく…といった課題では無さそうですね。


どうやら、当初の質問の [個数] という言葉のままだと、意味が混乱してしまいそうなので、
参考サイトの VBA 版にあるように、[数値] のリストと読み替えさせてもらいますが、不都合はありますか?


> リストの中から合計した値が、[設定値]と同じか、または[設定値]-20以内の範囲の
> 値を求めたいと思っています。合計した全ての値と合計値を表示したいです。
> [設定値]より大きい場合はNGです。
参考サイトにあるものは、すべての組み合わせの中から、最適解(合計値が一致する組み合わせ)を
選ぶという問題でしたが、今回はそうではなく、「ランダムに選んだ合計値」が前提なのですよね?

ランダムに選ぶという点について、もう少し具体的に説明していただけないでしょうか。


また、日本語で「以内」という言葉を使った場合、文脈によっては
以上/以下の意味なのか、超過/未満の意味なのかがブレることがあるので、
この点ももう少し事前確認しておきたいところ。例えば設定値が 3000 だった場合、
「2980 以上 3000 以下」とするのか「2980 超過 3000 以下」とするのか…。

ひとまず、以上/以下という意味で良いでしょうか? (以内は、基準点を含むことが多いので)


> リストにある最大桁数は4桁になります。
当初の質問とは異なる課題を提示されているように聞こえるのですが…何の冗談でしょう?

>> 設定値:88792
>>
>> 個数
>> -----
>> 19777
>> 14823
>> 13177
>> 37885
>> 22653
>> 28474
>> 29564
>> 26871
>> 23844
>> 14116
>> 17500
>> 24062
>> 23644
>> 17717
>> 25162
>> 19788
>> 29762
>> 25099
>> 28935
>> 22234
>> 30377
>> 10081
>> 24336
>> 16020
>> 16745
>> 24100
>> 28340
>> 24825
>> 13382
>> 19893
>> 28700


> 最小桁数は2桁です。
値はすべて自然数ですか? それとも負の整数なども含まれますか?


> > ランダムに、どこから、何個の値の組み合わせを、何回取り出して比較するのでしょうか。
> リストにある総データ数は多くても50以内です。
> ペアとは限りませんし、ひとつだけのデータで完了することもありません。

・数値リストの総データ数が、最大50個というのは分かりました。
・数値リストの総データ数は、最小何個でしょうか。
 0個 や 1個 ではなさそうなので… 最低 2 個以上? あるいは 10個ぐらい?
・リスト内から値を選んで合計する際に、何個のデータを選べるのでしょうか。
 1 個しか選択しない、というのは駄目らしいですが…
 たとえば最大20個などといった上限あり? あるいは全部選択されることもある?
・リスト内から、同じ項目が複数回、重複して選ばれても良いのでしょうか?
・リスト内の値は「A:同一値が含まれている可能性もある」もしくは
 「B:すべて異なる数値であることが保証される」のいずれでしょうか?


> [設定値]は変化しますが、
> [設定値]が1000の時、リストに1000以上は存在しません。
ここまでの条件を鑑みると、「該当する組み合わせがひとつも存在しない」
というパターンも少なからず発生してしまいそうです。それでも問題ないのでしょうか?
あるいは常に何かしらの組み合わせが存在するような、他の条件があるのでしょうか?


たとえば設定値が 1000 だった場合、数値リストの中身は
『最大桁数は4桁になります。最小桁数は2桁です。』
『[設定値]が1000の時、リストに1000以上は存在しません。』
の条件により、リスト内は 10 以上 999 以下の値に限られるわけですよね。

仮に、その数値リストの中身に 500 以下の値が存在していなかった場合、
2 つ以上の値の合計は、設定値である 1000 を必ず超えてしまいます。

『[設定値]より大きい場合はNG』
『ひとつだけのデータで完了することもありません』
のいずれかの条件を緩めるか、あるいは
数値リストに「2〜4桁の負の整数」なども許容するとか、
数値リストと設定値の関係性をもう少し見直すとかすれば別ですが…。


> > 一覧からランダムに取り出す方法がわからない?
> 乱数を使うことはできると思います。
最初の質問のからそもそも謎ではあるのですが、そもそも、
乱数を何のために使おうとしているのでしょうか?
ランダムで選ぶ、という点が引っかかっています。

もしかして組み合わせを求めるために乱数を使うのではなく、
設問文となる設定値を決めるために、数値リストと乱数を使う…とか?


> > 複数値の合計値を求める方法が分からない?
> loopで素人なプログラム記述はできると思います。
> > 総当たり的に求めることはできているが、効率の良い方法を相談したい?
> はい。効率の良い方法がわかりません。
ではプログラムというよりは、ロジックに関する質問ということでしょうか。

それでは現状のロジックはどのようなもので、
それだとどの程度の時間がかかっていて、
それをどこまで縮めたいのでしょうか。

比較対象となる現状の制作物(あるいは具体的な不明点の提示)が無いと、
質問ではなく、単なる制作依頼になってしまうので…。

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

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