我在尋找平衡分區問題here和here (problem 7)。平衡分區貪婪方法
該問題基本上要求將給定的數字數組分割成2個子集(S1和S2),使得數字之和的絕對差值爲S1和S需要最小。有一件事我不明白的是爲什麼沒有人提出貪婪的方法:
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])。 –