理論計算機科学において、連続ナップサック問題(分数ナップサック問題とも呼ばれる)は、組み合わせ最適化におけるアルゴリズムの問題であり、その目的は、選択された材料の価値を最大化するように選択された異なる材料を分数で容器(「ナップサック」)に詰めることである。[1] [2]これは、容器に入れるアイテムが分割できない古典的なナップサック問題に似ている。ただし、連続ナップサック問題は多項式時間で解ける可能性があるのに対し、古典的なナップサック問題はNP困難である。[1]これは、問題の定式化における一見小さな変更が、計算の複雑さ に大きな影響を与える可能性がある典型的な例である。
問題の定義
連続ナップサック問題または古典的ナップサック問題のインスタンスは、ナップサックの数値容量Wと、各材料のコレクションによって指定できます。各材料には、選択可能な材料の重量w iとその材料の合計価値v iという 2 つの数値が関連付けられています。目標は、容量制約に従い 、総利益を最大化しながら 、各材料の量x i ≤ w iを選択することです。 古典的ナップサック問題では、各量x iは 0 またはw i のいずれかである必要があります。連続ナップサック問題では、 x i が0 からw iまで連続的に変化する点が異なります。[1]
この問題のいくつかの定式化では、変数x i を0から1の範囲に再スケールします。この場合、容量制約はとなり 、目標は総利益を最大化することです。
解決手法
連続ナップサック問題は、1957年にジョージ・ダンツィグ[2] [3]によって初めて発表された貪欲アルゴリズムによって解くことができる。このアルゴリズムは、単位重量あたりの値によってソートされた順序で材料を考慮する。各材料について、量x iは可能な限り大きくなるように選択される。
- これまでの選択の合計が容量Wに等しい場合、アルゴリズムはx i = 0 に設定します。
- これまでの選択の合計とWの差dがw iより小さい場合、アルゴリズムはx i = dを設定します。
- 残りのケースでは、アルゴリズムはx i = w iを選択します。
材料をソートする必要があるため、このアルゴリズムはn個の材料の入力に対してO(nlogn)の時間がかかります。[ 1 ] [ 2 ] しかし、加重中央値を見つけるアルゴリズムを採用することで、 O ( n )の時間で問題を解くことができます。[2]
参考文献
- ^ abcd Goodrich, Michael T. ; Tamassia, Roberto (2002)、「5.1.1 分数ナップサック問題」、アルゴリズム設計: 基礎、分析、およびインターネットの例、John Wiley & Sons、pp. 259–260。
- ^ abcd Korte, Bernhard ; Vygen, Jens (2012)、「17.1 分数ナップサックと加重中央値」、組み合わせ最適化: 理論とアルゴリズム、アルゴリズムと組み合わせ論、第 21 巻、Springer、pp. 459–461、ISBN 9783642244889。
- ^ Dantzig, George B. (1957)、「離散変数極値問題」、オペレーションズ・リサーチ、5 :266–277、doi :10.1287/opre.5.2.266、MR 0089098。
