タイトル : Re^4: 組み合わせ合計探索 投稿日 : 2023/02/09(Thu) 21:31 投稿者 : たけし
お世話になります。 > > > > hhttps://hatenachips.blog.fc2.com/blog-entry-430.html > > > 上記では『値リストがあって、そのすべての組み合わせの中から選ぶ』ものでしたが、 > > > 今回のは「個数リストがあって、その個数だけ(何かを)ランダムに選ぶ」…ということですか? > > 個数は意識していなくて、 > > 元の設問は、『[個数]よりランダムに選んだ合計値』と書かれていましたが、 > 実際には『個数は意識していない』と…? > > となると、個数 = 12 が選ばれたからと言って、12 個の値を合計していく…といった課題では無さそうですね。 はい。 > どうやら、当初の質問の [個数] という言葉のままだと、意味が混乱してしまいそうなので、 > 参考サイトの VBA 版にあるように、[数値] のリストと読み替えさせてもらいますが、不都合はありますか? ありません。 > > リストの中から合計した値が、[設定値]と同じか、または[設定値]-20以内の範囲の > > 値を求めたいと思っています。合計した全ての値と合計値を表示したいです。 > > [設定値]より大きい場合はNGです。 > 参考サイトにあるものは、すべての組み合わせの中から、最適解(合計値が一致する組み合わせ)を > 選ぶという問題でしたが、今回はそうではなく、「ランダムに選んだ合計値」が前提なのですよね? > > ランダムに選ぶという点について、もう少し具体的に説明していただけないでしょうか。 リストの中から[設定値]と同じか、または[設定値]-20以内の範囲を 短時間で選べれば問題ないです。 > また、日本語で「以内」という言葉を使った場合、文脈によっては > 以上/以下の意味なのか、超過/未満の意味なのかがブレることがあるので、 > この点ももう少し事前確認しておきたいところ。例えば設定値が 3000 だった場合、 > 「2980 以上 3000 以下」とするのか「2980 超過 3000 以下」とするのか…。 > > ひとまず、以上/以下という意味で良いでしょうか? (以内は、基準点を含むことが多いので) はい。そこまで細かくなくても問題はないです。 設定値 または 設定値 -20以内(1ザックリ20以内としています) > > > > リストにある最大桁数は4桁になります。 > 当初の質問とは異なる課題を提示されているように聞こえるのですが…何の冗談でしょう? すみません。 このようなイメージでといった解釈でお願いいたします。 > > 最小桁数は2桁です。 > 値はすべて自然数ですか? それとも負の整数なども含まれますか? 自然数のみです。 > > > ランダムに、どこから、何個の値の組み合わせを、何回取り出して比較するのでしょうか。 > > リストにある総データ数は多くても50以内です。 > > ペアとは限りませんし、ひとつだけのデータで完了することもありません。 > > ・数値リストの総データ数が、最大50個というのは分かりました。 > ・数値リストの総データ数は、最小何個でしょうか。 1の時もあります。答えが出ない場合は「抽出できませんでした」のメッセージ表示考えています。 > 0個 や 1個 ではなさそうなので… 最低 2 個以上? あるいは 10個ぐらい? ダメなものはダメなので、メッセージ表示して伝えます。 > ・リスト内から値を選んで合計する際に、何個のデータを選べるのでしょうか。 答えが出るまで求めます。ダメなときはメッセージで伝えます。 > 1 個しか選択しない、というのは駄目らしいですが… そういう場合もあるので、メッセージで伝えます。 > たとえば最大20個などといった上限あり? あるいは全部選択されることもある? 答えが出る限りリストをすべて検索します。 ダメなものはダメで伝えます。 > ・リスト内から、同じ項目が複数回、重複して選ばれても良いのでしょうか? リスト内に同じ値は重複することもあります。 個々に分けて算出し最善の結果を求めます。 > ・リスト内の値は「A:同一値が含まれている可能性もある」もしくは > 「B:すべて異なる数値であることが保証される」のいずれでしょうか? 同一値あります。すべて異なる場合もあります。 > > [設定値]は変化しますが、 > > [設定値]が1000の時、リストに1000以上は存在しません。 > ここまでの条件を鑑みると、「該当する組み合わせがひとつも存在しない」 > というパターンも少なからず発生してしまいそうです。それでも問題ないのでしょうか? メッセージで該当するデータありません。などで伝えます。 > あるいは常に何かしらの組み合わせが存在するような、他の条件があるのでしょうか? 無いものは無いです。 > たとえば設定値が 1000 だった場合、数値リストの中身は > 『最大桁数は4桁になります。最小桁数は2桁です。』 > 『[設定値]が1000の時、リストに1000以上は存在しません。』 > の条件により、リスト内は 10 以上 999 以下の値に限られるわけですよね。 最大で1500くらいです。最小は10です。 > 仮に、その数値リストの中身に 500 以下の値が存在していなかった場合、 > 2 つ以上の値の合計は、設定値である 1000 を必ず超えてしまいます。 その場合はNG処理します。 > > > 一覧からランダムに取り出す方法がわからない? > > 乱数を使うことはできると思います。 > 最初の質問のからそもそも謎ではあるのですが、そもそも、 > 乱数を何のために使おうとしているのでしょうか? > ランダムで選ぶ、という点が引っかかっています。 ランダムに拘らなくても問題ありません。 結果だけが欲しいです。 > もしかして組み合わせを求めるために乱数を使うのではなく、 > 設問文となる設定値を決めるために、数値リストと乱数を使う…とか? 乱数も特に必要ありません。 結果が全てです。(できれば検索に掛かるスピードあったほうが良いレベルです) > > > 複数値の合計値を求める方法が分からない? > > loopで素人なプログラム記述はできると思います。 > > > 総当たり的に求めることはできているが、効率の良い方法を相談したい? > > はい。効率の良い方法がわかりません。 > ではプログラムというよりは、ロジックに関する質問ということでしょうか。 > > それでは現状のロジックはどのようなもので、 > それだとどの程度の時間がかかっていて、 > それをどこまで縮めたいのでしょうか。 以前vb.net以外のソフトで同じような処理を作りました。 効率の良いものではなかったので 相談させていただいています。 > 比較対象となる現状の制作物(あるいは具体的な不明点の提示)が無いと、 > 質問ではなく、単なる制作依頼になってしまうので…。 はい。前回失敗しているので、模索していたところです。 |