균형 분배 문제 here과 here (problem 7)이 있습니다.균형 파티션 욕심 접근법
문제는 기본적으로 주어진 숫자 배열을 2 개의 부분 집합 (S1과 S2)으로 분할하여 숫자의 합계 사이의 절대 차이가 S1이되도록 요구합니다. 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]). –