目的: 早期終了を可能にする
効果: candidate > remainingTargetで枝刈り
時間計算量: O(N log N)
パラメータ:
条件: 残り目標値が0になった時
処理: 現在の組み合わせを結果に追加
条件: 候補値が残り目標値を超過
効果: 以降の探索をスキップ(ソート済みのため)
| 項目 | 計算量 | 説明 |
|---|---|---|
| 時間計算量 | O(N^(T/M)) | N=配列長, T=target値, M=最小候補値 |
| 空間計算量 | O(T/M) | 再帰スタックの最大深度 |
| ソート処理 | O(N log N) | 一回だけの前処理 |
| 最悪ケース探索数 | O(2^T) | candidates=[1], target=Tの場合 |
ソート済み配列により、候補値が目標値を超えた時点で以降の探索を停止
同一要素の重複使用を許可しつつ、順序を保って重複組み合わせを防止
配列の動的構築・削除によりメモリ使用量を最小化
TypeScriptの型システムによりランタイムエラーを防止し、最適化されたコードを生成