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

タイトル Re^9: 組み合わせ合計探索
投稿日: 2023/02/10(Fri) 18:48
投稿者魔界の仮面弁士
> > > > > > > ペアとは限りませんし、ひとつだけのデータで完了することもありません。
> > > 次のように検索した結果が1件の場合もあります。
> > ごめんなさい、まだ良くわかりません。
> >
> > 「ひとつだけのデータで完了することもあります」ではなく
> > 「ひとつだけのデータで完了することもありません」なのですよね?
> すみません。条件を満たす場合は完了になり、そうでない場合は完了しないになります。

まだ曖昧です。一言で『条件を満たす場合』と書かれていますが、
ここでいう『条件』とは何のことでしょうか。『完了』というのは、何を終えるのでしょうか。
(何をもって「条件を満たす場合は完了」としたいのか不明瞭だということです)



設定値に完全一致する組み合わせが、まったく見つからない場合もあれば、複数見つかる場合もあります。
完全一致する組み合わせは無いが、「設定値-1」な値が複数見つかる場合もあります。


たとえば完全一致する組み合わせとして、a + b + c と x + y の 2 パターンがある場合、
 ・抽出順も含めて、すべての組み合わせを列挙すべき
 ・すべての組み合わせを列挙すべきだが、抽出順序は気にしない
 ・一つ見つけた時点で探索を打ち切って良い(最終結果には、どういう組み合わせだったのかは示さない)
 ・組み合わせはひとつ挙げれば良いが、寸法の個数が少なく組み合わせを優先したい
 ・リスト内に同じ寸法が複数ある場合、番号の小さい値を優先して使うものとしたい
などなど、色々と検討すべきことはあります。
それによって『条件』も『完了』の定義も変化することでしょう。


また、完全一致する組み合わせが存在しない状況で、
「設定値 - 20 以上 設定値以下」という近似値を満たす組み合わせを探るなら、
手続きはさらに増えることになりますよね。

たとえば、a+b+c が「設定値 - 20」という値だった場合、それは回答候補となりえますが、
残りのリスト内にある x という値が 10 以上 20 以下という値であった場合、
a+b+c+x の方が、より設定値に近い値となりえます。そうすると、a+b+c という候補を
見つけただけでは、『条件を満たす場合は完了』とは呼べません。

こうした色々な状況をひとつひとつ考えていかないと、仕様が曖昧になりますし、
曖昧なままでは、それを伝えるためのプログラムを書くこともままなりません。



> Oracleへ登録して「寸法」を order by での検索もできます。
VB2008 以降なら、データベースを経由せずとも
LINQ を使ってオンメモリで Order By できますよ。


> > 再帰クエリが使えないデータベースだったのでしょうか。
> 再起クエリの言葉を初めて知りました。
> 効率よい使用方法わかりますか?

再起(comeback)ではなく
再帰(recursion)です。

標準 SQL でいうところの WITH 句のことです。
https://atmarkit.itmedia.co.jp/fnetwork/tokusyuu/01sql99/sql99_1b.html


再帰 SQL で連続した日付範囲を用意する例
https://blog.itparadise.jp/?p=732


再帰 SQL で数独を解く例
https://garapon.hatenablog.com/entry/20100817/1282050137

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

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