Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonで配列の最小調整コストを見つける


正の数の配列があるとします。その配列配列の各要素を置き換えて、配列内の2つの隣接する要素間の差が、指定されたターゲット以下になるようにします。ここで、調整コストを最小限に抑える必要があるため、新しい値と古い値の差の合計になります。より正確には、∑ | A [i] – Anew[i]|を最小化します。ここで、iは0からn-1の範囲で、ここでnはAのサイズとして示され、Anewは隣接する差がターゲット以下の配列です。

したがって、入力が[56、78、53、62、40、7、26、61、50、48]、ターゲット=20の場合、出力は25になります

これを解決するには、次の手順に従います-

  • n:=arrのサイズ

  • table:=[[0 for i in range 0 to M + 1] for i in range 0 to n]

  • 0からM+1の範囲のjの場合、実行

    • table [0、j]:=| j --arr [0] |

  • 1からnの範囲のiの場合、実行します

    • 0からM+1の範囲のjの場合、実行

      • table [i、j]:=100000000

      • 最大(j-ターゲットと0)および最小(Mとj +ターゲット)の範囲内のkについては、次のようにします

        • table [i、j] =table [i、j]の最小値、table [i-1、k] + | arr [i] --j |

  • ans:=10000000

  • 0からM+1の範囲のjの場合、実行

    • ans =ansとtableの最小値[n-1、j]

    • ansを返す

理解を深めるために、次の実装を見てみましょう-

M = 100
def get_min_cost(arr, target):
   n = len(arr)
   table = [[0 for i in range(M + 1)] for i in range(n)]
   for j in range(M + 1):
      table[0][j] = abs(j - arr[0])
   for i in range(1, n):
      for j in range(M + 1):
         table[i][j] = 100000000
         for k in range(max(j - target, 0), min(M, j + target) + 1):
            table[i][j] = min(table[i][j], table[i - 1][k] + abs(arr[i] - j))
   ans = 10000000
   for j in range(M + 1):
      ans = min(ans, table[n - 1][j])
   return ans
arr= [56, 78, 53, 62, 40, 7, 26, 61, 50, 48]
target = 20
print(get_min_cost(arr, target))

入力

[56, 78, 53, 62, 40, 7, 26, 61, 50, 48], 20

出力

35

  1. Pythonプログラムで配列の合計を見つける

    この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −配列の合計を計算するために必要な配列が与えられます。 合計を取得するために各インデックスで配列と要素全体をトラバースするブルートフォースアプローチについては、以下で説明します。合計を取得するための各インデックスについては、以下で説明します。 例 # sum function def sum_(arr,n):    # using built-in function    return(sum(arr)) # main arr = [11,22,33,44,55,66

  2. 配列の合計を見つけるPythonプログラム

    この記事では、特定の問題ステートメントを解決するための解決策とアプローチについて学習します。 問題の説明 入力として配列が与えられた場合、与えられた配列の合計を計算する必要があります。 ここでは、ブルートフォースアプローチに従うことができます。つまり、リストをトラバースし、各要素を空の合計変数に追加します。最後に、合計の値を表示します。 以下で説明するように、組み込みの合計関数を使用して別のアプローチを実行することもできます。 例 # main arr = [1,2,3,4,5] ans = sum(arr,n) print ('Sum of the array is '