0-1ナップサック問題のためのPythonプログラム
この記事では、以下に示す問題ステートメントの解決策について学習します。
問題の説明 − n個のアイテムの重みと値が与えられているので、これらのアイテムを最大容量wまでの容量Wのバッグに入れる必要があります。最大数のアイテムを運び、その価値を返す必要があります。
次に、以下の実装のソリューションを見てみましょう-
#ブルートフォースアプローチ
例
#Returns the maximum value that can be stored by the bag def knapSack(W, wt, val, n): # initial conditions if n == 0 or W == 0 : return 0 # If weight is higher than capacity then it is not included if (wt[n-1] > W): return knapSack(W, wt, val, n-1) # return either nth item being included or not else: return max(val[n-1] + knapSack(W-wt[n-1], wt, val, n-1), knapSack(W, wt, val, n-1)) # To test above function val = [50,100,150,200] wt = [8,16,32,40] W = 64 n = len(val) print (knapSack(W, wt, val, n))
出力
350
#動的アプローチ
例
# a dynamic approach # Returns the maximum value that can be stored by the bag def knapSack(W, wt, val, n): K = [[0 for x in range(W + 1)] for x in range(n + 1)] #Table in bottom up manner for i in range(n + 1): for w in range(W + 1): if i == 0 or w == 0: K[i][w] = 0 elif wt[i-1] <= w: K[i][w] = max(val[i-1] + K[i-1][w-wt[i-1]], K[i-1][w]) else: K[i][w] = K[i-1][w] return K[n][W] #Main val = [50,100,150,200] wt = [8,16,32,40] W = 64 n = len(val) print(knapSack(W, wt, val, n))
出力
350
すべての変数はローカルスコープで宣言されており、それらの参照は上の図に示されています。
結論
この記事では、0-1ナップサック問題のPythonプログラムを作成する方法について学びました
-
単純な興味のためのPythonプログラム
この記事では、Python3.xでの単純な利息の計算について学習します。またはそれ以前。 単利は、1日の利率に元本を掛け、支払いの間に経過した日数を掛けて計算されます。 数学的に Simple Interest = (P x T x R)/100 Where, P is the principal amount T is the time and R is the rate たとえば、 If P = 1000,R = 1,T = 2 Then SI=20.0 Now let’s see how we can implement a simple interest calc
-
選択ソート用のPythonプログラム
この記事では、Python3.xでの選択ソートとその実装について学習します。またはそれ以前。 選択ソート アルゴリズムでは、配列は、ソートされていない部分から最小要素を再帰的に見つけて、それを先頭に挿入することによってソートされます。特定の配列での選択ソートの実行中に、2つのサブ配列が形成されます。 すでにソートされているサブアレイ ソートされていないサブアレイ。 選択ソートを繰り返すたびに、ソートされていないサブアレイの最小要素がポップされ、ソートされたサブアレイに挿入されます。 アルゴリズムの視覚的表現を見てみましょう- それでは、アルゴリズムの実装を見てみましょう- 例