2017-06-06 3 views
0

を最小化するインデックスiを見つける方法。加重リストの真ん中を見つける

例:

ex1: A = [1, 2, 3, 4, 5], i = 3 
ex2: A = [1, 2, 3], i = 2 
ex3: A = [9, 1, 2, 3, 4], i = 1 
ex4: A = [1, 2, 3, 4], i = 3 
+2

すべてのインデックスに対して反復処理を行い、コスト関数を計算し、最小のコストでインデックスを出力しますか? –

答えて

2

iが値abs([:I]) - 合計(SUM([I:]))を我々はS によって示すものとします。すべての値を知っていれば最小値を見つけることができますか?単純な反復を行い、この値を見つけます。

ここで問題は、S iの値を計算することです。これは非常に難しいことではないことが判明しました:まず、すべての要素SUMの合計を計算します。次に、左から右に反復し、現在の位置の左にあるすべての要素の合計を累積します(左の数字は iです)。 S i = abs((SUM-left i) - 左 i)。

だから、あなたが何をする必要があるか、入力オーバー2回の反復である - 値S を見つけるために、合計と第二を計算するために1私は(およびそれらの最小値を見つけます。)。

+0

'numpy.cumsum'はここで便利かもしれません – timgeb

+1

今後の読者のためには、' numpy.cumsum'は基本的に2回目の繰り返しでお勧めする合計を計算します。 (左i)また、SUM = left Nも明らかです。絶対差を最小限に抑える要素を見つけるためには2番目の反復が必要ですが、コードは短くてきれいになります –

関連する問題