タイトル : Re^12: 組み合わせ合計検索 つづき 投稿日 : 2023/08/31(Thu) 15:58 投稿者 : たけし
お世話になります。 > > これを10個以下で詳細値を求めたいと思っています。 > No.12102 の実装において、FindCombination 時の再起処理のところで、 > Node の階層数が 10 を超過したら探索を打ち切るようにすれば良いでしょう。 > > 探索結果は Node で保持しているので、アイテム数も Node に管理させた方が手っ取り早いです。 > たとえば Node クラスに > Public ReadOnly Property Depth As Integer > Get > Return If(Parent Is Nothing, 0, Parent.Depth + 1) > End Get > End Property > を追加しておいて、 > If nextNode.Total <= targetValue Then > の部分を > If nextNode.Total <= targetValue AndAlso nextNode.Depth <= 10 Then > に変更するとか。 > 詳細値:を 多くした場合 198個 182 188 203 33 92 109 131 36 51 55 65 82 86 106 115 129 133 134 139 148 159 165 184 63 29 54 24 68 29 29 54 68 29 68 29 36 45 51 55 65 76 82 89 106 115 116 119 129 133 134 139 142 148 159 165 184 185 186 77 140 217 43 45 64 77 140 155 166 77 140 217 92 75 70 56 50 106 129 163 222 36 51 55 65 69 106 109 113 115 116 119 128 129 133 137 151 159 163 165 182 184 203 205 213 216 219 33 36 40 50 51 55 65 86 89 92 106 109 115 116 119 129 131 133 139 159 163 165 176 184 186 213 216 219 113 186 33 36 55 65 75 92 94 106 115 116 119 129 133 142 159 165 184 186 36 51 55 65 103 106 115 116 119 129 133 159 163 165 184 186 36 50 51 55 65 74 89 106 109 113 115 116 118 119 128 129 133 139 159 163 165 184 186 219 222 256 106 139 以下のエラーでます。 OutOfMemoryException はハンドルされませんでした。 種類 'System.OutOfMemoryExceptin' の例外がスローされました。 件数が悪さしているのでしょうか? 件数がある程度少ないときは成功します。 > よりアイテム数の少ない組み合わせを優先したい場合は、既に提供済みの > すべての組み合わせを返すバージョンを使うなどしてみてください。 これから試してみようと思っています。 > > 以下のように変更した場合 > > msgbox の値は以下のようになります。 > 修正したコードにある、第 3 引数「ByVal kyoyouti As Integer」が謎です。 > ここに値を渡している箇所も無ければ、引数値を読み取っている箇所すら見当たりません。 > > 仮変数の名前から "許容値" の意味であることは想像ができますが、 > 実引数を見ても第 3 引数が指定されていないですよ? > > 探索(1230, 値一覧3) For 設定値 = 設定値 To 設定値 - 20 Step -1 20の部分を kyoyouti で変更できるようにしていたのですが 書き込む際に消し忘れてしまいました。 |