私は平衡パーティショニングの問題hereとhere (problem 7)を見ていました。平衡パーティションの欲張りのアプローチ
問題は基本的に、数値の合計の絶対差がS1であるように2つのサブセット(S1とS2)に分割することを求めています。ans S2 |sum(S1) - sum(S2)|
は最小である必要があります。私が理解できなかったことは、誰も欲張りなアプローチを提案しない理由は何ですか:
def balanced_partition(lst):
idx = 0
S1 = 0
S2 = 0
result_partition=[None]*len(lst)
while idx < len(lst):
new_S1 = S1 + lst[idx]
new_S2 = S2 + lst[idx]
if abs(new_S1 - S2) < abs(new_S2 - S1):
result_partition[idx] = 1
S1 = new_S1
else:
result_partition[idx] = 2
S2 = new_S2
idx += 1
print("final sums s1 = {S1} and s2 = {S2} ".format(S1=S1, S2=S2))
return result_partition
私のアプローチには何が間違っていますか?私が思いつくことができるすべてのテストケースに合格したようです。
"テストケースの大半を過ぎているようです"。だから、いくつかのテストケースで失敗しますか?それはあなたの質問に答えませんか? –
ほとんどのテストケースでは、私は貪欲なアプローチに対して何も議論を見つけることができず、マイナスのテストケースを自分で見つけることができなかったことを意味しました。私の質問を編集しました。 – kmad1729
ネガティブテストケースをどのように検索しましたか?ほぼすべてのソートされたリストは、あなたのアプローチが最適であるという反例です(例:[1、2、3])。 –