주어진 값과 주어진 숫자 배열이있는 연습 문제가 있습니다. 주어진 배열에있는 값 중 하나를 사용하여 주어진 값과 동일한 합을 만들 수 있습니다.부분 집합 솔루션 향상
원본, 내 알고리즘은 모든 가능한 조합에 대해 배열을 반복합니다. 나중에 현재 합계가 값보다 큰지 확인하기 위해 최적화되었습니다. 그럴 경우 후자의 조합을 모두 시도해보십시오. 모두 값보다 커야합니다.
호기심에서 처음으로 모든 합계를 계산 한 다음 합계를 정렬하고 같은 값의 합을 찾기 위해 이진 검색을 수행하는 것이 더 좋을까요? 매 한자리 수를 비교할 때 합계를 미리 계산하고 결과를 비교하는 것보다 훨씬 느릴 것이라고 생각합니다.
당신은 NP-Complete라는 부분 집합 합계 문제를 해결하고 있습니다. 사용해보십시오. http://en.wikipedia.org/wiki/Subset_sum_problem#Pseudo-polynomial_time_dynamic_programming_solution – AndyG
답변을 찾으면 찾고있는 것을 중지 할 수 있습니다. 따라서 반복을 통해 답이 있는지 확인하는 것이 더 효율적입니다. "이진 검색"이라고 말하면 데이터를 정렬해야한다고 암묵적으로 가정합니다. 그것은 다른 모든 옵션보다 훨씬 비쌉니다. – mellamokb
글쎄, 간단히 말하면, 합계와 정렬의 모든 조합을 계산하면 BS가 가능할 것입니다. 그 방법이 모든 수준의 비교를 만드는 것보다 (비록 훨씬 더 비싸지 만) 더 빨라질지를 추측 해 보았습니다. – CoderNinja