タイトル : 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 |