{1,3,5} 명칭 동전; 합계 = 11 특히 동적 프로그래밍을 사용 합이 나는이 동전 변화 문제의 실행 시간 복잡도를 검색코인 변경 분석
(우리는 각 교단의 동전의 번호를 사용할 수 있습니다) 확인하는 데 사용할 수있는 동전의 최소 수를 찾을 수 방법. 그러나 어디에서나 설명을 찾을 수 없었습니다.
비 동적 솔루션의 복잡성을 계산 한 다음 동적 솔루션의 복잡성을 어떻게 계산합니까? (안 욕심 일)
편집 : 여기
는 분석 질문을 받았다되는 구현입니다.
public int findCoinChange(int[] coins, int sum,int count) {
int ret = 0, maxRet = -1;
if(sum ==0)maxRet = count;
else if(sum < 0)maxRet = -1;
else{
for(int i:coins){
ret = findCoinChange(coins, sum - i,count+1);
if(maxRet< 0)maxRet = ret;
else if(ret >=0 && ret < maxRet){
maxRet = ret;
}
}
}
if(maxRet < 0)return -1;
else return maxRet;
}
나에게도 조합 폭발이 발생합니다. 그러나 나는 이것을 위해 런타임 복잡성을 어떻게 추론 할 지 확신하지 못한다.
관련 : http://stackoverflow.com/questions/1986828/coin-changing-algorithm – jason
나는이 문제에 대해 욕심을 먹지 않을 것이라고 생각합니다. – thefourtheye
thefourtheye - 욕심쟁이가 항상 최상의 솔루션을 제공하지는 않습니다. 합계 = 9; {1,4,5} 욕심쟁이는 ~ {5,1,1,1,1} 최적이 {4,4} –